日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

机器学习 | 算法笔记- 集成学习(Ensemble Learning)

發(fā)布時間:2025/3/15 编程问答 16 豆豆
生活随笔 收集整理的這篇文章主要介紹了 机器学习 | 算法笔记- 集成学习(Ensemble Learning) 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

前言

本系列為機(jī)器學(xué)習(xí)算法的總結(jié)和歸納,目的為了清晰闡述算法原理,同時附帶上手代碼實例,便于理解。

目錄

k近鄰(KNN) 決策樹 線性回歸 邏輯斯蒂回歸 樸素貝葉斯 支持向量機(jī)(SVM) 組合算法(Ensemble Method) K-Means 機(jī)器學(xué)習(xí)算法總結(jié) 本章為集成學(xué)習(xí),簡單介紹下Bootstraping, Bagging, Boosting, AdaBoost, RandomForest 和Gradient boosting這些組合型算法.

1.Bootstrapping

Bootstrapping: 名字來自成語“pull up by your own bootstraps”,意思就是依靠你自己的資源,稱為自助法,它是一種有放回的抽樣方法,它是非參數(shù)統(tǒng)計中一種重要的估計統(tǒng)計量方差進(jìn)而進(jìn)行區(qū)間估計的統(tǒng)計方法。其核心思想和基本步驟如下:

(1)采用重抽樣技術(shù)從原始樣本中抽取一定數(shù)量(自己給定)的樣本,此過程允許重復(fù)抽樣。
(2)根據(jù)抽出的樣本計算給定的統(tǒng)計量T。
(3)重復(fù)上述N次(一般大于1000),得到N個統(tǒng)計量T。
(4)計算上述N個統(tǒng)計量T的樣本方差,得到統(tǒng)計量的方差。

應(yīng)該說Bootstrap是現(xiàn)代統(tǒng)計學(xué)較為流行的一種統(tǒng)計方法,在小樣本時效果很好。通過方差的估計可以構(gòu)造置信區(qū)間等,其運(yùn)用范圍得到進(jìn)一步延伸。

2.裝袋bagging

裝袋算法相當(dāng)于多個專家投票表決,對于多次測試,每個樣本返回的是多次預(yù)測結(jié)果較多的那個。

裝袋算法描述

模型生成令n為訓(xùn)練數(shù)據(jù)的實例數(shù)量對于t次循環(huán)中的每一次從訓(xùn)練數(shù)據(jù)中采樣n個實例將學(xué)習(xí)應(yīng)用于所采樣本保存結(jié)果模型 分類對于t個模型的每一個使用模型對實例進(jìn)行預(yù)測返回被預(yù)測次數(shù)最多的一個

bagging:bootstrap aggregating的縮寫。讓該學(xué)習(xí)算法訓(xùn)練多輪,每輪的訓(xùn)練集由從初始的訓(xùn)練集中隨機(jī)取出的n個訓(xùn)練樣本組成,某個初始訓(xùn)練樣本在某輪訓(xùn)練集中可以出現(xiàn)多次或根本不出現(xiàn),訓(xùn)練之后可得到一個預(yù)測函數(shù)序列

最終的預(yù)測函數(shù)H對分類問題采用投票方式,對回歸問題采用簡單平均方法對新示例進(jìn)行判別。

[訓(xùn)練R個分類器f_i,分類器之間其他相同就是參數(shù)不同。其中f_i是通過從訓(xùn)練集合中(N篇文檔)隨機(jī)取(取后放回)N次文檔構(gòu)成的訓(xùn)練集合訓(xùn)練得到的。對于新文檔d,用這R個分類器去分類,得到的最多的那個類別作為d的最終類別。]

使用scikit-learn測試bagging方法

from sklearn.ensemble import BaggingClassifier from sklearn.neighbors import KNeighborsClassifier bagging = BaggingClassifier(KNeighborsClassifier(), ... max_samples=0.5, max_features=0.5)

3.提升Boosting與Adaboost

提升算法描述

模型生成賦予每個訓(xùn)練實例相同的權(quán)值t次循環(huán)中的每一次:將學(xué)習(xí)算法應(yīng)用于加了權(quán)的數(shù)據(jù)集上并保存結(jié)果模型計算模型在加了權(quán)的數(shù)據(jù)上的誤差e并保存這個誤差結(jié)果e等于0或者大于等于0.5:終止模型對于數(shù)據(jù)集中的每個實例:如果模型將實例正確分類將實例的權(quán)值乘以e/(1-e)將所有的實例權(quán)重進(jìn)行正常化 分類賦予所有類權(quán)重為0對于t(或小于t)個模型中的每一個:給模型預(yù)測的類加權(quán) -log(e/(1-e))返回權(quán)重最高的類

