機器學習演算法(六):基於決策樹的分類預測
阿新 • • 發佈:2020-08-11
一、決策樹的介紹
決策樹是一種常見的分類模型,在金融分控、醫療輔助診斷等諸多行業具有較為廣泛的應用。決策樹的核心思想是基於樹結構對資料進行劃分,這種思想是人類處理問題時的本能方法。例如在婚戀市場中,女方通常會先看男方是否有房產,如果有房產再看是否有車產,如果有車產再看是否有穩定工作……最後得出是否要深入瞭解的判斷。
決策樹的主要優點:
- 具有很好的解釋性,模型可以生成可以理解的規則。
- 可以發現特徵的重要程度。
- 模型的計算複雜度較低。
決策樹的主要缺點:
- 模型容易過擬合,需要採用減枝技術處理。
- 不能很好利用連續型特徵。
- 預測能力有限,無法達到其他強監督模型效果。
- 方差較高,資料分佈的輕微改變很容易造成樹結構完全不同。
Part1 Demo實踐
- Step1:庫函式匯入
- Step2:模型訓練
- Step3:資料和模型視覺化
- Step4:模型預測
Part2 基於企鵝(penguins)資料集的決策樹分類實踐
- Step1:庫函式匯入
- Step2:資料讀取/載入
- Step3:資料資訊簡單檢視
- Step4:視覺化描述
- Step5:利用 決策樹模型 在二分類上 進行訓練和預測
- Step6:利用 決策樹模型 在三分類(多分類)上 進行訓練和預測
2.1Demo實踐
Step1: 庫函式匯入
## 基礎函式庫 import numpy as np ## 匯入畫相簿 import matplotlib.pyplot as pltimport seaborn as sns ## 匯入決策樹模型函式 from sklearn.tree import DecisionTreeClassifier from sklearn import tree
Step2: 訓練模型
##Demo演示LogisticRegression分類 ## 構造資料集 x_fearures = np.array([[-1, -2], [-2, -1], [-3, -2], [1, 3], [2, 1], [3, 2]]) y_label = np.array([0, 1, 0, 1, 0, 1]) ## 呼叫決策樹模型 tree_clf = DecisionTreeClassifier()## 用決策樹模型擬合構造的資料集 tree_clf = tree_clf.fit(x_fearures, y_label)
Step3: 資料和模型視覺化(需要用到graphviz視覺化庫)
## 視覺化構造的資料樣本點 plt.figure() plt.scatter(x_fearures[:,0],x_fearures[:,1], c=y_label, s=50, cmap='viridis') plt.title('Dataset') plt.show()
## 本段程式碼實際效果為本地生成PDF視覺化文件,在體驗過程中可以不執行,可能無法正常展示結果; ## 程式碼生成的視覺化結果會截圖展示實際效果 !pip install graphviz import graphviz dot_data = tree.export_graphviz(tree_clf, out_file=None) graph = graphviz.Source(dot_data) graph.render("pengunis") ## 'pengunis.pdf' 目前環境問題,還不能展示
Step4:模型預測
## 建立新樣本 x_fearures_new1 = np.array([[0, -1]]) x_fearures_new2 = np.array([[2, 1]]) ## 在訓練集和測試集上分佈利用訓練好的模型進行預測 y_label_new1_predict = tree_clf.predict(x_fearures_new1) y_label_new2_predict = tree_clf.predict(x_fearures_new2) print('The New point 1 predict class:\n',y_label_new1_predict) print('The New point 2 predict class:\n',y_label_new2_predict) # The New point 1 predict class: # [1] # The New point 2 predict class: # [0]
全部程式碼如下(已摺疊):
# -*- coding: utf-8 -*- """ Created on Tue Aug 11 10:12:48 2020 @author: Admin """ #Step1: 庫函式匯入 ## 基礎函式庫 import numpy as np ## 匯入畫相簿 import matplotlib.pyplot as plt import seaborn as sns ## 匯入決策樹模型函式 from sklearn.tree import DecisionTreeClassifier from sklearn import tree #Step2: 訓練模型 ##Demo演示LogisticRegression分類 ## 構造資料集 x_fearures = np.array([[-1, -2], [-2, -1], [-3, -2], [1, 3], [2, 1], [3, 2]]) y_label = np.array([0, 1, 0, 1, 0, 1]) ## 呼叫決策樹模型 tree_clf = DecisionTreeClassifier() ## 用決策樹模型擬合構造的資料集 tree_clf = tree_clf.fit(x_fearures, y_label) #Step3: 資料和模型視覺化(需要用到graphviz視覺化庫) ## 視覺化構造的資料樣本點 plt.figure() plt.scatter(x_fearures[:,0],x_fearures[:,1], c=y_label, s=50, cmap='viridis') plt.title('Dataset') plt.show() ## 本段程式碼實際效果為本地生成PDF視覺化文件,在體驗過程中可以不執行,可能無法正常展示結果; ## 程式碼生成的視覺化結果會截圖展示實際效果 #!pip install graphviz 已經有啦的就不需要安裝了 import graphviz dot_data = tree.export_graphviz(tree_clf, out_file=None) graph = graphviz.Source(dot_data) graph.render("pengunis") ## 'pengunis.pdf' #Step4:模型預測 ## 建立新樣本 x_fearures_new1 = np.array([[0, -1]]) x_fearures_new2 = np.array([[2, 1]]) ## 在訓練集和測試集上分佈利用訓練好的模型進行預測 y_label_new1_predict = tree_clf.predict(x_fearures_new1) y_label_new2_predict = tree_clf.predict(x_fearures_new2) print('The New point 1 predict class:\n',y_label_new1_predict) print('The New point 2 predict class:\n',y_label_new2_predict) # The New point 1 predict class: # [1] # The New point 2 predict class: # [0]View Code
2.2基於企鵝(penguins)資料集的決策樹分類實踐
在實踐的最開始,我們首先需要匯入一些基礎的函式庫包括:numpy (Python進行科學計算的基礎軟體包),pandas(pandas是一種快速,強大,靈活且易於使用的開源資料分析和處理工具),matplotlib和seaborn繪圖。
Step1:函式庫匯入
## 基礎函式庫 import numpy as np import pandas as pd ## 繪圖函式庫 import matplotlib.pyplot as plt import seaborn as sns
本次我們選擇企鵝資料(palmerpenguins)進行方法的嘗試訓練,該資料集一共包含8個變數,其中7個特徵變數,1個目標分類變數。共有150個樣本,目標變數為 企鵝的類別 其都屬於企鵝類的三個亞屬,分別是(Adélie, Chinstrap and Gentoo)。包含的三種種企鵝的七個特徵,分別是所在島嶼,嘴巴長度,嘴巴深度,腳蹼長度,身體體積,性別以及年齡。
Step2:資料讀取/載入