最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會員登陸 & 注冊

拓端tecdat|R語言樣條曲線、決策樹、Adaboost、梯度提升(GBM)算法進行回歸、分類和動

2021-07-22 23:26 作者:拓端tecdat  | 我要投稿

原文 |?http://tecdat.cn/?p=22336?
來源 |?拓端數(shù)據(jù)部落公眾號

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

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

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

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

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

其中右邊的式子也可以寫成

從后者可以清楚地看到f是我們在剩余殘差上擬合的模型。
我們可以這樣改寫:定義

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

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

樣條曲線

我們嘗試用樣條曲線來學(xué)習(xí)。因為標準的樣條曲線有固定的結(jié)點,

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


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

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

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

  1. v=.05


  2. fit=lm(y~bs(x,degree=1,knots=optknot))

  3. yp=predict(fit,newdata=df)

  4. yr= y - v*yp

  5. YP=v*yp

  6. for(t in 1:200){

  7. fit=lm(yr~bs(x,degree=1,knots= optknot) )



  8. plot( ?x, ?y,ylab="",xlab="")

  9. lines( ?x,y,type="l" )

為了直觀地看到100次迭代后的結(jié)果,使用

viz(100)


?

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

決策回歸樹

我們嘗試一下別的模型。如果我們在每一步都考慮決策樹,而不是線性逐步回歸(這是用線性樣條考慮的)。

  1. v=.1

  2. rpart(y~x,data=df)

  3. yp=predict(fit)

  4. yr= y - ?yp

  5. YP=v*yp

  6. for(t in 1:100){

  7. predict(fit,newdata=df)

同樣,為了將學(xué)習(xí)過程可視化,使用


  1. plot( x, y,ylab="",xlab="")

  2. lines( x,y,type="s"

  3. fit=rpart(y~x,data=df)


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

  1. viz=function(v=0.05)

  2. f$yr=df$y -v*yp

  3. YP=v*yp

  4. for(t in 1:100){

  5. yp=predict(fit,newdata=df)

  6. yr= yr - v*yp

  7. lines(df$x,y,type="s"


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

分類和Adaboost

現(xiàn)在我們了解了bootsting的工作原理,并把它用于分類。這將更加復(fù)雜,因為殘差在分類中通常信息量不大,而且它很難縮減。因此,讓我們嘗試一些稍微不同的方法,來介紹adaboost算法,AdaBoost是最著名的Boosting族算法。
在我們最初的討論中,目標是最小化一個凸的損失函數(shù)。在這里,如果我們把類表示為{-1,+1},我們考慮的損失函數(shù)是

(與邏輯模型相關(guān)的損失函數(shù)是


我們在這里所做的與梯度下降(或牛頓算法)有關(guān)。之前,我們是從誤差中學(xué)習(xí)的。在每個迭代中,計算殘差,并對這些殘差擬合一個(弱)模型。這個弱模型的貢獻被用于梯度下降優(yōu)化過程。

這里的情況會有所不同,因為更難使用殘差,空殘差在分類中從不存在。所以我們將增加權(quán)重。最初,所有的觀察值都有相同的權(quán)重。但是,迭代之后,我們將增加預(yù)測錯誤的個體的權(quán)重,減少預(yù)測正確的個體的權(quán)重。
我們從ω0=1n開始,然后在每一步擬合一個模型(分類樹),權(quán)重為ωk(我們沒有討論樹的算法中的權(quán)重,但實際上在公式中是很直接的)。讓hωk表示該模型(即每個葉子里的概率)。然后考慮分類器

,它返回一個在{-1,+1}的值。然后設(shè)

Ik是被錯誤分類的個體集合。

然后設(shè)置

并在最后更新模型時使用

以及權(quán)重

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


  1. for(i in 1:n_iter)rfit = rpart(y~., x, w, method="class")

  2. g = -1 + 2*(predict(rfit,x)[,2]>.5)

  3. e = sum(w*(y*>0))

  4. error[i] = mean(1*f*y<0)

  5. plot(seq(1,n_iter),error


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



  1. train_car = car[id_train,]

  2. test_car= car[-id_train,]



我們在第一個模型上構(gòu)建模型,并在第二個模型上檢查


  1. for(i in 1:n_iter){


  2. rfit = rpart(y_train~., x_train, w_train, method="class")

  3. train_error[i] = mean(1*f_train*y_train&lt;0)

  4. test_error[i] = mean(1*f_test*y_test&lt;0)}

  5. plot(seq(1,n_iter),test_error)


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

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

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

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

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

最受歡迎的見解

1.從決策樹模型看員工為什么離職

2.R語言基于樹的方法:決策樹,隨機森林

3.python中使用scikit-learn和pandas決策樹

4.機器學(xué)習(xí):在SAS中運行隨機森林數(shù)據(jù)分析報告

5.R語言用隨機森林和文本挖掘提高航空公司客戶滿意度

6.機器學(xué)習(xí)助推快時尚精準銷售時間序列

7.用機器學(xué)習(xí)識別不斷變化的股市狀況——隱馬爾可夫模型的應(yīng)用

8.python機器學(xué)習(xí):推薦系統(tǒng)實現(xiàn)(以矩陣分解來協(xié)同過濾)

9.python中用pytorch機器學(xué)習(xí)分類預(yù)測銀行客戶流失


拓端tecdat|R語言樣條曲線、決策樹、Adaboost、梯度提升(GBM)算法進行回歸、分類和動的評論 (共 條)

分享到微博請遵守國家法律
呼伦贝尔市| 太仓市| 封丘县| 绥江县| 台中县| 安平县| 吉林省| 连城县| 淳安县| 靖宇县| 肥西县| 东丰县| 灯塔市| 行唐县| 乌鲁木齐市| 宜兰县| 西林县| 邓州市| 抚顺县| 南开区| 玉门市| 炎陵县| 兴安盟| 西宁市| 通许县| 洪洞县| 万州区| 拜泉县| 元阳县| 三明市| 汉中市| 江陵县| 石林| 思南县| 大连市| 黔西县| 微博| 博兴县| 屏山县| 阿坝| 泰兴市|