# Iris鳶尾花數據集是常用的分類實驗數據集,由Fisher, 1936收集整理。
# 是一類多重變量分析的數據集。分為3類,每類50個數據,每個數據包含4個屬性。
# 可通過4個屬性預測鳶尾花屬於(Setosa,Versicolour,Virginica)三個種類中的哪一類。
sklearn決策樹
from sklearn import datasets,tree
import numpy as np
#載入數據集
iris=datasets.load_iris()
iris_data=iris['data']
iris_label=iris['target']
X=np.array(iris_data)
Y=np.array(iris_label)
#訓練
clf=tree.DecisionTreeClassifier(max_depth=5)
clf.fit(X,Y)
#預測
print clf.predict([[4.1, 2.2, 2.3, 5.4]])
sklearn隨機森林
from sklearn import datasets, ensemble
import numpy as np
iris=datasets.load_iris()
iris_data=iris['data']
iris_label=iris['target']
X=np.array(iris_data)
Y=np.array(iris_label)
clf = ensemble.RandomForestClassifier(max_depth=5, n_estimators=1, max_features=1)
clf.fit(X,Y)
print clf.predict([[4.1, 2.2, 2.3, 5.4]])
本意是想確認,當隨機森林里n_estimators=1即森林數量1個時,看結果是否和決策樹一致。
多次執行程序發現,兩段代碼的結果都是不唯一的。決策樹在任何條件下的結果不都應該是唯一的嗎?困惑!
先去學其他的,后面深入研究下sklearn的代碼含義,再來解決這個問題。
Q:看了下sklearn決策樹算法的predict_proba接口,它的解釋是輸出一個樣本屬於某個類的概率。但是我所理解的,每一個樣本在給定的決策樹下,最終應該只會屬於一個類別,那也就是意味着這個樣本屬於那個類別的概率就應該是100%啊。那predict_proba這個接口是怎么計算所謂的概率的呢?不知道我是不是哪里理解錯了。
A:這是《機器學習·升級版IV》中“決策樹和隨機森林”章節的問題。
答案非常簡單:因為葉子節點是“純結點”,假定某個葉子包含的三個類別的樣本個數分別是(7,2,1),則如果某測試樣本落在這個結點中,它判定這三個類別的概率分別是(0.7,0.2,0.1)。