文章來源:公眾號-智能化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系統。每周都有技術文章推送,包括原創技術乾貨,以及技術工作的心得分享。掃描下方關註。