日韩黑丝制服一区视频播放|日韩欧美人妻丝袜视频在线观看|九九影院一级蜜桃|亚洲中文在线导航|青草草视频在线观看|婷婷五月色伊人网站|日本一区二区在线|国产AV一二三四区毛片|正在播放久草视频|亚洲色图精品一区

分享

R語(yǔ)言樣條曲線、決策樹(shù)、Adaboost、梯度提升(GBM)算法進(jìn)行回歸、分類(lèi)和動(dòng)態(tài)可視化

 拓端數(shù)據(jù) 2021-04-27

原文鏈接:http:///?p=22336

Boosting算法是一種把若干個(gè)分類(lèi)器整合為一個(gè)分類(lèi)器的方法,也就是一種集成分類(lèi)方法(Ensemble Method)。

計(jì)量經(jīng)濟(jì)學(xué)的視角

可以從計(jì)量經(jīng)濟(jì)學(xué)的角度理解提升方法(Boosting)的內(nèi)容。
這里的目標(biāo)是要解決:

損失函數(shù)?,以及預(yù)測(cè)器集合M。這是一個(gè)優(yōu)化問(wèn)題。這里的優(yōu)化是在函數(shù)空間中進(jìn)行的,是一個(gè)簡(jiǎn)單的優(yōu)化問(wèn)題。從數(shù)值的角度來(lái)看,優(yōu)化是用梯度下降來(lái)解決的(這就是為什么這種技術(shù)也被稱(chēng)為梯度提升)。

同樣,最佳值不是某個(gè)實(shí)值x?,而是某個(gè)函數(shù)m?。因此,在這里我們會(huì)有類(lèi)似m

其中右邊的式子也可以寫(xiě)成

從后者可以清楚地看到f是我們?cè)谑S鄽埐钌蠑M合的模型。
我們可以這樣改寫(xiě):定義

目標(biāo)是擬合一個(gè)模型,使 ri,k=h?(xi),當(dāng)我們有了這個(gè)最優(yōu)函數(shù)。設(shè) mk(x)=mk-1(x)+γkh?(x)。
這里有兩個(gè)重要點(diǎn)。

首先,我們擬合一個(gè)模型,通過(guò)一些協(xié)變量 x來(lái)解釋 y。然后考慮殘差 ε,并以相同的協(xié)變量 x來(lái)解釋它們。如果你嘗試用線性回歸,你會(huì)在第1步結(jié)束時(shí)完成,因?yàn)闅埐?ε與協(xié)變量  x是正交的:我們沒(méi)有辦法從它們那里學(xué)習(xí)。在這里它是有效的,因?yàn)槲覀兛紤]的是簡(jiǎn)單的非線性模型。而實(shí)際上,可以使用的東西是添加一個(gè)收縮參數(shù)。不要考慮 ε=y-m(x),而是 ε=y-γm(x) 。弱學(xué)習(xí)的概念在這里是極其重要的。我們收縮得越多,花的時(shí)間就越長(zhǎng)。不斷從錯(cuò)誤中學(xué)習(xí)是件好事。但從啟發(fā)式的角度來(lái)看,當(dāng)我們開(kāi)始過(guò)度擬合時(shí),我們應(yīng)該停止。而這可以通過(guò)對(duì)初始數(shù)據(jù)集進(jìn)行分割訓(xùn)練驗(yàn)證或使用交叉驗(yàn)證來(lái)觀察。

樣條曲線

我們嘗試用樣條曲線來(lái)學(xué)習(xí)。因?yàn)闃?biāo)準(zhǔn)的樣條曲線有固定的結(jié)點(diǎn),

在這里,我們將(以某種方式)優(yōu)化結(jié)點(diǎn)位置。為了說(shuō)明問(wèn)題,這里使用的是高斯回歸,而不是分類(lèi)??紤]以下數(shù)據(jù)集(只有一個(gè)協(xié)變量):


對(duì)于結(jié)點(diǎn)的最佳選擇,我們可以使用

lsgen(x, y, degree = 1, numknot = 2)

在5%的收縮參數(shù)下,代碼簡(jiǎn)單如下

v=.05

fit=lm(y~bs(x,degree=1,knots=optknot))
yp=predict(fit,newdata=df)
 yr= y - v*yp
YP=v*yp
for(t in 1:200){
fit=lm(yr~bs(x,degree=1,knots= optknot) )
 
 
plot(  x,  y,ylab="",xlab="")
lines(  x,y,type="l" )

為了直觀地看到100次迭代的結(jié)果,使用動(dòng)態(tài)可視化

viz(100)

圖1

很明顯,我們看到,在這里從數(shù)據(jù)中學(xué)習(xí)。

決策回歸樹(shù)

我們嘗試一下別的模型。如果我們?cè)诿恳徊蕉伎紤]決策樹(shù),而不是線性逐步回歸(這是用線性樣條考慮的)。

v=.1 
rpart(y~x,data=df)
yp=predict(fit)
 yr= y -  yp