這個模型提供了一種巧妙的方法生成一系列互補(bǔ)型的專家。

boosting: 其中主要的是AdaBoost(Adaptive boosting,自適應(yīng)boosting)。初始化時對每一個訓(xùn)練例賦相等的權(quán)重1/N,然后用該學(xué)算法對訓(xùn)練集訓(xùn)練t輪,每次訓(xùn)練后,對訓(xùn)練失敗的訓(xùn)練例賦以較大的權(quán)重,也就是讓學(xué)習(xí)算法在后續(xù)的學(xué)習(xí)中集中對比較難的訓(xùn)練例進(jìn)行學(xué)習(xí),從而得到一個預(yù)測函數(shù)序列h1,?,hmh1,?,hm?, 其中h_i也有一定的權(quán)重,預(yù)測效果好的預(yù)測函數(shù)權(quán)重較大,反之較小。最終的預(yù)測函數(shù)H對分類問題采用有權(quán)重的投票方式,對回歸問題采用加權(quán)平均的方法對新示例進(jìn)行判別。

提升算法理想狀態(tài)是這些模型對于其他模型來說是一個補(bǔ)充,每個模型是這個領(lǐng)域的一個專家,而其他模型在這部分卻不能表現(xiàn)很好,就像執(zhí)行官一樣要尋覓那些技能和經(jīng)驗互補(bǔ)的顧問,而不是重復(fù)的。這與裝袋算法有所區(qū)分。

?

bagging與boosting的區(qū)別

二者的主要區(qū)別是取樣方式不同。bagging采用均勻取樣,而Boosting根據(jù)錯誤率來取樣,因此boosting的分類精度要優(yōu)于Bagging。bagging的訓(xùn)練集的選擇是隨機(jī)的,各輪訓(xùn)練集之間相互獨立,而boostlng的各輪訓(xùn)練集的選擇與前面各輪的學(xué)習(xí)結(jié)果有關(guān);bagging的各個預(yù)測函數(shù)沒有權(quán)重,而boosting是有權(quán)重的;bagging的各個預(yù)測函數(shù)可以并行生成,而boosting的各個預(yù)測函數(shù)只能順序生成。對于象神經(jīng)網(wǎng)絡(luò)這樣極為耗時的學(xué)習(xí)方法。bagging可通過并行訓(xùn)練節(jié)省大量時間開銷。

bagging和boosting都可以有效地提高分類的準(zhǔn)確性。在大多數(shù)數(shù)據(jù)集中,boosting的準(zhǔn)確性比bagging高。在有些數(shù)據(jù)集中,boosting會引起退化— Overfit。

Boosting思想的一種改進(jìn)型AdaBoost方法在郵件過濾、文本分類方面都有很好的性能。

Gradient boosting(又叫Mart, Treenet):Boosting是一種思想,Gradient Boosting是一種實現(xiàn)Boosting的方法,它主要的思想是,每一次建立模型是在之前建立模型損失函數(shù)的梯度下降方向損失函數(shù)(loss function)描述的是模型的不靠譜程度,損失函數(shù)越大,則說明模型越容易出錯。如果我們的模型能夠讓損失函數(shù)持續(xù)的下降,則說明我們的模型在不停的改進(jìn),而最好的方式就是讓損失函數(shù)在其梯度(Gradient)的方向上下降

使用scikit-learn測試adaboost算法

from sklearn.cross_validation import cross_val_score from sklearn.datasets import load_iris from sklearn.ensemble import AdaBoostClassifier iris = load_iris() clf = AdaBoostClassifier(n_estimators=100) scores = cross_val_score(clf, iris.data, iris.target) scores.mean() 0.9...

4.Random Forest

