iT邦幫忙

2017 iT 邦幫忙鐵人賽
DAY 25
1
Big Data

R語言與機器學習見面會系列 第 25

Day25 R語言機器學習之複迴歸分析

我們總想人生簡簡單單的過,但努力生活卻總是讓我們容易複雜,迴歸分析也能有這樣的領悟,一組X,Y值是王子和公主美麗人生,再多一點X值,白雪公主是否要和七個小矮人一起生活的是非題也還算輕鬆;但人生就是這樣,還有更多元的,我們來試試複迴歸分析。

當我們想預測出一個數值,像是未來畢業生的收入、奶茶銷售量或是汽車可能的油耗,但觀測收集來的自**變數有很多組(X1,X2,X3..),**這個時候也許可以選擇複迴歸分析。

複迴歸(Multiple Regression)又稱多元迴歸,與簡單迴歸的差異就是X自變數會有多個,相較羅吉斯迴歸則是依變數Y不是二元型別,複迴歸表示式:

Y= A + B1X1 + B2X2 + B3X3 +.. + BnXn + E
  • A是常數
  • B1-Bn是係數
  • E 為誤差

複迴歸模型就是要運算出常數A和所有自變數的B1-Bn係數!

在Visual Studio專案新增一支Day25.R
http://ithelp.ithome.com.tw/upload/images/20161225/20103434ZqN7Ye8sDG.png

汽車油耗資料集


#載入資料
library(ggplot2)
data(mtcars)

#觀察資料
head(mtcars)

http://ithelp.ithome.com.tw/upload/images/20161225/20103434PROurMBfuY.jpg

我們直觀挑選幾個有興趣的欄位來分析油耗。

  • mpg: Miles / (US) gallon 英哩/每加侖
  • cyl: Number of cylinders 汽缸數
  • disp: Displacement(cu.in.) 單汽缸排氣量
  • hp: Gross horsepower 馬力
  • wt: Weight(lb / 1000) 車重
  • am: Transmission(0 = automatic, 1 = manual) 自手排

觀察相關係數(Correlation coefficient)


相關係數可以表示兩組變數間的相關程度,值會介於-1與1之間,越靠近-1表示負相關,越靠近1則表示正相關。
如果x變數很多,可以先用相關係數(Corr)觀察關係再選出有興趣的欄位。

cor(mtcars)[1,]

http://ithelp.ithome.com.tw/upload/images/20161225/20103434K9tduuTMxM.png

可以發現汽缸數、單汽缸排氣量、馬力及車重都有很高的負相關,反而傳統自手排的數值因為數值量化了(0=自排,1=手排)呈現了一定程度的正相關(0.599)。

圖示


#整理資料
mycars <- mtcars
#調整欄位值
mycars$am <- ifelse(mtcars$am == 0, "automatic", "manual");
#增加總排氣量
mycars$tdisp <- mtcars$cyl * mtcars$disp
#整理資料
mycars <- mtcars
#調整欄位值
mycars$am <- ifelse(mtcars$am == 0, "automatic", "manual");
#增加總排氣量
mycars$tdisp <- mtcars$cyl * mtcars$disp

#散佈圖 車重 vs 油耗 
ggplot(mycars, aes(x = wt, y = mpg)) + geom_point(aes(color = am))
#散佈圖 馬力 vs 油耗 
ggplot(mycars, aes(x = hp, y = mpg)) + geom_point(aes(color = hp))
#箱型圖觀察 自手排 vs 油耗
ggplot(mycars, aes(x = am, y = mpg)) + geom_boxplot(aes(fill = am))

執行結果:

散佈圖 車重 vs 油耗
http://ithelp.ithome.com.tw/upload/images/20161225/20103434g7akeTCDKi.png

散佈圖 馬力 vs 油耗

http://ithelp.ithome.com.tw/upload/images/20161225/20103434YKFWopqajb.png

箱型圖觀察 自手排 vs 油耗
http://ithelp.ithome.com.tw/upload/images/20161225/20103434BKwTFP9pji.png

複迴歸模型


mlm <- lm(mpg ~ wt + hp + am + tdisp, data = mycars)
summary(mlm)

http://ithelp.ithome.com.tw/upload/images/20161225/201034344rGINdQcvY.png

模型的整體績效
R-squared: 0.8407 解釋力還可以接受。
Adjusted R-squared(移除太多X造成Y預測能力增加情形的判定係數): 0.8171 解釋力還可以接受。
但在係數檢定上,只有車重和馬力有兩顆星**,排檔方式和排氣量的P-value都沒有到達信心水準。

1顆星*:p < 0.05
2顆星**:P < 0.01
3顆星***:P < 0.001

方程式

Y = a + Bwt*x1 + Bhp*x2 +Bam*x3 + Btdisp*x4

填入常數及係數

Y = 34.50+(-3.10)*x1+(-0.04)*x2+(2.1884623)*x3 + (0.0003938)*x4

使用複迴歸模型預測


手寫運算一下預測結果(車重3000磅(1,362kg),馬力245匹,自排,排氣量1548cc)
Y = 34.50+(-3.10)*3+(-0.04)*245+(2.1884623)*0 + (0.0003938)*1548
Y = 16.0096
一加侖可以跑16英哩
換算公制16 * 1.6/3.78541178 = 6.77 km/l,哈!是老車通常比較耗油嗎?

用模型預測

df <- data.frame(wt = 3,hp=245,am="automatic",tdisp=1548)
result <- predict(mlm, newdata = df)
result

執行結果:

http://ithelp.ithome.com.tw/upload/images/20161225/20103434WsA1oIehdJ.png

一加侖可以跑15.84英哩

重新對迴歸線方程式又多了一些了解,整理前兩天的迴歸模型。

Day23 R語言機器學習之簡單迴歸分析
Day24 R語言機器學習之羅吉斯迴歸
Day25 R語言機器學習之複迴歸分析預測

參考


Motor Trend Car Road Tests
https://stat.ethz.ch/R-manual/R-devel/library/datasets/html/mtcars.html

R - Multiple Regression
https://www.tutorialspoint.com/r/r_multiple_regression.htm


香草航空
http://ithelp.ithome.com.tw/upload/images/20161225/20103434GLHjphrOCk.png
2016.12.24攝於桃園機場戰備聯絡道


上一篇
Day24 R語言機器學習之羅吉斯迴歸
下一篇
Day26 R語言機器學習之決策樹與隨機森林
系列文
R語言與機器學習見面會30

尚未有邦友留言

立即登入留言