SKlearn之決策樹

決策樹是一種非參數的監督學習方法。

模塊:Sklearn.tree

sklearn建模的步驟:

1、選擇並建立模型   例:clf = tree.DecisionTreeClassifier()

2、提供數據訓練模型   例:clf = clf.fit(X_train,y_train)

3、獲取需要的信息   例:result = clf.score(X_test,y_test)

 

分類樹中的參數:

一、criterion

criterion是用來決定不純度的計算方法,不純度越低,擬合效果越好。

參數值:entropy(信息熵)、gini(基尼係數)

二、random_state

隨機種子。在高維度時比較明顯。

三、splitter

控制隨機選項

參數值:best(優先選擇重要的特徵進行分支)、random(分支時更隨機,可以防止過擬合)

下面是一些用於剪枝的參數:

四、max_depth

剪枝,限制最大深度,在高緯度低樣本量時有效。可以防止過擬合。

五、min_samples_leaf

當分出的子節點小於min_sample_leafs就直接剪枝,不會往下分。當數值設置的過小時,會過擬合;過大的話,會阻止學習。

六、min_samples_split

一個節點必須包含min_samples_split的訓練樣本纔會被分支

七、max_features

限制分支時考慮的特徵個數,超過限制個數就會被捨棄

八、min_impurity_decrease

信息增益是指子節點與父節點的信息熵的差值。這個參數用於設定,當信息增益小於閾值時,就不再分支。

 

以紅酒數據爲例:

from sklearn import tree
from sklearn.datasets import load_wine
from sklearn.model_selection import train_test_split

由於數據集是一個字典,可以通過 ”.鍵“ 的方式將數據打印出來:

數據的標籤可以分爲0、1、2 。所以他是一個三分類的數據。

接下來做一個最簡單的分類:

#將數據集分爲訓練集和測試集
x_train,x_test,y_train,y_test = train_test_split(wine.data,wine.target,test_size=0.3)

clf = tree.DecisionTreeClassifier(criterion="entropy",random_state=0,splitter='best')
clf = clf.fit(x_train,y_train)
score = clf.score(x_test,y_test)
print(score)

這樣就得出了一個90%正確率的模型

 

然後可以查看哪一個元素在決策樹中比較重要:

print([*zip(feature_name,clf.feature_importances_)])

就可以得到:

 

當我們嘗試了幾種剪枝方法,但效果不明顯時,可以做超參數的學習曲線。

例如,我們改變最大層數:

test = []
for i in range(10):
    clf = tree.DecisionTreeClassifier(criterion="entropy",random_state=0,splitter='best',max_depth=i+1)
    clf = clf.fit(x_train,y_train)
    score = clf.score(x_test,y_test)
    test.append(score)
plt.plot(range(1,11),test,'r')
plt.legend()
plt.show()

就可以繪製出這樣的線段:

所以可以瞭解到當max_depth=2的時候是最好的。

 

接下來再介紹兩個重要的結果接口:

clf.apply(x_test)   他會返回測試樣本所在的葉子節點

clf.predict(x_test)   他會返回測試樣本的結果

clf = tree.DecisionTreeClassifier(criterion="entropy",random_state=0,splitter='best',max_depth=2)
clf = clf.fit(x_train,y_train)
score = clf.score(x_test,y_test)
print(x_test[0])
print(clf.predict(x_test[0].reshape(1,-1)))

由於sklearn不接受一維的特徵,所以用reshape(1,-1)來增維,也可以直接在外面加 [  ] 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章