【數據分析】線性回歸與邏輯回歸(R語言實現)

来源:https://www.cnblogs.com/xtary/archive/2018/08/23/9522282.html
-Advertisement-
Play Games

文章來源:公眾號-智能化IT系統。 回歸模型有多種,一般在數據分析中用的比較常用的有線性回歸和邏輯回歸。其描述的是一組因變數和自變數之間的關係,通過特定的方程來模擬。這麼做的目的也是為了預測,但有時也不是全部為了預測,只是為瞭解釋一種現象,因果關係。 還是按照老風格,不說空泛的概念,以實際的案例出發 ...


文章來源:公眾號-智能化IT系統。

 

回歸模型有多種,一般在數據分析中用的比較常用的有線性回歸和邏輯回歸。其描述的是一組因變數和自變數之間的關係,通過特定的方程來模擬。這麼做的目的也是為了預測,但有時也不是全部為了預測,只是為瞭解釋一種現象,因果關係。

還是按照老風格,不說空泛的概念,以實際的案例出發。

還是先前的案例,購房信息,我們這次精簡以下,這8位購房者我們只關註薪水和年齡這兩個因素,信息如下:

 

用戶ID 年齡 收入 是否買房
1 27 15W
2 47 30W
3 32 12W
4 24 45W
5 45 30W
6 56 32W
7 31 15W
8 23 30W

 

我們用這個案例說明我們提到的線性回歸模型和邏輯回歸模型。

 

線性回歸

首先我們看線性回歸模型。如果我們想試圖看下收入和年齡是否有什麼直接的關係,這裡,我們把收入看成自變數,年齡是因變數,那麼線性模型的關係圖自然是直線,按照方程,我們可以得出:

y(收入)=a + bx(年齡)

 

這裡,b是回歸繫數,a是回歸常數。但是俗話說,理想很豐滿,現實很骨幹,偏差一定存在,所以實際上還有殘差e存在。所以這個方程更精確的應該是:

y(收入)=a + bx(年齡) + e

 

現在我們來計算具體的回歸繫數和回歸常數。具體計算公式如下:

b = ∑(y - Y)(x - X)/∑(x - X)(x - X)

a = Y - bX

 

這裡,大寫的X和Y代表平均值,我們先計算除了回歸繫數,然後在通過平均值計算出回歸常數。

 

我們先算出Y值為26.125,X值為35.625。然後我們來計算回歸繫數,針對每一數據,得到如下:

用戶ID x - X y - Y (y - Y)(x - X) (x - X)(x - X)
1 -8.625 -11.125 95.953125 74.390625
2 11.375 3.875 44.078125 129.390625
3 -3.625 -14.125 51.203125 13.140625
4 -11.625 18.875 -219.421875 135.140625
5 9.375 3.875 36.328125 87.890625
6 20.375 5.875 119.703125 415.140625
7 -4.625 -11.125 51.453125 21.390625
8 -12.625 3.875 48.921875 159.390625

 

然後我們來計算回歸繫數和回歸常數

b = 0.1259

a = 21.6412

 

OK,現在方程已經出現了,就是:

y = 21.6412 + 0.1259x

 

那麼是否完工了呢,我們可以根據任何的年齡來預測其薪水?答案肯定是不,我們要對這個公式進行評估,以決定是否可以用線性回歸模型來預測。其中有一個方式是通過判定繫數,做為一個標準來衡量方程的擬合程度。

 

判定繫數涉及到三個概念:

理論值y1:按照公式來計算的值

觀測值y2:實際的值

平均值y3:就是剛纔計算得到的26.125

 

於是我們又計算了一大堆,得出如下:

用戶ID y3 y2 y1
1 26.125 15 24.2249
2 26.125 30 28.6309
3 26.125 12 25.3264
4 26.125 45 23.564
5 26.125 30 28.1903
6 26.125 32 30.6136
7 26.125 15 25.1061
8 26.125 30 23.3437

 

判定繫數就是:∑(y1 - y3)(y1 - y3)/∑(y2 - y3)(y2 - y3)

判定繫數要接近於1,則說明這個線性模型越準確,在這個案例中,完全沒有達到,所以是不可行的。

 

線性模型R語言實現

如果我們自己寫代碼實現,還是比較費精力和時間,R語言中已經為您實現了回歸模型的定製。

還是上述的案例,如下:

首先創建對應的數據框:

 

> year <- c(27,47,32,24,45,56,31,23)

> money <- c(15,30,12,45,30,32,15,30)

> buyhouse <- c(0,1,0,1,0,1,0,0)

> case <- data.frame(year,money,buyhouse)

> case

year money buyhouse

1 27 15 0

2 47 30 1

3 32 12 0

4 24 45 1

5 45 30 0

6 56 32 1

7 31 15 0

8 23 30 0

>

 

然後通過lm函數來評估:

> runs.mdl <- lm(

+ formula=money~year,data=case)

這裡,formula是公式函數,指定了因變數和自變數,data表示需要評估的數據集。

 

然後我們可以看得到的回歸繫數和回歸常數:

> coef(runs.mdl)

(Intercept) year

21.6412453 0.1258598

上面的Intercept是回歸常數,0.1258598是回歸繫數。

 

同時我們可以用summary得到詳細的分析:

> summary(runs.mdl)

 

Call:

lm(formula = money ~ year, data = case)

 

