
使用這些基本 REST API 最佳實踐構建出色的 API
決策樹(Decision Tree)是一種基礎且直觀的分類與回歸技術,它借鑒了人類的決策過程。該技術通過逐步拆分數據集,并根據特征選擇建立規則,從而實現對數據的分類和預測。以下是對決策樹的深入解析,內容涵蓋其訓練與可視化方法、類概率的估計,以及CART(分類與回歸樹)訓練算法等關鍵方面。
決策樹(Decision Tree)是什么?決策樹是一種用于分類和回歸任務的監督學習算法。它通過一個樹狀結構,將輸入的數據(特征)映射到輸出(類別或數值)。
在決策樹中,每個內部節點表示一個特征上的判斷條件,每個分支代表一個判斷條件的輸出,而每個葉子節點則代表一個類別(對于分類任務)或一個具體的數值(對于回歸任務)。
使用scikit-learn庫的DecisionTreeClassifier訓練決策樹模型,并利用plot_tree函數結合matplotlib庫實現決策樹的可視化。
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。
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