【數據分析】線性迴歸與邏輯迴歸

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


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


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


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


用戶ID年齡收入是否買房
12715W
24730W
33212W
42445W
54530W
65632W
73115W
82330W


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


線性迴歸

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

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。然後我們來計算迴歸係數,針對每一數據,得到如下:

用戶IDx - Xy - Y(y - Y)(x - X)(x - X)(x - X)
1-8.625-11.12595.95312574.390625
211.3753.87544.078125129.390625
3-3.625-14.12551.20312513.140625
4-11.62518.875-219.421875135.140625
59.3753.87536.32812587.890625
620.3755.875119.703125415.140625
7-4.625-11.12551.45312521.390625
8-12.6253.87548.921875159.390625


然後我們來計算迴歸係數和迴歸常數

= 0.1259

= 21.6412


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

y = 21.6412 + 0.1259x


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


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

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

觀測值y2:實際的值

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


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

用戶IDy3y2y1
126.1251524.2249
226.1253028.6309
326.1251225.3264
426.1254523.564
526.1253028.1903
626.1253230.6136
726.1251525.1061
826.1253023.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系統。每週都有技術文章推送,包括原創技術乾貨,以及技術工作的心得分享。掃描下方關注。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章