iT邦幫忙

2024 iThome 鐵人賽

DAY 21
0
AI/ ML & Data

Let's Go To The AI Party!系列 第 22

Day21-決策樹

  • 分享至 

  • xImage
  •  

決策樹(Decision Tree)

一種機器學習演算法,以樹狀結構表示一系列決策規則,每個節點代表一個決策,而葉節點則代表最終的預測結果

決策樹結構

根節點(Root node) 沒有父節點節點,通常為最開始的節點,代表一個特徵或屬性
內部節點(Internal node) 分支(Branch) 有子節點節點,代表一個決策規則,根據節點的特徵值進行分裂
葉節點(Leaf node) 沒有子節點的節點,代表一個類別標籤或連續值,即最終的預測結果

https://ithelp.ithome.com.tw/upload/images/20240817/20163257zEyTlYVr5K.png
圖片來源:自己做的

決策樹訓練

過程是從根節點開始,對每個內部節點進行分枝,直到生成所有葉節點。分枝的過程是通過某種基準來評估每個特徵的分割效果,選擇能最大化訊息增益或其他指標的特徵進行分割

決策樹公式

信息熵

H(D) = -∑pi * log2pi

D 樣本集合
pi 屬於第i類樣本比例

信息增益

Gain(D, A) = H(D) - ∑|Dv|/|D| * H(Dv)

A 屬性
Dv 根據屬性A劃分得到的子集

基尼指數

Gini(D) = ∑pi * (1-pi)

其他指標

  • 增益率(Gain Ratio):考慮特徵值的個數,可以防止過度偏向取值較多的特徵
  • Gini 指數(Gini Index):衡量資料的不純度,即資料中不同類別的比例

決策樹應用

  • 分類問題:信用評估、疾病診斷、文本分類
  • 迴歸問題:房價預測、銷售額預測
  • 數據挖掘:關聯規則挖掘、異常檢測
  • 異常檢測:檢測欺詐交易、網路入侵等異常行為

決策樹優缺點

  • 優點

    • 易於理解和解釋
    • 可以處理數值型和類別型資料
    • 不需要資料歸一化
    • 可以處理缺失值
  • 缺點

    • 容易過擬合
    • 對資料中的噪聲敏感
    • 不穩定性:資料的微小變化可能導致完全不同的樹結構

決策樹程式碼(Python-Scikit-learn)

from sklearn import tree
from sklearn.model_selection import train_test_split
from sklearn.datasets import load_iris

# 載入鳶尾花數據集
iris = load_iris()
X = iris.data
y = iris.target

# 分割訓練集和測試集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_st   
ate=0)

# 創建決策樹模型
clf = tree.DecisionTreeClassifier()

# 訓練模型
clf = clf.fit(X_train, y_train)

# 進行預測
y_pred = clf.predict(X_test)

# 評估模型
print("Accuracy:", clf.score(X_test, y_test))

決策樹可視化

import matplotlib.pyplot as plt
from sklearn.tree import plot_tree

plt.figure(figsize=(12,8))
plot_tree(clf, filled=True)
plt.show()
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.tree import DecisionTreeClassifier
from sklearn.tree import plot_tree
import matplotlib.pyplot as plt   

# 載入鳶尾花資料集
iris = load_iris()
X = iris.data
y = iris.target

# 分割訓練集和測試集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

# 建立決策樹分類器
clf = DecisionTreeClassifier()
clf.fit(X_train, y_train)

# 繪製決策樹
plt.figure(figsize=(12,8))
plot_tree(clf, filled=True)
plt.show()

結論

決策樹是一種簡單易懂且應用廣泛的機器學習算法。它在處理分類和迴歸問題時具有獨特的優勢。然而,決策樹也存在過擬合等問題,需要通過剪枝等方法來改善。在實際應用中,可以結合其他算法,例如:隨機森林、梯度提升樹來提高模型的性能


上一篇
Day20-單純貝氏
下一篇
Day22-隨機森林
系列文
Let's Go To The AI Party!31
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言