Residuals:

Min 1Q Median 3Q Max

-13.669 -10.165 2.569 3.849 20.338

 

Coefficients:

Estimate Std. Error t value Pr(>|t|)

(Intercept) 21.6412 13.9636 1.550 0.172

year 0.1259 0.3734 0.337 0.748

 

Residual standard error: 12.02 on 6 degrees of freedom

Multiple R-squared: 0.01859, Adjusted R-squared: -0.145

F-statistic: 0.1136 on 1 and 6 DF, p-value: 0.7475

 

上面的Multiple R-squared: 0.01859就是判定繫數,這裡已經有了非常詳細的評估。

 

邏輯回歸

如上所說的是線性回歸,邏輯回歸可以理解為線性回歸的衍生,只是因變數的範圍固定在0和1之間。X和Y變數的曲線呈S型。當X逐漸減少時,Y也趨近於0。

同樣,邏輯回歸有一系列的計演算法則,以及公式。和線性回歸一樣,其需要回歸繫數和回歸參數,來評估因變數的取向。而在這裡,因變數Y不再是一個值估計,而是概率,當Y等於1的概率。

 

這個公式如下:

P(Y=1│X=x)=exp(x'β)/(1+exp(x'β))

 

具體的演算法原理我們不做詳細討論,還是以案例來說,我們評估根據年齡和薪水這兩個變數,決定是否買房的概率,這是個二元邏輯回歸。

 

在R語言中,我們可以坐享其成,用glm來統計

> runss.mdl <- glm(formula=buyhouse~year+money,data=case,family="binomial")

這裡我們要指定family是binomial,以表明是邏輯回歸。

 

然後我們查看具體的情況:

> summary(runss.mdl)

 

Call:

glm(formula = buyhouse ~ year + money, family = "binomial", data = case)

 

Deviance Residuals:

1 2 3 4 5 6

-2.100e-08 5.169e-05 -2.100e-08 8.346e-06 -5.019e-05 2.100e-08

7 8

-2.100e-08 -2.100e-08

 

Coefficients:

Estimate Std. Error z value Pr(>|z|)

(Intercept) -1889.94 1093171.03 -0.002 0.999

year 20.46 11911.42 0.002 0.999

money 31.62 18804.21 0.002 0.999

 

(Dispersion parameter for binomial family taken to be 1)

 

Null deviance: 1.0585e+01 on 7 degrees of freedom

Residual deviance: 5.2599e-09 on 5 degrees of freedom

AIC: 6

 

Number of Fisher Scoring iterations: 25

 

然後我們可以做出圖形,來評估最終的效果,R中的plot即可,或者通過anova來進行統計,此處省略。

 

 


公眾號-智能化IT系統。每周都有技術文章推送,包括原創技術乾貨,以及技術工作的心得分享。掃描下方關註。


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 由於近期項目中有使用圖數據的需求,經過對比,我們選擇嘗試使用 JanusGraph。本篇小記記錄了我們安裝 JanusGraph 以及需要一起集成的 Cassandra + Elasticsearch 的過程。 根據官網的介紹,JanusGraph 是一個可擴展的圖資料庫,針對存儲和查詢包含分佈在多... ...
  • DECLARE @tableNames varchar(500)SET @tableNames='xxx,DB2, ' -- 關鍵此處填寫需要刷新視圖的資料庫名稱 DECLARE @i_start intSET @i_start=1; DECLARE @i_end intSET @i_end = C ...
  • 系統:windows 重啟mysql服務出現 Server] Can't read from messagefile 等錯誤時候, 應先執行 mysqld --initialize-insecure 進項初始化操作 然後重啟服務成功 ...
  • oracle資料庫創建SEQUENCE 從0開始,不迴圈,自增1的SEQUENCE。 以上,關於SEQUENCE就不贅述了。 mybatis的mapper配置 這樣後,就能獲取自增序列後插入資料庫了。 ...
  • 我們只要用到資料庫,一般會遇到資料庫運維方面的事情,需要我們尋找原因,有很多是關乎處理器(CPU)、記憶體(Memory)、磁碟(Disk)以及操作系統的,這時我們就需要查詢他們的一些設置和內容,下麵講的就是如何查詢它們的相關信息。1、(1)獲取資料庫伺服器CPU核數等信息(只適用於SQL 2005以 ...
  • 有沒有想過一個問題,電腦編程語言眾多,常用的編程語言有Java,Python等,在開始學習大數據之前都會選擇學習Java,那Java到底好在哪呢?為什麼學大數據之前要先學Java呢? 大數據人才越來越多的受到社會和企業的青睞,很多想要學習大數據的新人在開始的時候都會覺得自己學的就是大數據,但是真的 ...
  • 1、環境 資料庫版本:12.1 操作系統:Windows Server 2008 客戶端:IBM Data Studio 4.1.3 2、配置 資料庫安裝後預設是無法遠程訪問的,需要修改sqlhosts文件,文件路徑:[安裝根目錄]\etc\sqlhosts.ol_informix1210 將紅框中 ...
  • 一. 部署環境步驟 1.1 軟體環境 操作系統:CentOS release 6.5oracle安裝包:linux.x64_11gR2_database_1of1.zip;linux.x64_11gR2_database_1of2.zip 1.2 配置主機名 1.3 配置網路 1.4 配置系統內核參 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...