決策樹演算法之鳶尾花特徵分類視覺化詳解【機器學習】
持續創作,加速成長!這是我參與「掘金日新計劃 · 6 月更文挑戰」的第25天,點選檢視活動詳情
一.前言
1.1 本文原理
鳶尾花特徵分類決策樹演算法視覺化效果圖如下:
決策樹是一種常用的機器學習方法,它可以幫助我們解決分類和迴歸問題。該模型具有高度的可解釋性。該模型符合人類的思維方式,是一種經典的樹形結構。
熵:夏農用“下降”一詞來表示資訊傳輸中不確定性的量化。降幅越大,不確定性越大,從這些資訊中得出結論就越困難。
基尼係數比資訊熵要簡單很多,基尼係數的計算公式如下所示。
資訊增益(ID3演算法)以某特徵劃分資料集前後的熵的差值公式.
基尼指數的計算
在分類問題中,假設有k類,樣本點屬於k類的概率為PK,則概率分佈的基尼指數定義為:
如果樣本集D根據特徵a分為D1和D2,則在特徵a的條件下,集D的基尼指數定義為:
基尼指數基尼(D,a)表示不同特徵a組中資料集D的不確定性。基尼指數越大,樣本集的不確定性越大,這類似於熵的概念。
1.2 本文目的
- 使用scikit-learn機器學習包的決策樹演算法,使用4個特徵對鳶尾花進行分類;
- 使用ID3演算法對天氣與踢球資料集進行手工計算,手寫E(S, Temperature)、IG(S, Temperature) 、E(S, Humidity)、IG(S, Humidity)、E(S, Windy)、IG(S, Windy)的計算過程,拍照上傳、貼上圖片到實驗報告。(計算方法請參見附件PPT)
- 使用CART演算法對天氣與踢球資料集進行手工計算,手寫Gini(S, Temperature)、Gini gain(S, Temperature) 、Gini(S, Humidity)、Gini gain(S, Humidity)、Gini(S, Windy)、Gini gain(S, Windy)的計算過程,拍照上傳、貼上圖片到實驗報告。(計算方法請參見附件PPT)
- (選做)安裝決策樹視覺化控制元件GraphViz和pydotplus包,對鳶尾花分類結果生成決策樹視覺化圖片;
# 二.實驗過程
## 2.1 使用scikit-learn機器學習包的決策樹演算法,使用4個特徵對鳶尾花進行分類;
老規矩,先引入load_iris模組,有150組鳶尾花特徵資料,我們可以拿來進行學習特徵分類。
如下程式碼:
from sklearn.datasets import load_iris iris = load_iris() X = iris.data y = iris.target
引入決策樹模組:from sklearn import tree
根據特徵分析,資料可分為根節點(初始節點)、中間節點和葉節點(無進一步可分離的節點)。
我們使用DecisionTreeClassifier建立一個決策樹分類器,如下程式碼:
e = tree.DecisionTreeClassifier(criterion='entropy')
上文引數解釋:
criterion : string,optional(default =“gini”)
特徵選擇標準,可選引數,預設是gini,可以設定為entropy。 基尼是基尼不純,是將集合中的某個結果隨機應用於某個資料項的預期錯誤率。這是一個統計概念。熵就是夏農熵,一種基於資訊理論的思想。 選用全部特徵值:
tree.fit(X,y)
輸出訓練得分和預測,如下程式碼:
print("決策樹 training score: ",tree.score(X,y))
print("決策樹 predict: ",tree.predict([[7,5,2,0.5],[7.5,4,7,2]]))
輸出訓練得分和預測執行截圖如下:
2.2使用ID3演算法對天氣與踢球資料集進行手工計算,手寫E(S, Temperature)、IG(S, Temperature) 、E(S, Humidity)、IG(S, Humidity)、E(S, Windy)、IG(S, Windy)的計算過程
手寫圖暫時不放了哈,字醜。(略) 記錄一下PPT的樣板計算過程如下:
E(S) = -[(9/14)log2(9/14) + (5/14)log2 (5/14)] = 0.94
本題目通過我的計算得如下結果: ```
E(S, Temperature)=0.911 IG(S, Temperature) =0.029 E(S, Humidity)=0.788 IG(S, Humidity)=0.152 E(S, Windy)=0.8932 IG(S, Windy)=0.048 ```
最終,我們可以得到如下的決策樹:
2.3 使用CART演算法對天氣與踢球資料集進行手工計算,手寫Gini(S, Temperature)、Gini gain(S, Temperature) 、Gini(S, Humidity)、Gini gain(S, Humidity)、Gini(S, Windy)、Gini gain(S, Windy)的計算過程
手寫圖暫時不放了哈,字醜。(略) 記錄一下PPT的樣板計算過程如下:
Gini(S) = 1 - [(9/14)² + (5/14)²] = 0.4591
本題目通過我的計算得如下結果:
Gini(S, Temperature)=0.4405 Gini gain(S, Temperature)=0.0185
Gini(S, Humidity)=0.3674 Gini gain(S, Humidity)=0.0916
Gini(S, Windy)=0.4286 Gini gain(S, Windy)=0.0304
從結果來看,天氣預報(outlook)的基尼
增益為0.117,是最高的,因此我們選擇天
氣預報(outlook)作為我們的根節點。
2.4 安裝決策樹視覺化控制元件GraphViz和pydotplus包,對鳶尾花分類結果生成決策樹視覺化圖片;
先安裝視覺化控制元件GraphViz: 去官網下載安裝即可: 官網:
http://www.graphviz.org/
安裝一下pydotplus模組。
安裝一下os模組。
先使用os模組,指定一下路徑等等資訊。
import os
os.environ["PATH"] += os.pathsep + 'C:/Program Files/Graphviz/bin/'
from six import StringIO
dot_data=StringIO()
使用tree.export_graphviz,視覺化決策樹,如下程式碼:
tree.export_graphviz(clf, out_file=dot_data
, feature_names=iris.feature_names,
class_names=iris.target_names,
filled=True,
rounded=True,
special_characters=True)
使用pydotplus模組設定圖案格式等等資訊,如下程式碼:
import pydotplus
graph =pydotplus.graph_from_dot_data(dot_data.getvalue())
from IPython.display import display,Image
display(Image(graph.create_png()))
指定輸出格式,輸出為pdf和png倆個
graph.write_png("tree_iris.png")
graph.write_pdf("tree_iris.pdf")
我們看一下效果圖:
2.5 決策樹演算法之鳶尾花特徵分類視覺化效果圖
三,收穫
本次實驗收穫很大,學會了使用決策樹演算法4個特徵對鳶尾花進行分類,使用ID3演算法和CART演算法對天氣與踢球資料集進行手工計算,還學會了安裝決策樹視覺化控制元件GraphViz和pydotplus包,對鳶尾花分類結果生成決策樹視覺化圖片,本次實驗讓我對機器學習有了更加紮實的基礎和理解。
- APP開發之進階完善篇【題小滿APP】【MUI Flask MongoDB H5】
- 決策樹演算法之鳶尾花特徵分類視覺化詳解【機器學習】
- 【雲駐共創】機器學習概覽
- 支援向量機演算法之鳶尾花特徵分類【機器學習】
- 線性迴歸演算法之鳶尾花特徵分類【機器學習】
- WSL 2 installation is incomplete.【BUG解決】【Docker之雲原生基石】
- 小程式開發快速上手【快速入門篇】
- 【人工智慧】計算機視覺之OpenCV學習詳解一
- flask專案跨域攔截處理以及dbm資料庫學習【包頭文創網站開發】
- APP優化及積分榜進階上篇【MUI Flask MongoDB】
- 【java對MySQL的操作詳解】java學習之增&查
- 【雲駐共創】當c 和Lambda表示式相遇,會碰撞出怎樣的火花?