YP=v*yp
for(t in 1:100){
 predict(fit,newdata=df)

同樣,為了將學(xué)習(xí)過(guò)程動(dòng)態(tài)可視化,使用

 plot( x, y,ylab="",xlab="")
lines( x,y,type="s"
fit=rpart(y~x,data=df)

圖2

這一次,通過(guò)這些樹(shù)我們不僅有一個(gè)好的模型,而且與我們使用單一的回歸樹(shù)所能得到的模型不同。
如果我們改變收縮參數(shù)呢?

為了直觀地看到縮參數(shù)改變的結(jié)果,使用動(dòng)態(tài)可視化

viz=function(v=0.05)
 f$yr=df$y -v*yp
 YP=v*yp
 for(t in 1:100){
 yp=predict(fit,newdata=df)
 yr= yr - v*yp
 lines(df$x,y,type="s"

圖3

顯然,這個(gè)收縮參數(shù)有影響。它必須很小才能得到一個(gè)好的模型。這就是使用弱學(xué)習(xí)來(lái)獲得好的預(yù)測(cè)的想法。

分類(lèi)和Adaboost

現(xiàn)在我們了解了bootsting的工作原理,并把它用于分類(lèi)。這將更加復(fù)雜,因?yàn)闅埐钤诜诸?lèi)中通常信息量不大,而且它很難縮減。因此,讓我們嘗試一些稍微不同的方法,來(lái)介紹adaboost算法,AdaBoost是最著名的Boosting族算法。
在我們最初的討論中,目標(biāo)是最小化一個(gè)凸的損失函數(shù)。在這里,如果我們把類(lèi)表示為{-1,+1},我們考慮的損失函數(shù)是(與邏輯模型相關(guān)的損失函數(shù)是。
我們?cè)谶@里所做的與梯度下降(或牛頓算法)有關(guān)。之前,我們是從誤差中學(xué)習(xí)的。在每個(gè)迭代中,計(jì)算殘差,并對(duì)這些殘差擬合一個(gè)(弱)模型。這個(gè)弱模型的貢獻(xiàn)被用于梯度下降優(yōu)化過(guò)程。

這里的情況會(huì)有所不同,因?yàn)楦y使用殘差,空殘差在分類(lèi)中從不存在。所以我們將增加權(quán)重。最初,所有的觀察值都有相同的權(quán)重。但是,迭代之后,我們將增加預(yù)測(cè)錯(cuò)誤的個(gè)體的權(quán)重,減少預(yù)測(cè)正確的個(gè)體的權(quán)重。
我們從ω0=1n開(kāi)始,然后在每一步擬合一個(gè)模型(分類(lèi)樹(shù)),權(quán)重為ωk(我們沒(méi)有討論樹(shù)的算法中的權(quán)重,但實(shí)際上在公式中是很直接的)。讓hωk表示該模型(即每個(gè)葉子里的概率)。然后考慮分類(lèi)器,它返回一個(gè)在{-1,+1}的值。然后設(shè)

Ik是被錯(cuò)誤分類(lèi)的個(gè)體集合。

然后設(shè)置

并在最后更新模型時(shí)使用

以及權(quán)重

除以總和,以確??偤褪?。如前所述,我們可以包括一些收縮參數(shù)。為了直觀地看到這個(gè)過(guò)程的收斂性,我們將在我們的數(shù)據(jù)集上繪制總誤差。

 for(i in 1:n_iter)rfit = rpart(y~., x, w, method="class")
g = -1 + 2*(predict(rfit,x)\[,2\]>.5) 
e = sum(w*(y*>0))
error\[i\] = mean(1\*f\*y<0)
plot(seq(1,n_iter),error

圖4

在這里,我們面臨一個(gè)機(jī)器學(xué)習(xí)中的經(jīng)典問(wèn)題:我們有一個(gè)完美的模型,誤差為零。用多項(xiàng)式擬合:有10個(gè)觀察值,9度的多項(xiàng)式,擬合很好。將我們的數(shù)據(jù)集一分為二,一個(gè)訓(xùn)練數(shù)據(jù)集,一個(gè)驗(yàn)證數(shù)據(jù)集。

train\_car = car\[id\_train,\]
test\_car= car\[-id\_train,\]

我們?cè)诘谝粋€(gè)模型上構(gòu)建模型,并在第二個(gè)模型上檢查

for(i in 1:n_iter){

  rfit = rpart(y\_train~., x\_train, w_train, method="class")
  train\_error\[i\] = mean(1\*f\_train\*y_train<0)
  test\_error\[i\] = mean(1\*f\_test\*y_test<0)}
plot(seq(1,n\_iter),test\_error)

圖5

在這里,和以前一樣,經(jīng)過(guò)80次迭代,我們?cè)谟?xùn)練數(shù)據(jù)集上有一個(gè)不錯(cuò)的模型,但在驗(yàn)證數(shù)據(jù)集上表現(xiàn)得很差。在20次迭代后,效果比較好。

R函數(shù):梯度提升(_GBM_)算法

也可以使用R函數(shù)。

gbm(y~ .,n.trees = 200,shrinkage = .01,cv.folds = 5

這里考慮的是交叉驗(yàn)證,而不是訓(xùn)練驗(yàn)證,以及用得是森林而不是單棵樹(shù),當(dāng)然,輸出要好得多(這里收縮參數(shù)是一個(gè)非常小的參數(shù),而且學(xué)習(xí)非常慢)。

圖6


    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類(lèi)似文章 更多