線性回歸的延伸:多項(xiàng)式回歸

線性回歸模型盡管是最簡(jiǎn)單的模型疼邀,但它卻有不少假設(shè)前提匆赃,其中最重要的一條就是響應(yīng)變量和解釋變量之間的確存在著線性關(guān)系菩帝,否則建立線性模型就是白搭笛园。然而現(xiàn)實(shí)中的數(shù)據(jù)往往線性關(guān)系比較弱尝哆,甚至本來就不存在著線性關(guān)系绊含,機(jī)器學(xué)習(xí)中有不少非線性模型市殷,這里主要講由線性模型擴(kuò)展至非線性模型的多項(xiàng)式回歸纫事。

多項(xiàng)式回歸

多項(xiàng)式回歸就是把一次特征轉(zhuǎn)換成高次特征的線性組合多項(xiàng)式渗鬼,舉例來說览露,對(duì)于一元線性回歸模型:

一元線性回歸模型

擴(kuò)展成一元多項(xiàng)式回歸模型就是:

一元多項(xiàng)式回歸模型

這個(gè)最高次d應(yīng)取合適的值,如果太大乍钻,模型會(huì)很復(fù)雜肛循,容易過擬合铭腕。

這里以Wage數(shù)據(jù)集為例,只研究wage與單變量age的關(guān)系多糠。

> library(ISLR)
> attach(Wage)
> plot(age,wage) # 首先散點(diǎn)圖可視化累舷,描述兩個(gè)變量的關(guān)系
age vs wage

可見這兩條變量之間根本不存在線性關(guān)系,最好是擬合一條曲線使散點(diǎn)均勻地分布在曲線兩側(cè)夹孔。于是嘗試構(gòu)建多項(xiàng)式回歸模型被盈。

> fit = lm(wage~poly(age,4),data = Wage) # 構(gòu)建age的4次多項(xiàng)式模型
> 
> # 構(gòu)造一組age值用來預(yù)測(cè)
> agelims = range(age)
> age.grid = seq(from=agelims[1],to=agelims[2])
> preds = predict(fit,newdata = list(age=age.grid),se=T)
> se.bands = cbind(preds$fit+2*preds$se.fit,preds$fit-2*preds$se.fit) # 構(gòu)建預(yù)測(cè)值的置信區(qū)間
> 
> plot(age,wage,xlim=agelims,cex=0.5,col="darkgrey")
> title("Degree-4 Polynomial",outer = T)
> lines(age.grid,preds$fit,lwd=2,col="blue") # 多項(xiàng)式回歸預(yù)測(cè)曲線
> matlines(age.grid,se.bands,lwd=2,col = "red",lty=3) # 置信區(qū)間曲線
4次多項(xiàng)式回歸模型

從圖中可見,采用4次多項(xiàng)式回歸效果還不錯(cuò)搭伤。那么多項(xiàng)式回歸的次數(shù)具體該如何確定只怎?

在足以解釋自變量和因變量關(guān)系的前提下,次數(shù)應(yīng)該是越低越好怜俐。方差分析(ANOVA)也可用于模型間的檢驗(yàn)身堡,比較模型M1是否比一個(gè)更復(fù)雜的模型M2更好地解釋了數(shù)據(jù),但前提是M1和M2必須要有包含關(guān)系拍鲤,即:M1的預(yù)測(cè)變量必須是M2的預(yù)測(cè)變量的子集贴谎。

> fit.1 = lm(wage~age,data = Wage)
> fit.2 = lm(wage~poly(age,2),data = Wage)
> fit.3 = lm(wage~poly(age,3),data = Wage)
> fit.4 = lm(wage~poly(age,4),data = Wage)
> fit.5 = lm(wage~poly(age,5),data = Wage)
> anova(fit.1,fit.2,fit.3,fit.4,fit.5)
Analysis of Variance Table

Model 1: wage ~ age
Model 2: wage ~ poly(age, 2)
Model 3: wage ~ poly(age, 3)
Model 4: wage ~ poly(age, 4)
Model 5: wage ~ poly(age, 5)
  Res.Df     RSS Df Sum of Sq        F    Pr(>F)    
1   2998 5022216                                    
2   2997 4793430  1    228786 143.5931 < 2.2e-16 ***
3   2996 4777674  1     15756   9.8888  0.001679 ** 
4   2995 4771604  1      6070   3.8098  0.051046 .  
5   2994 4770322  1      1283   0.8050  0.369682    
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

可見1-3次模型p值過小,與其他模型有顯著差異季稳,說明擬合得不夠擅这。4-5次較為合適,也不必更大了景鼠。

如果這個(gè)方法不好理解仲翎,我們依然可以用萬能的交叉驗(yàn)證法來選擇最合適的次數(shù)铛漓。

