決策樹(Decision Tree)是一種基礎且直觀的分類與回歸技術,它借鑒了人類的決策過程。該技術通過逐步拆分數據集,并根據特征選擇建立規則,從而實現對數據的分類和預測。以下是對決策樹的深入解析,內容涵蓋其訓練與可視化方法、類概率的估計,以及CART(分類與回歸樹)訓練算法等關鍵方面。

一、訓練和可視化

決策樹(Decision Tree)是什么?決策樹是一種用于分類和回歸任務的監督學習算法。它通過一個樹狀結構,將輸入的數據(特征)映射到輸出(類別或數值)。

在決策樹中,每個內部節點表示一個特征上的判斷條件,每個分支代表一個判斷條件的輸出,而每個葉子節點則代表一個類別(對于分類任務)或一個具體的數值(對于回歸任務)。

如何訓練和可視化決策樹?

使用scikit-learn庫的DecisionTreeClassifier訓練決策樹模型,并利用plot_tree函數結合matplotlib庫實現決策樹的可視化。

  1. 訓練決策樹:通過DecisionTreeClassifier類創建一個決策樹分類器實例,并使用fit方法將訓練數據(特征集X_train和目標標簽y_train)輸入到模型中,從而訓練出決策樹。
  2. 可視化決策樹:利用plot_tree函數,將訓練好的決策樹模型(clf)進行可視化。這個函數接受多個參數,如是否填充節點顏色(filled=True)、特征名稱(feature_names=iris.feature_names)、類別名稱(class_names=iris.target_names)以及節點形狀(rounded=True)等,以生成一個直觀易懂的決策樹圖形。最后,通過matplotlib庫的show方法顯示這個圖形。
import numpy as np
import pandas as pd
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.tree import DecisionTreeClassifier, 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.3, random_state=42)

# 創建決策樹分類器
clf = DecisionTreeClassifier(random_state=42)

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

# 可視化決策樹
plt.figure(figsize=(20,10)) # 設置圖形大小
plot_tree(clf, filled=True, feature_names=iris.feature_names, class_names=iris.target_names, rounded=True)
plt.show() # 顯示圖形

二、估計類概率

決策樹如何獲取樣本屬于每個類別的預測概率?決策樹通過訓練過程形成葉子節點,并記錄每個葉子節點中的類別分布。在預測時,根據樣本到達的葉子節點來計算它屬于每個類別的預測概率。

在Python中,使用scikit-learn庫可以很方便地實現決策樹,并獲取樣本屬于每個類別的預測概率

import numpy as np
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.tree import DecisionTreeClassifier

# 加載數據集
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.3, random_state=42)

# 創建決策樹分類器
clf = DecisionTreeClassifier(random_state=42)

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

# 獲取測試集中樣本的類概率
probabilities = clf.predict_proba(X_test)

# 打印前5個樣本的類概率
for i in range(5):
print(f"Sample {i+1} class probabilities: {probabilities[i]}")

# 注意:probabilities[i] 是一個數組,包含了樣本i屬于每個類別的概率。
# 例如,如果probabilities[0] = [0.1, 0.7, 0.2],則表示第一個樣本屬于類別0的概率為0.1,屬于類別1的概率為0.7,屬于類別2的概率為0.2。

三、SVM回歸

CART訓練算法是什么?CART(Classification and Regression Trees)訓練算法是一種用于分類和回歸任務的決策樹學習技術。CART算法采用貪心策略遞歸地劃分數據集,以構建一棵二叉決策樹。

它既可以用于分類任務,也可以用于回歸任務。在分類任務中,CART算法通常使用基尼指數(Gini Index)作為劃分標準;在回歸任務中,則使用均方誤差(MSE)作為劃分標準。

CART訓練算法用于分類任務?使用Iris數據集訓練一個最大深度為3的CART決策樹分類器,并通過plot_tree函數結合matplotlib庫可視化了訓練好的決策樹。

import numpy as np
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.tree import DecisionTreeClassifier, plot_tree
import matplotlib.pyplot as plt

# 加載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.3, random_state=42)

# 初始化并訓練CART分類器
clf = DecisionTreeClassifier(criterion='gini', max_depth=3, random_state=42)
clf.fit(X_train, y_train)

# 使用plot_tree函數可視化決策樹
plt.figure(figsize=(20,10)) # 設置圖形大小
plot_tree(clf, filled=True, feature_names=iris.feature_names, class_names=iris.target_names, rounded=True)
plt.show()

CART訓練算法用于回歸任務?使用Iris數據集(除去目標變量作為特征),通過劃分訓練集和測試集,初始化并訓練了一個最大深度為3的CART回歸器,然后可視化了回歸樹,并最后評估了模型的均方誤差(MSE)性能。

import numpy as np
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.tree import DecisionTreeRegressor, plot_tree
import matplotlib.pyplot as plt

# 加載Iris數據集
iris = load_iris()
X = iris.data[:, :-1] # 使用除了最后一個特征之外的所有特征作為預測變量
y = iris.data[:, -1] # 使用最后一個特征(花瓣長度)作為目標變量

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

# 初始化并訓練CART回歸器
regressor = DecisionTreeRegressor(criterion='squared_error', max_depth=3, random_state=42)
regressor.fit(X_train, y_train)

# 使用plot_tree函數可視化回歸樹
plt.figure(figsize=(20, 10)) # 設置圖形大小
plot_tree(regressor, filled=True, feature_names=iris.feature_names[:-1], # 排除目標變量作為特征名
rounded=True, impurity=False) # impurity為False因為回歸樹不使用不純度
plt.show()

# 評估模型
# 由于這是回歸任務,我們可以使用均方誤差(MSE)等指標來評估模型的性能。
from sklearn.metrics import mean_squared_error
y_pred = regressor.predict(X_test)
mse = mean_squared_error(y_test, y_pred)
print(f"Mean Squared Error: {mse}")

本文章轉載微信公眾號@架構師帶你玩轉AI

上一篇:

一文徹底搞懂大模型RNN、NNLM、人工神經網絡與貝葉斯網絡

下一篇:

圖神經網絡(GNN)的完整總結!
#你可能也喜歡這些API文章!

我們有何不同?

API服務商零注冊

多API并行試用

數據驅動選型,提升決策效率

查看全部API→
??

熱門場景實測,選對API

#AI文本生成大模型API

對比大模型API的內容創意新穎性、情感共鳴力、商業轉化潛力

25個渠道
一鍵對比試用API 限時免費

#AI深度推理大模型API

對比大模型API的邏輯推理準確性、分析深度、可視化建議合理性

10個渠道
一鍵對比試用API 限時免費