iT邦幫忙

2022 iThome 鐵人賽

DAY 14
0

決策樹

決策樹可分為處理迴歸問題的迴歸樹(Regression Tree)、處理類別問題的分類樹(Classification tree)、可同時處理兩種類型問題的分類與迴歸樹(Classification And Regression Trees, CART)、Chi-Square Automatic Interaction Detector
(CHAID)。
決策樹模型的長相為一顆樹,有樹根(root node)及枝葉(leaf node),結點(node)的部分為一個特徵,整個樹包含了模型整體的決策流程,在每一個節點皆有一個判斷條件,引導模型做出預測。
為了找出最合適的決策樹模型,避免納入過多無用的特徵,以提高決策樹學習的效率,因此會使用熵(Entropy)、資料純度作為標準來建構出決策樹。
https://ithelp.ithome.com.tw/upload/images/20220924/20151279Ll3pTBFqj0.png
n:類別數,-log_2⁡p(x_i ):資訊值,p(x_i ):選擇該類別的機率

當Entropy越大,代表所含有的資訊量越大,資料越雜亂,資料純度越低;當Entropy越小,代表所含有的資訊量越小,資料越一致,資料純度越高

衡量資料純度

衡量資料純度的方法有三種:

  1. 資料增益:ID3演算法,此演算法會選擇資料增益最大的變數來作為劃分,遞迴地建構出決策樹。
  2. 資料增益率:C4.5演算法,為ID3演算法的延伸,可用於二元樹以及多元樹
  3. 吉尼不純度(Gini Impurity):CART演算法,分類樹為使用吉尼係數作為標準,迴歸樹則以偏差作為標準。吉尼係數代表著樣本的不確定度,當數值越小,代表樣本之間的差異越小,不確定的程度越大,因此CART演算法會以吉尼係數最小的變數作為劃分

優點

  • 模型較容易理解且模型可視化
  • 對於結果具有可解釋性
  • 可同時處理不同類型的變數型態

缺點

  • 對於連續性的欄位較難預測
  • 類別太多時,模型表現容易受到影響
  • 不穩定性較高,更改參數數值可能就會使決策樹的結構改變

實作

R: rpart套件中的rpart

library(rpart)
library(rpart.plot)

# 建立分類器
model_tree <- rpart(Activity~., data = training, method = 'class')
# 預測
pred_tree <- predict(model_tree, testing, type = 'class')
# 衡量
confusionMatrix(pred_tree,reference = as.factor(testing$Activity))
# 視覺化
rpart.plot(model_tree)

https://ithelp.ithome.com.tw/upload/images/20220924/20151279eexIXIoP3q.png

Python: sklearn.tree套件中的DecisionTreeClassifier()

from sklearn import tree
from sklearn import metrics

# 建立分類器
dtree = tree.DecisionTreeClassifier()
model_tree = dtree.fit(X_train, Y_train)
# 預測
pred_tree = model_tree.predict(X_test)
# 衡量
accuracy = metrics.accuracy_score(pred_tree,Y_test)
print(accuracy)  # 0.9529
# 視覺化
class_names = new_dataset2['Activity'].unique().tolist()
class_names = list(map(str, class_names)
fig = plt.figure(figsize=(25,20))
_ = tree.plot_tree(model_tree, 
                   feature_names=new_dataset2.columns[:12],  
                   class_names= class_names,
                   filled=True)

上一篇
[Day13] K-近鄰分群法(K-Nearest Neighbor, KNN)
下一篇
[Day15] 簡單貝氏模型(Naïve bayes)
系列文
人類行為數據分析- 以R和Python進行實作30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言