前言
決策樹是一種機器學習的方法。決策樹是一種樹形結構,其中每個內部節點表示乙個屬性上的判斷,每個分支代表乙個判斷結果的輸出,最後每個葉節點代表一種分類結果。
決策樹需要監管學習。監管學習就是給出一堆樣本,每個樣本都有一組屬性和乙個分類結果,也就是分類結果已知,那麼通過學習這些樣本得到的決策樹,這個決策樹能夠對新的資料給出正確的分類。
優點:
▪ 具有很好的解釋性,模型可以生成可以理解的規則
▪ 可以發現特徵的重要程度
▪ 模型的計算複雜度低
缺點:模型容易過擬合,需要採用剪枝處理
不能很好地利用連續型特徵
**能力有限,無法達到其他強監督模型效果
方差較高,資料分布的輕微改變很容易造成樹結構完全不同
基本決策樹:id3,c4.5 , cart
id3:核心思想-以資訊增益來度量特徵選擇,選擇資訊增益最大的特徵進行**。
大致步驟為:
初始化特徵集合和資料集合;
計算資料集合資訊熵和所有特徵的條件熵,選擇資訊增益最大的特徵作為當前決策節點;
更新資料集合和特徵集合(刪除上一步使用的特徵,並按照特徵值來劃分不同分支的資料集合);
重複 2,3 兩步,若子集值包含單一特徵,則為分支葉子節點。
決策樹實踐
基於企鵝(penguins)資料集的決策樹分類實踐
step1:庫函式匯入
step2:資料讀取/載入
step3:資料資訊簡單檢視
step4:視覺化描述
step5:利用 決策樹模型 在二分類上 進行訓練和**
step6:利用 決策樹模型 在三分類(多分類)上 進行訓練和**
# 基礎函式庫
import numpy as np
import pandas as pd
# 繪圖函式庫
import matplotlib.pyplot as plt
import seaborn as sns
# 我們利用pandas自帶的read_csv函式讀取並轉化為dataframe格式
data = pd.read_csv(
'penguins_raw.csv'
)# 為了方便我們僅選取四個簡單的特徵
data = data[
['species'
,'culmen length (mm)'
,'culmen depth (mm)'
,'flipper length (mm)'
,'body mass (g)']]
data = data.fillna(-1
)# sns.pairplot(data=data, diag_kind='hist', hue= 'species')
# plt.show()
'''為了方便我們將標籤轉化為數字
'adelie penguin (pygoscelis adeliae)' ------0
'gentoo penguin (pygoscelis papua)' ------1
'chinstrap penguin (pygoscelis antarctica) ------2 '''
deftrans
(x):
if x == data[
'species'
].unique()[
0]:return
0if x == data[
'species'
].unique()[
1]:return
1if x == data[
'species'
].unique()[
2]:return
2data[
'species'
]= data[
'species'].
(trans)
'''for col in data.columns:
if col != 'species':
sns.boxplot(x='species', y=col, saturation=0.5, palette='pastel', data=data)
plt.title(col)
plt.show()
''''''
# 選取其前三個特徵繪製三維散點圖
from mpl_toolkits.mplot3d import axes3d
fig = plt.figure(figsize=(10,8))
ax = fig.add_subplot(111, projection='3d')
data_class0 = data[data['species']==0].values
data_class1 = data[data['species']==1].values
data_class2 = data[data['species']==2].values
# 'setosa'(0), 'versicolor'(1), 'virginica'(2)
ax.scatter(data_class0[:,0], data_class0[:,1], data_class0[:,2],label=data['species'].unique()[0])
ax.scatter(data_class1[:,0], data_class1[:,1], data_class1[:,2],label=data['species'].unique()[1])
ax.scatter(data_class2[:,0], data_class2[:,1], data_class2[:,2],label=data['species'].unique()[2])
plt.legend()
plt.show()
'''# 為了正確評估模型效能,將資料劃分為訓練集和測試集,並在訓練集上訓練模型,在測試集上驗證模型效能。
from sklearn.model_selection import train_test_split
# 選擇其類別為0和1的樣本 (不包括類別為2的樣本)
data_target_part = data[data[
'species'
].isin([0
,1])
][['species']]
data_features_part = data[data[
'species'
].isin([0
,1])
][['culmen length (mm)'
,'culmen depth (mm)'
,'flipper length (mm)'
,'body mass (g)']]
# 測試集大小為20%, 80%/20%分
x_train, x_test, y_train, y_test = train_test_split(data_features_part, data_target_part, test_size =
0.2, random_state =
2020
)## 從sklearn中匯入決策樹模型
from sklearn.tree import decisiontreeclassifier
from sklearn import tree
## 定義 決策樹模型
clf = decisiontreeclassifier(criterion=
'entropy'
)# 在訓練集上訓練決策樹模型
clf.fit(x_train, y_train)
## 在訓練集和測試集上分布利用訓練好的模型進行**
train_predict = clf.predict(x_train)
test_predict = clf.predict(x_test)
from sklearn import metrics
## 利用accuracy(準確度)【**正確的樣本數目佔總**樣本數目的比例】評估模型效果
print
('the accuracy of the logistic regression is:'
,metrics.accuracy_score(y_train,train_predict)
)print
('the accuracy of the logistic regression is:'
,metrics.accuracy_score(y_test,test_predict)
)## 檢視混淆矩陣 (**值和真實值的各類情況統計矩陣)
confusion_matrix_result = metrics.confusion_matrix(test_predict,y_test)
print
('the confusion matrix result:\n'
,confusion_matrix_result)
# 利用熱力圖對於結果進行視覺化
plt.figure(figsize=(8
,6))
sns.heatmap(confusion_matrix_result, annot=
true
, cmap=
'blues'
)plt.xlabel(
'predicted labels'
)plt.ylabel(
'true labels'
)plt.show(
)
機器學習 2 決策樹
用年齡 收入 是否學生 信用度高低來判斷是否購買電腦為例子 資訊 如果待分類的事物可能劃分在多個類之中,則符號xi的資訊定義為 上例中,買電腦的概率為9 14,那麼yes的資訊為 同理,no的資訊為 資訊熵 即資訊期望值。公式如下 即 在決策樹id3演算法中,選擇使用資訊獲取量 informatio...
機器學習演算法2 決策樹
本文總結於 machine learning in action 一書 一.決策樹的一般流程 1.收集資料 可以使用任何方法 2.準備資料 數構造演算法只適應於標稱型資料,因此數值型資料必須離散。3.分析資料 可以使用任何方法,構造樹完成之後,我們應該檢查圖形是否符合預期。4.訓練資料 構造樹的資料...
機器學習 筆記2 決策樹
參考資料 周志華機器學習書籍 和 datawhale開源資料 天池鏈結 決策樹基本流程 決策樹的組成內涵 決策樹的建立流程 注意區別屬性和類別 標籤 劃分選擇 如何選擇最優的劃分屬性,決定了每個結點包含的樣本的純度。書中給出了三種劃分方法。2.1 資訊增益 資訊熵 pk 表示當前樣本集合 d 中第 ...