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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

python决策树怎么选择_机器学习|决策树分类与python实现

發布時間:2024/10/8 python 48 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python决策树怎么选择_机器学习|决策树分类与python实现 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

目錄:

1.決策樹簡介

2.決策樹生成

a) 選擇標準——熵

b) 信息增益——ID3算法

c) 信息增益率——C4.5算法

d) Gini系數——CART算法

e) 評價標準——評價函數

3.剪枝操作

a) 預剪枝

b) 后剪枝

4.決策樹的集成——隨機森林

5.Sklearn構造決策樹

a) 數據包介紹

b) 5行代碼構造決策樹

c) 參數簡介

1.決策樹簡介

決策樹概念:決策樹(Decision Trees)是一種非參監督學習方法,即沒有固定的參數,對數據進行分類或回歸學習。決策樹的目標是從已知數據中學習得到一套規則,能夠通過簡單的規則判斷,對未知數據進行預測。這里我們只討論決策樹分類的功能。

決策樹組成:根節點、非葉子節點(也叫決策點、子節點、內部節點)、分支(有向邊)、葉子節點(葉節點)。其中非葉子節點是一個分支的終點,無法繼續分離。

決策流程:所有的數據,從根節點開始,根據某一特征的條件進行分配,進入不同的子節點,不斷遞歸,最終到達葉子節點停止。例如下圖是一個判斷一家人誰愛玩游戲的決策樹。

2.決策樹的生成

a.選擇標準——熵

決策樹很重要的一個問題是選擇什么條件和特征來進行分類。舉個相親的例子:當決定是否要與一個相親的對象見面時,會有一些硬性的標準,比如年齡、長相等,也有一些次要的條件,比如是否是公務員等。和這些標準一樣,決策樹中也要選擇重要的條件和特征進行分類,這種重要性用熵來表示。

熵(entropy):在高中化學中表示物體內部的混亂程度。在概率統計中,表示隨機變量不確定性的程度。熵越大,越不確定;熵越接近于0,越確定。舉個數組的例子。現在有AB兩個數組:

A=[1,2,3,4,2,3,5]

B=[1,1,1,1,2,1,2]

A中數字多,且混亂,而B中主要都是1,偶爾出現2,那么就說A比較混亂,不確定性大,B比較整潔,比較確定。那么A的熵值高,B的熵低。在決策樹中,我們希望數據經過一個分支分類后,盡量被分離得清晰整潔,像B一樣。熵用數學公式來表達如下:

它表示選用某個特征條件進行分類后,分類結果的混亂程度。其中P代表一個條件下發生的概率。P=0時,定義熵H=0。所以無論P接近0或者1,H都接近0,此時數據結論趨向一致,混亂度低。例如將B數組進行分類,得到[1,1,1,1,1]和[2,2]兩個葉子節點,那么根節點的熵為:

有了衡量標準,那么構造決策樹的思路也就有了:隨著樹深度的增加,讓節點熵迅速降低。省略掉一些沒有實際意義的特征,最終得到一棵最矮的決策樹。那么就產生了ID3算法。

b.信息增益——ID3算法

舉個分類的例子

在outlook中,一共有14種情況,9個yes和5個no,那么根節點的信息熵為:

經過分類后,形成了三個葉子節點,此時相當于已知兩個隨機變量X,Y,求聯合概率分布下的熵:

根據此公式,先計算各葉子節點中的熵:

Outlook=sunny時,H1=0.971

Outlook=overcast時,H2=0

Outlook=rainy時,H3=0.971

再計算分類后的熵:5/140.971+4/140+5/14*0.971=0.693

這樣熵下降了:0.940-0.693=0.247

分類前與分類后,熵的差值,叫做信息增益:

**

**

它表示特征A對訓練集D的信息增益。因此,我們計算各個分類方法的信息增益,選出最gain(D,A)最大的作為分類條件,即可讓總體的熵下降最快。這也是ID3算法的核心思想。

c.信息增益率——C4.5算法

但是信息增益也有行不通的時候。舉一個極端的反例。假設每個樣本都帶有一個不重復的ID,用這些ID作為分類條件,可以一步就完成分類,這種分類方法的熵為0,信息增益很大。但是用這種條件進行分類顯然是不靠譜的。因此,可能存在某個條件,分出的種類非常多,每個種類的樣本非常少。為了解決這個問題,提出了信息增益率(也叫信息增益比),它等于信息增益除以自身熵:

**

**

如果分類很快,分布很廣的情況發生,雖然方法的信息增益較大,但是自身的熵也會很大,信息增益與自身熵的比就會很小。因此,使用信息增益率來作決策,能夠有效地排除上述這種特殊情況。

d.Gini系數——CART算法

同樣,Gini系數也是越小,總體越穩定。基于Gini系數最小的原則,產生了CART算法。

e.評價標準——評價函數

在決策樹構建完成后,需要評價構建的效果。這個評價效果是由決策樹每個葉子節點決定的。

H(t):每個葉子節點的熵值。

Nt:葉子節點上總共的樣本數。

3.剪枝操作

當決策樹訓練完成后,并不是分完就完成了。如果分的太細,可能會出現過擬合的情況。當對未知數據進行分類時,效果可能不好。這時就需要剪枝操作。剪枝操作分兩種,分別是預剪枝(前置剪枝)和后剪枝(后置剪枝)。

a.預剪枝

在構建時,加入一些條件,在訓練過程中控制決策樹的大小。此方法用的較多。預剪枝方法如下:

指定最大深度。當達到設定深度后,停止剪枝。

指定節點最小樣本數量,當小于某個值時,停止剪枝。

b.后剪枝

在決策樹構建完成后,對樹進行剪枝操作。此方法使用較少。某個節點如果不進行分割時,損失值為:

Cα(T)=C(T)1+α

進行分割后,損失值為:

Cα(T)=C(T)2+α|Tleaf|

哪個損失值低,就采用哪個方法。參數α比較大時,限制比較嚴,α比較小時,限制較弱。

4.決策樹的集成——隨機森林

只構造一棵樹的時候,可能因為部分錯誤數據,或某些不重要的特征,造成樹過擬合或出現誤差。因此可以通過構造很多樹,共同來進行決策,降低錯誤發生的概率。這種集成的算法叫做隨機森林。

隨機有兩層含義。第一,有放回的隨機采樣。假設有100個數據,隨機有放回采樣60個進行訓練。這樣能減少離譜數據和錯誤數據對樹造成影響。第二,在特征上也進行隨機選擇,假設共有10個特征,每棵樹隨機選5個特征進行分類,降低不重要的特征對樹造成影響。

森林:訓練許多棵樹,例如訓練20棵。把新的數據分別用這20棵樹進行預測,結果遵循少數服從多數的原則,采用20棵樹中結果概率最大的分類。

5.sklearn建立決策樹:

在sklearn庫中,提供了決策樹分類方法。大致的步驟是:導入數據→訓練模型→預測數據。

a.自帶數據包介紹

Sklearn中自帶了一些基礎的數據集,可供大家練手。例如iris鳶尾花數據集、digits手寫數字數據集、boston波士頓房價數據集。它們存放在sklearn.datasets中,只要導入,就可以使用了。

from sklearn import datasets

iris = datasets.load_iris()

boston = datasets.load_boston()

這些數據集有點類似于字典,存儲了所有的,包括樣本、標簽、元數據等信息。樣本數據存儲在.data中,它是一個二維數組,兩個維度分別是各樣本和各樣本的特征,大小為[n_samples, n_features]。對應標簽存儲在.target中,大小為[n_samples]。因此,可以使用.data和.target可以查看樣本和標簽。

print (iris.data)

print (iris.target)

b.五行代碼構造決策樹

以iris數據集為例,鳶尾花數據集中包括了3個品種的150朵鳶尾花的數據,數據有4個特征,分別是花瓣和花萼的長度和寬度。以這組數據為例,使用sklearn對150個數據進行分類。我們要設置一個決策樹的學習器,并根據需要設置參數。學習器也可以是其他類型,例如支持向量機、線性回歸等。

from sklearn import tree

clf = tree.DecisionTreeClassifier()

學習器設置完畢后,依次對模型進行擬合與預測。讓學習器對數據進行擬合使用.fit函數,預測使用.predict函數。

clf = clf.fit (iris.data[:-2],iris.target[:-2])

clf.predict (iris.data[-2:])

以上代碼將數據集分成了兩部分,從頭開始到倒數第二個值作為訓練樣本,訓練完畢后,將最后兩個值作為未知樣本,進行預測。其中[:-2]表示從頭到倒數第二個值,[-2:]最后兩個值。完整代碼如下:

from sklearn import datasets,tree

iris = datasets.load_iris()

clf = tree.DecisionTreeClassifier()

clf = clf.fit(iris.data[:-2],iris.target[:-2])

print (clf.predict(iris.data[-2:]))

同樣的,對于隨機森林,一段簡單的操作代碼如下:

from sklearn.ensemble import RandomForestClassifier

from sklearn import datasets

iris =datasets.load_iris()

clf=RandomForestClassifier(n_estimators=5)

clf =clf.fit(iris.data[:-2],iris.target[:-2])

print (clf.predict(iris.data[-2:]))

c.參數簡介

以上是使用sklearn構造的簡單的模型。而sklearn.tree.DecisionTreeClassifier()這個類的構造代碼如下:

class sklearn.tree.DecisionTreeClassifier(criterion='gini', splitter='best',max_depth=None, min_samples_split=2, min_samples_leaf=1,min_weight_fraction_leaf=0.0, max_features=None, random_state=None,max_leaf_nodes=None, min_impurity_split=1e-07, class_weight=None, presort=False)

以下是一些參數簡介。

criterion:建立劃分標準:例如gini系數、熵值劃分等

splitter:best或random,best是找到最好的切分點,random進行隨機的選擇。

max_features:最多選多少個特征。特征少的時候不用設置。

max_depth:指定樹最大深度是多少。避免數據太多時太龐大。

min_samples_split:樹進行節點切分時,某個節點樣本個數少于此數值,就不再向下切分了。因為切的越多,越準確,但是過擬合的可能越大。

min_samples_leaf:限制葉子節點最少的樣本數。如果葉子節點數目小于樣本數,則會和兄弟節點一起被剪枝。

min_weitht_fraction_leaf:權重項。每個葉子節點加一個權重。當權重乘以葉子節點樣本個數太小,則被剪枝。

max_leaf_nodes:最大的葉子節點數。

class_weight:樣本的權重項。處理不均衡的數據時,可以對這些數據進行權重預處理。

min_impurity_split:限制決策樹的生成。切分后,如果gini系數等參考標準變化小于此值,停止切分。

還有一些優化問題和準確度計算等方面的內容,以后再和大家討論。

總結

以上是生活随笔為你收集整理的python决策树怎么选择_机器学习|决策树分类与python实现的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。