> nrow(Wage)
[1] 3000
> train = sample(1:3000,2000)
> cv.err = vector("numeric",5)
> for(i in 1:5){
+   fit = lm(wage~poly(age,i),data = Wage,subset = train)
+   pred = predict(fit,newdata=Wage[-train,])
+   cv.err[i] = mean((pred-wage[-train])^2)
+ }
> cv.err
[1] 1901.318 1788.861 1782.721 1778.744 1777.856
> plot(1:5,cv.err,type="l")
不同次數(shù)的測(cè)試均方差

可見4是最合適的次數(shù)溯香。

既然線性模型可擴(kuò)展至非線性模型,那么由線性回歸模型延伸的邏輯回歸模型一樣可以擴(kuò)展至非線性模型票渠。
由上面的散點(diǎn)圖可以看出逐哈,250是wage的一個(gè)分界線,因此可以以wage是否大于250作為二分類問題问顷。

fit = glm(I(wage>250)~poly(age,4),data = Wage,family = binomial) # 以250為界構(gòu)建二分類邏輯回歸模型
agelims = range(age)
age.grid = seq(from=agelims[1],to=agelims[2])
preds = predict(fit,newdata = list(age=age.grid),se=T)

# 將線性項(xiàng)映射到邏輯回歸指數(shù)項(xiàng)
pfit = exp(preds$fit)/(1+exp(preds$fit))
se.bands.logit = cbind(preds$fit+2*preds$se.fit,preds$fit-2*preds$se.fit)
se.bands = exp(se.bands.logit)/(1+exp(se.bands.logit))

plot(age,I(wage>250),xlim=agelims,type="n")
points(jitter(age),I((wage/250)),cex=.5,pch="|",col="darkgrey")
lines(age.grid,pfit,lwd=2,col="blue")
matlines(age.grid,se.bands,lwd=2,col = "red",lty=3)
多項(xiàng)式邏輯回歸概率曲線

因?yàn)闃颖颈旧順O不均衡昂秃,所以置信區(qū)間曲線跨度也較大。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末杜窄,一起剝皮案震驚了整個(gè)濱河市肠骆,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌塞耕,老刑警劉巖蚀腿,帶你破解...
    沈念sama閱讀 210,835評(píng)論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡莉钙,警方通過查閱死者的電腦和手機(jī)廓脆,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,900評(píng)論 2 383
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來磁玉,“玉大人停忿,你說我怎么就攤上這事∥蒙。” “怎么了席赂?”我有些...
    開封第一講書人閱讀 156,481評(píng)論 0 345
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)时迫。 經(jīng)常有香客問我颅停,道長(zhǎng),這世上最難降的妖魔是什么掠拳? 我笑而不...
    開封第一講書人閱讀 56,303評(píng)論 1 282
  • 正文 為了忘掉前任癞揉,我火速辦了婚禮,結(jié)果婚禮上碳想,老公的妹妹穿的比我還像新娘烧董。我一直安慰自己,他們只是感情好胧奔,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,375評(píng)論 5 384
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著预吆,像睡著了一般龙填。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上拐叉,一...
    開封第一講書人閱讀 49,729評(píng)論 1 289
  • 那天岩遗,我揣著相機(jī)與錄音,去河邊找鬼凤瘦。 笑死宿礁,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的蔬芥。 我是一名探鬼主播梆靖,決...
    沈念sama閱讀 38,877評(píng)論 3 404
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼笔诵!你這毒婦竟也來了返吻?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,633評(píng)論 0 266
  • 序言:老撾萬榮一對(duì)情侶失蹤乎婿,失蹤者是張志新(化名)和其女友劉穎测僵,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體谢翎,經(jīng)...
    沈念sama閱讀 44,088評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡捍靠,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,443評(píng)論 2 326
  • 正文 我和宋清朗相戀三年沐旨,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片榨婆。...
    茶點(diǎn)故事閱讀 38,563評(píng)論 1 339
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡希俩,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出纲辽,到底是詐尸還是另有隱情颜武,我是刑警寧澤,帶...
    沈念sama閱讀 34,251評(píng)論 4 328
  • 正文 年R本政府宣布拖吼,位于F島的核電站鳞上,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏吊档。R本人自食惡果不足惜篙议,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,827評(píng)論 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望怠硼。 院中可真熱鬧鬼贱,春花似錦、人聲如沸香璃。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,712評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽葡秒。三九已至姻乓,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間眯牧,已是汗流浹背蹋岩。 一陣腳步聲響...
    開封第一講書人閱讀 31,943評(píng)論 1 264
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留学少,地道東北人剪个。 一個(gè)月前我還...
    沈念sama閱讀 46,240評(píng)論 2 360
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像版确,于是被迫代替她去往敵國和親扣囊。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,435評(píng)論 2 348

推薦閱讀更多精彩內(nèi)容