1. 程式人生 > 實用技巧 >機器學習演算法(六):基於決策樹的分類預測

機器學習演算法(六):基於決策樹的分類預測

一、決策樹的介紹

決策樹是一種常見的分類模型,在金融分控、醫療輔助診斷等諸多行業具有較為廣泛的應用。決策樹的核心思想是基於樹結構對資料進行劃分,這種思想是人類處理問題時的本能方法。例如在婚戀市場中,女方通常會先看男方是否有房產,如果有房產再看是否有車產,如果有車產再看是否有穩定工作……最後得出是否要深入瞭解的判斷。

決策樹的主要優點:

  1. 具有很好的解釋性,模型可以生成可以理解的規則。
  2. 可以發現特徵的重要程度。
  3. 模型的計算複雜度較低。

決策樹的主要缺點:

  1. 模型容易過擬合,需要採用減枝技術處理。
  2. 不能很好利用連續型特徵
  3. 預測能力有限,無法達到其他強監督模型效果。
  4. 方差較高,資料分佈的輕微改變很容易造成樹結構完全不同。
二、程式碼流程

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 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]

全部程式碼如下(已摺疊):

# -*- 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:資料讀取/載入