一、CART分類樹演算法
CART(Classification and Regression Tree)分類樹演算法是一種決策樹分類模型,既可以用於分類問題,也可以用於回歸問題。它是一種二叉樹結構,每個非葉節點代表一個決策,每個葉子節點代表一個類別。
CART分類樹演算法的基本思路是:根據樣本特徵,將樣本劃分為多個子集,並在每個子集上遞歸地重複這個劃分過程,直到子集的大小小於某個預設閾值,或者子集中的樣本屬於同一類別,或者達到了預設的最大樹深。然後,對每個葉子節點中的樣本分別賦予相應的類別。
CART分類樹演算法的特點是:使用基尼指數(Gini Index)或熵(Entropy)作為劃分質量的評價指標,選擇使得劃分後各個子集間差異最小的特徵作為劃分屬性。具體而言,CART分類樹演算法的步驟如下:
- 計算樣本集合的基尼指數或熵
- 對每個屬性的所有取值進行劃分,計算劃分後樣本集合的加權基尼指數或加權熵
- 選擇加權基尼指數或加權熵最小的屬性作為劃分屬性
- 對於劃分後的每個子集,如果子集大小小於某個預設閾值,或者子集中的樣本屬於同一類別,或者達到了預設的最大樹深,將該子集作為葉子節點並給節點賦值
- 對於每個非葉節點,遞歸執行步驟2~4
二、CART什麼時候是分類樹
CART演算法既可以用於分類問題,也可以用於回歸問題。通常情況下,一個變數的取值是分類型的,則CART演算法是一種分類演算法;如果一個變數的取值是連續的,則CART演算法是一種回歸演算法。
三、CART分類樹例子
以鳶尾花數據集為例,演示如何使用CART演算法構建一個分類樹。數據集包含150條記錄,每條記錄有四個特徵:花萼長度、花萼寬度、花瓣長度和花瓣寬度,並且分為三個類別:山鳶尾(Iris-setosa)、變色鳶尾(Iris-versicolor)和維吉尼亞鳶尾(Iris-virginica)。
以下是使用Python的sklearn庫實現的CART分類樹代碼:
from sklearn.datasets import load_iris from sklearn.tree import DecisionTreeClassifier, export_graphviz iris = load_iris() X = iris.data y = iris.target dtree = DecisionTreeClassifier() dtree.fit(X, y) export_graphviz(dtree, out_file='tree.dot', feature_names=iris.feature_names, class_names=iris.target_names, rounded=True, proportion=False, precision=2, filled=True)
運行以上代碼後,會生成一張名為tree.png的決策樹圖:
四、CART分類樹代碼Python
使用Python的sklearn庫,我們可以非常簡單地構建分類樹模型。以下是示例代碼:
from sklearn.tree import DecisionTreeClassifier X = [[0, 0], [1, 1]] y = [0, 1] clf = DecisionTreeClassifier() clf = clf.fit(X, y)
五、CART分類演算法
CART分類演算法主要有兩個步驟:屬性選擇和樹的生成。在屬性選擇過程中,我們需要計算每個屬性的基尼指數或熵,選擇最小值對應的屬性作為劃分特徵。在樹的生成過程中,我們需要遞歸地劃分樣本子集,停止劃分的條件是子集大小小於某個預設閾值,或者子集中的樣本屬於同一類別,或者達到了預設的最大樹深。
六、CART回歸樹圖解
CART回歸樹是一種二叉樹結構,它的每個非葉節點代表一個特徵,每個葉子節點代表一個預測值。CART回歸樹的構建過程包括兩個步驟:屬性選擇和樹的生成。在屬性選擇過程中,我們需要計算每個屬性的平方誤差或絕對誤差,選擇最小值對應的屬性作為劃分特徵。在樹的生成過程中,我們需要遞歸地劃分樣本子集,停止劃分的條件是子集大小小於某個預設閾值,或者子集中的樣本預測值小於某個預設閾值,或者達到了預設的最大樹深。
以下是一張CART回歸樹圖解:
七、CART分類樹例題
以一個簡單的例子來演示如何使用CART分類樹進行分類。
假設我們要使用CART分類樹對一個新聞網站的文章進行分類。我們已經收集了100篇文章的關鍵詞,包括政治、經濟、體育、娛樂等類別。每篇文章有5個關鍵詞,如下表所示:
文章編號 | 關鍵詞1 | 關鍵詞2 | 關鍵詞3 | 關鍵詞4 | 關鍵詞5 | 類別 |
---|---|---|---|---|---|---|
1 | 政治 | 經濟 | 體育 | 娛樂 | 體育 | 體育 |
2 | 政治 | 經濟 | 娛樂 | 體育 | 娛樂 | 娛樂 |
3 | 經濟 | 體育 | 娛樂 | 娛樂 | 體育 | 體育 |
4 | 政治 | 經濟 | 體育 | 娛樂 | 娛樂 | 娛樂 |
5 | 經濟 | 體育 | 娛樂 | 體育 | 政治 | 政治 |
6 | 政治 | 經濟 | 體育 | 娛樂 | 經濟 | 經濟 |
7 | 娛樂 | 體育 | 政治 | 經濟 | 娛樂 | 娛樂 |
8 | 體育 | 經濟 | 體育 | 政治 | 經濟 | 體育 |
9 | 經濟 | 體育 | 政治 | 體育 | 娛樂 | 體育 |
10 | 政治 | 娛樂 | 經濟 | 體育 | 政治 | 政治 |
我們可以用sklearn庫構建一個CART分類樹模型,代碼如下:
import pandas as pd from sklearn.tree import DecisionTreeClassifier from sklearn.model_selection import train_test_split df = pd.read_csv('news.csv') X = df.drop(['編號', '類別'], axis=1) y = df['類別'] X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.4) clf = DecisionTreeClassifier() clf = clf.fit(X_train, y_train) score = clf.score(X_test, y_test) print('模型準確率:', score)
運行以上代碼後,我們可以得到模型的準確率。為了驗證模型的效果,我們可以隨機選取一篇文章,提取它的5個關鍵詞,並使用訓練好的模型對其進行分類。
八、CART分類樹原理
CART分類樹演算法的原理是通過遞歸地將樣本集合劃分成為多個子集,每個子集中的樣本都屬於同一類別,或子集大小小於某個預設閾值,或者達到了預設的最大樹深。具體而言,CART分類樹演算法的步驟如下:
- 計算樣本集合的基尼指數或熵
- 對每個屬性的所有取值進行劃分,計算劃分後樣本集合的加權基尼指數或加權熵
- 選擇加權基尼指數或加權熵最小的屬性作為劃分屬性
- 對於劃分後的每個子集,如果子集大小小於某個預設閾值,或者子集中的樣本屬於同一類別,或者達到了預設的最大樹深,將該子集作為葉子節點並給節點賦值
- 對於每個非葉節點,遞歸執行步驟2~4
九、CART分類樹演算法流程
CART分類樹演算法的流程如下:</
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/241307.html