決策樹整體上就是類似於一棵充滿if-else的樹。
信息:用來消除隨機不確定性的東西。
信息熵,單位是比特,可以用來代表不確定性
策略樹一種劃分的依據是:信息增益
:知道某種特徵之後,不確定性減少的最多,就可以先看這個特徵,即這個特徵的信息增益最大
g(D,A)=H(D)-H(D/A)
H(D)是信息熵,H(D/A)是條件熵,g(D,A)可以看成特徵A的信息增益。
決策樹太大,太深,會過於擬合,造成泛化能力不強
優點:簡單,可視化-可解釋能力強,不像深度學習,那麼深,很多都在做特徵提取,都不知道提取的是什麼,所以深度學習會被叫成黑盒子。
缺點:容易產生過擬合。
改進:1.剪枝cart算法
2.隨機森林
下面以決策樹對鳶尾花進行分類
from sklearn.model_selection import train_test_split
from sklearn.tree import DecisionTreeClassifier,export_graphviz
def decision_iris(): """ 用決策樹對鳶尾花進行分類 :return: """ #1.獲取數據集 iris=load_iris() #2.劃分數據集 x_train,x_test,y_train,y_test=train_test_split(iris.data,iris.target) #3.使用決策樹 estimator=DecisionTreeClassifier(criterion="entropy")#entropy 表示以信息增益的方式 estimator.fit(x_train,y_train) #4.模型評估 y_predict = estimator.predict(x_test) print("y_predict:\n", y_predict) print("直接比對真實值和預測值:\n", y_test == y_predict) # 2.計算準確率 score = estimator.score(x_test, y_test) print("準確率爲:\n", score) #可視化決策樹 export_graphviz(estimator,out_file="iris_tree.dot",feature_names=iris.feature_names) return None
結果爲:
除此之外,結果還有一個可視化文件iris_tree.dot,會在文件列表中,打開之後是這樣的形式:
這個可視化文件並沒有以樹的方式進行展示,這時需要打開一個網站:webgraphviz.com
然後粘貼到裏面,點擊Generate Graph,會生成樹的形狀,如