python機(jī)器學(xué)習(xí)基礎(chǔ)決策樹與隨機(jī)森林概率論
一、決策樹原理概述
1.決策樹原理
決策樹的分類原理,相當(dāng)于程序中的if-then結(jié)構(gòu),通過條件判斷,來決定結(jié)果。
2.信息論
①信息熵
假設(shè)有32支球隊(duì),在不知道任何信息的情況下,以二分法去猜冠軍,最多猜log(2)32 = 5次。此時(shí):每個(gè)球隊(duì)的奪冠概率為1/32,那么:
5 = -(1/32log1/32 + 1/32log1/32 + ......)共32項(xiàng)相加。
若事先可以得知一點(diǎn)點(diǎn)信息,則使用二分法猜冠軍的時(shí)候,次數(shù)一定比5次小,那么它的準(zhǔn)確信息量應(yīng)該是:
H = -(p1logp1 + p2logp2 + ... + p32logp32)
則H稱為信息熵,單位為比特bit。
根據(jù)以上內(nèi)容,可知,信息是和消除不確定性相聯(lián)系的。當(dāng)毫無信息的時(shí)候,信息熵最大,只要有了一定的信息,那么信息熵就會(huì)減小,不確定性也會(huì)減小。
②決策樹的分類依據(jù)
信息增益:當(dāng)?shù)弥粋€(gè)特征條件之后,減少的信息熵的大小。計(jì)算公式如下:
每一個(gè)特征所對(duì)應(yīng)的信息增益都可以通過上式計(jì)算出來,通過比較,信息增益最大的作為首要的分類標(biāo)準(zhǔn)。也就是說,每一個(gè)特征都可能對(duì)減小信息熵有作用,并且作用大小不一樣。作用越大,減少的信息熵越大,則該特征越重要,便可首先拿這個(gè)最重要的作為分類標(biāo)準(zhǔn)。
③其他決策樹使用的算法
其中,基尼系數(shù)對(duì)樣本的劃分更加仔細(xì),甚至能對(duì)訓(xùn)練集分類達(dá)到100%,但通常這種情況下,會(huì)導(dǎo)致模型在測試集中的表現(xiàn)不好,因?yàn)樗鼮榱诉_(dá)到更高的擬合度,會(huì)過于針對(duì)訓(xùn)練集樣本,由此降低了普遍性。
④決策樹API
二、決策樹算法案例
1.案例概述
本案例中,使用泰坦尼克號(hào)上的乘客數(shù)據(jù)作為樣本,是否存活作為目標(biāo)值。樣本特征包含年齡、性別、目的地、船艙類型等等。我們?cè)谀P陀?xùn)練中,只使用了船艙類型(Pclass),性別(Sex),年齡(Age)這三個(gè)作為訓(xùn)練集樣本特征。
2.數(shù)據(jù)處理
假設(shè)已經(jīng)獲取到了數(shù)據(jù)集,并賦值給titan
找出特征值和目標(biāo)值:x = titan[['Pclass', 'Age', 'Sex']] y = titan['Survived']
缺失值處理:x['Age'].fillna(x['Age'].mean(), inplace=True)
分割數(shù)據(jù)集:x_train, x_test, y_train, y_test = train_test_split(x, y, test_size=0.25)
3.特征工程
由于船艙類型和性別的數(shù)據(jù)都不是數(shù)字,因此需要用one-hot編碼來代替特征數(shù)據(jù)。通過字典數(shù)據(jù)處理,即可生成。因此,需要將訓(xùn)練集轉(zhuǎn)換為字典,通過DictVectorizer轉(zhuǎn)換即可。(注意:轉(zhuǎn)換的是整個(gè)訓(xùn)練集,而不是單獨(dú)轉(zhuǎn)換某幾列)
實(shí)例化轉(zhuǎn)換器:dict = DictVectorizer(sparse = False)
對(duì)訓(xùn)練集轉(zhuǎn)換:x_train = dict.fit_transform(x_train.to_dict,(orient='records'))
對(duì)測試集轉(zhuǎn)換:x_test = dict.transform(x_test.to_dict(orient='records'))
4.使用決策樹進(jìn)行預(yù)測
預(yù)測后可以使用graphviz查看圖像化的決策樹。需要先安裝,將導(dǎo)出的dot文件直接放在graphviz目錄下,在命令行,通過 dot -Tpng tree.dot -o tree.png命令即可導(dǎo)出png圖像。
dec = DecisionTreeClassifier()
訓(xùn)練算法:dec.fit(x_train,y_train)
打印準(zhǔn)確率:print(dec.score(x_test, y_test))
導(dǎo)出樹的結(jié)構(gòu):tree.export_graphviz(dec, out_file='D:/Graphviz/tree.dot', feature_names= [","])
注意,最后一個(gè)feature_names,直接在特征工程中,調(diào)用dict.get_feature_names,即可輸出所需內(nèi)容。
5.決策樹優(yōu)缺點(diǎn)及改進(jìn)
優(yōu)點(diǎn):
原理及解釋較為簡單,并且可以將樹木可視化
需要很少的數(shù)據(jù)準(zhǔn)備,其他技術(shù)通常需要數(shù)據(jù)歸一化
缺點(diǎn):
決策樹學(xué)習(xí)者可以創(chuàng)建不能很好地推廣數(shù)據(jù)的過于復(fù)雜的樹,這被稱為過擬合。
決策樹可能不穩(wěn)定,因?yàn)閿?shù)據(jù)的小變化可能會(huì)導(dǎo)致完全不同的樹被生成
改進(jìn):
減枝cart算法、隨機(jī)森林
三、隨機(jī)森林
1.集成學(xué)習(xí)方法
集成學(xué)習(xí)通過建立幾個(gè)模型組合的來解決單一預(yù)測問題。它的工作原理是生成多個(gè)分類器/模型,各自獨(dú)立地學(xué)習(xí)和作出預(yù)測。這些預(yù)測最后結(jié)合成單預(yù)測,因此優(yōu)于任何一個(gè)單分類的做出預(yù)測。
隨機(jī)森林就是一種繼承學(xué)習(xí)方法,定義:在機(jī)器學(xué)習(xí)中,隨機(jī)森林是一個(gè)包含多個(gè)決策樹的分類器,并且其輸出的類別是由個(gè)別樹輸出的類別的眾數(shù)而定。
2.單個(gè)樹建立過程
①隨機(jī)在N個(gè)樣本中,有放回地選擇一個(gè)樣本,重復(fù)N次,樣本可能重復(fù)
②隨機(jī)在M個(gè)特征中選出m個(gè)特征,m取值小于總特征M
假如建立了10棵決策樹,他們的樣本以及特征大多都是不一樣的。使用隨機(jī)有返回的抽樣(bootstrap抽樣)。
3.隨機(jī)森林API
隨機(jī)森林超參數(shù):
n_estimator
:決策樹數(shù)量
max_depth
:每棵樹深度限制
4.隨機(jī)森林使用案例
還是用上面決策樹的案例,假設(shè)已經(jīng)準(zhǔn)備好了訓(xùn)練集x_train, y_train,測試集x_test, y_test
rf = RandomForestClassifier()
由于隨機(jī)森林有超參數(shù)n_estimator,max_depth,因此可以使用網(wǎng)格搜索交叉驗(yàn)證,對(duì)不同的參數(shù)組合進(jìn)行一一驗(yàn)證,尋找最好的參數(shù)組合模型。
設(shè)置超參數(shù)取值:param = {'n_estimator':[100,200,300,400,500], 'max_depth':[5,10,15,20]}
實(shí)例化算法:gc = GridSearchCV(rf, param_grid=param, cv=2) (假設(shè)使用二折驗(yàn)證)
訓(xùn)練算法:gc.fit(x_train, y_train)
輸出準(zhǔn)確率:gc.score(x_test, y_test)
查看所選擇的參數(shù)模型:gc.best_params_
5.隨機(jī)森林的優(yōu)點(diǎn)
①在當(dāng)前所有算法中,具有極好的準(zhǔn)確率
②能夠有效地運(yùn)行在大數(shù)據(jù)集上(樣本數(shù)、特征數(shù))
③能夠處理具有高維特征的輸入樣本,而且不需要降維
④能夠評(píng)估各個(gè)特征在分類問題上的重要性
以上就是python機(jī)器學(xué)習(xí)基礎(chǔ)決策樹與隨機(jī)森林概率論的詳細(xì)內(nèi)容,更多關(guān)于python決策樹與隨機(jī)森林概率論的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
python經(jīng)典趣味24點(diǎn)游戲程序設(shè)計(jì)
這篇文章主要介紹了python經(jīng)典趣味24點(diǎn)游戲程序設(shè)計(jì),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-07-07python 使用三引號(hào)時(shí)容易犯的小錯(cuò)誤
這篇文章主要介紹了python 使用三引號(hào)時(shí)容易犯的小錯(cuò)誤,幫助新手學(xué)習(xí),避免入坑,感興趣的朋友可以了解下2020-10-10python導(dǎo)包的幾種方法(自定義包的生成以及導(dǎo)入詳解)
這篇文章主要介紹了python導(dǎo)包的幾種方法(自定義包的生成以及導(dǎo)入詳解),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-07-07如何基于Python實(shí)現(xiàn)數(shù)字類型轉(zhuǎn)換
這篇文章主要介紹了如何基于Python實(shí)現(xiàn)數(shù)字類型轉(zhuǎn)換,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-02-02Python實(shí)現(xiàn)將藍(lán)底照片轉(zhuǎn)化為白底照片功能完整實(shí)例
這篇文章主要介紹了Python實(shí)現(xiàn)將藍(lán)底照片轉(zhuǎn)化為白底照片功能,結(jié)合完整實(shí)例形式分析了Python基于cv2庫進(jìn)行圖形轉(zhuǎn)換操作的相關(guān)實(shí)現(xiàn)技巧,需要的朋友可以參考下2019-12-12pytorch 改變tensor尺寸的實(shí)現(xiàn)
今天小編就為大家分享一篇pytorch 改變tensor尺寸的實(shí)現(xiàn),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2020-01-01pytorch機(jī)器學(xué)習(xí)softmax回歸的簡潔實(shí)現(xiàn)
這篇文章主要介紹了為大家介紹了pytorch機(jī)器學(xué)習(xí)中softmax回歸的簡潔實(shí)現(xiàn)方式,有需要的朋友可以借鑒參考下,希望能夠有所幫助2021-10-10Python中Tkinter Scrollbar滾動(dòng)條(窗口滑動(dòng)條)
本文主要介紹了Python中Tkinter Scrollbar滾動(dòng)條(窗口滑動(dòng)條),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2023-03-03詳解Python3網(wǎng)絡(luò)爬蟲(二):利用urllib.urlopen向有道翻譯發(fā)送數(shù)據(jù)獲得翻譯結(jié)果
這篇文章主要介紹了Python3網(wǎng)絡(luò)爬蟲(二):利用urllib.urlopen向有道翻譯發(fā)送數(shù)據(jù)獲得翻譯結(jié)果,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-05-05