機器學習(2) 決策樹

2021-10-23 16:46:52 字數 4737 閱讀 1563

前言

決策樹是一種機器學習的方法。決策樹是一種樹形結構,其中每個內部節點表示乙個屬性上的判斷,每個分支代表乙個判斷結果的輸出,最後每個葉節點代表一種分類結果。

決策樹需要監管學習。監管學習就是給出一堆樣本,每個樣本都有一組屬性和乙個分類結果,也就是分類結果已知,那麼通過學習這些樣本得到的決策樹,這個決策樹能夠對新的資料給出正確的分類。

優點:

▪ 具有很好的解釋性,模型可以生成可以理解的規則

▪ 可以發現特徵的重要程度

▪ 模型的計算複雜度低

缺點:
模型容易過擬合,需要採用剪枝處理

不能很好地利用連續型特徵

**能力有限,無法達到其他強監督模型效果

方差較高,資料分布的輕微改變很容易造成樹結構完全不同

基本決策樹: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 中第 ...