Random Forest: 隨機(jī)森林,顧名思義,是用隨機(jī)的方式建立一個森林,森林里面有很多的決策樹組成,隨機(jī)森林的每一棵決策樹之間是沒有關(guān)聯(lián)的。在得到森林之后,當(dāng)有一個新的輸入樣本進(jìn)入的時候,就讓森林中的每一棵決策樹分別進(jìn)行一下判斷,看看這個樣本應(yīng)該屬于哪一類(對于分類算法),然后看看哪一類被選擇最多,就預(yù)測這個樣本為那一類。 在建立每一棵決策樹的過程中,有兩點需要注意——采樣完全分裂。首先是兩個隨機(jī)采樣的過程,random forest對輸入的數(shù)據(jù)要進(jìn)行行和列的采樣。對于行采樣,采用有放回的方式,也就是在采樣得到的樣本集合中,可能有重復(fù)的樣本。假設(shè)輸入樣本為N個,那么采樣的樣本也為N個。這樣使得在訓(xùn)練的時候,每一棵樹的輸入樣本都不是全部的樣本,使得相對不容易出現(xiàn)over-fitting。然后進(jìn)行列采樣,從M個feature中,選擇m個(m << M)。之后就是對采樣之后的數(shù)據(jù)使用完全分裂的方式建立出決策樹,這樣決策樹的某一個葉子節(jié)點要么是無法繼續(xù)分裂的,要么里面的所有樣本的都是指向的同一個分類。一般很多的決策樹算法都一個重要的步驟——剪枝,但隨機(jī)森林不這樣做,由于之前的兩個隨機(jī)采樣的過程保證了隨機(jī)性,所以就算不剪枝,也不會出現(xiàn)over-fitting。?按這種算法得到的隨機(jī)森林中的每一棵都是很弱的,但是大家組合起來就很厲害了。可以這樣比喻隨機(jī)森林算法:每一棵決策樹就是一個精通于某一個窄領(lǐng)域的專家(因為我們從M個feature中選擇m讓每一棵決策樹進(jìn)行學(xué)習(xí)),這樣在隨機(jī)森林中就有了很多個精通不同領(lǐng)域的專家,對一個新的問題(新的輸入數(shù)據(jù)),可以用不同的角度去看待它,最終由各個專家,投票得到結(jié)果。

Random forest與bagging的區(qū)別

(1)Random forest是選與輸入樣本的數(shù)目相同多的次數(shù)(可能一個樣本會被選取多次,同時也會造成一些樣本不會被選取到),而bagging一般選取比輸入樣本的數(shù)目少的樣本;
(2)bagging是用全部特征來得到分類器,而Random forest是需要從全部特征中選取其中的一部分來訓(xùn)練得到分類器;?一般Random forest效果比bagging效果好!

使用scikit-learn測試隨機(jī)森林算法

from sklearn.ensemble import RandomForestClassifier X = [[0, 0], [1, 1]] Y = [0, 1] clf = RandomForestClassifier(n_estimators=10) clf = clf.fit(X, Y)

5.Gradient boosting

梯度提升樹或者梯度提升回歸樹(GBRT)是任意一個不同損失函數(shù)的泛化。GBRT是一個靈敏的并且高效程序,可以用在回歸和分類中。梯度提升樹模型在許多領(lǐng)域中都有使用,如web搜索排行榜和社會生態(tài)學(xué)中。它主要的思想是,每一次建立模型是在之前建立模型損失函數(shù)的梯度下降方向。這句話有一點拗口,損失函數(shù)(loss function)描述的是模型的不靠譜程度,損失函數(shù)越大,則說明模型越容易出錯(其實這里有一個方差、偏差均衡的問題,但是這里就假設(shè)損失函數(shù)越大,模型越容易出錯)。如果我們的模型能夠讓損失函數(shù)持續(xù)的下降,則說明我們的模型在不停的改進(jìn),而最好的方式就是讓損失函數(shù)在其梯度(Gradient)的方向上下降。

GRBT的優(yōu)勢:

  • 混合數(shù)據(jù)類型的自然處理
  • 預(yù)測力強(qiáng)
  • 健壯的輸出空間

Boosting主要是一種思想,表示“知錯就改”。而Gradient Boosting是在這個思想下的一種函數(shù)(也可以說是模型)的優(yōu)化的方法,首先將函數(shù)分解為可加的形式(其實所有的函數(shù)都是可加的,只是是否好放在這個框架中,以及最終的效果如何)。然后進(jìn)行m次迭代,通過使得損失函數(shù)在梯度方向上減少,最終得到一個優(yōu)秀的模型。值得一提的是,每次模型在梯度方向上的減少的部分,可以認(rèn)為是一個“小”的或者“弱”的模型,最終我們會通過加權(quán)(也就是每次在梯度方向上下降的距離)的方式將這些“弱”的模型合并起來,形成一個更好的模型。

?

參考:http://www.csuldw.com/2015/07/22/2015-07-22%20%20ensemble/?

轉(zhuǎn)載于:https://www.cnblogs.com/geo-will/p/10524766.html

總結(jié)

以上是生活随笔為你收集整理的机器学习 | 算法笔记- 集成学习(Ensemble Learning)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。