日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

决策树算法实现

發布時間:2024/1/23 编程问答 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 决策树算法实现 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.


ID3,c4.5只用于做分類,得到的結果是連續值;
cart既可以做分類,也可以做回歸,得到的結果是連續值。

CART 分類樹

在 Python 的 sklearn 中默認采用的是 CART 分類樹。
下面,我們來用 CART 分類樹,給 iris 數據集構造一棵分類決策樹。在 Python 的 sklearn 中,如果我們想要創建 CART 分類樹,可以直接使用 DecisionTreeClassifier 這個類。創建這個類的時候,默認情況下 criterion 這個參數等于 gini,也就是按照基尼系數來選擇屬性劃分,即默認采用的是 CART 分類樹。

# encoding=utf-8 from sklearn.model_selection import train_test_split from sklearn.metrics import accuracy_score from sklearn.tree import DecisionTreeClassifier from sklearn.datasets import load_iris # 準備數據集 iris=load_iris() # 獲取特征集和分類標識 features = iris.data labels = iris.target # 隨機抽取 33% 的數據作為測試集,其余為訓練集 train_features, test_features, train_labels, test_labels = train_test_split(features, labels, test_size=0.33, random_state=0) # 創建 CART 分類樹 clf = DecisionTreeClassifier(criterion='gini') # 擬合構造 CART 分類樹 clf = clf.fit(train_features, train_labels) # 用 CART 分類樹做預測 test_predict = clf.predict(test_features) # 預測結果與測試集結果作比對 score = accuracy_score(test_labels, test_predict) print("CART 分類樹準確率 %.4lf" % score)

首先 train_test_split 可以幫助我們把數據集抽取一部分作為測試集,這樣我們就可以得到訓練集和測試集。
clf = DecisionTreeClassifier(criterion=‘gini’) 初始化一棵 CART 分類樹。這樣你就可以對 CART 分類樹進行訓練。
clf.fit(train_features, train_labels) 函數,將訓練集的特征值和分類標識作為參數進行擬合,得到 CART 分類樹。
clf.predict(test_features) 函數進行預測,傳入測試集的特征值,可以得到測試結果 test_predict。
最后使用 accuracy_score(test_labels, test_predict) 函數, 傳入測試集的預測結果與實際的結果作為參數,得到準確率 score。

CART 回歸樹

CART 回歸樹劃分數據集的過程和分類樹的過程是一樣的,,只是回歸樹得到的預測結果是連續值,而且評判“不純度”的指標不同。
在 CART 分類樹中采用的是基尼系數作為標準來評價“不純度”,在CART回歸樹中則采用樣本的離散程度來評價不純度。
具體計算方式:
假設 x 為樣本的個體,均值為 u,為了統計樣本的離散程度,我們可以取差值的絕對值,或者方差。


所以這兩種節點劃分的標準,分別對應著兩種目標函數最優化的標準,即用最小絕對偏差(LAD),或者使用最小二乘偏差(LSD)。
通常,LSD劃分方法多一點。

我們使用到 sklearn 自帶的波士頓房價數據集,該數據集給出了影響房價的一些指標,比如犯罪率,房產稅等,最后給出了房價。
根據這些指標,我們使用 CART 回歸樹對波士頓房價進行預測,代碼如下:

# encoding=utf-8 from sklearn.metrics import mean_squared_error from sklearn.model_selection import train_test_split from sklearn.datasets import load_boston from sklearn.metrics import r2_score,mean_absolute_error,mean_squared_error from sklearn.tree import DecisionTreeRegressor # 準備數據集 boston=load_boston() # 探索數據 print(boston.feature_names) # 獲取特征集和房價 features = boston.data prices = boston.target # 隨機抽取 33% 的數據作為測試集,其余為訓練集 train_features, test_features, train_price, test_price = train_test_split(features, prices, test_size=0.33) # 創建 CART 回歸樹 dtr=DecisionTreeRegressor() # 擬合構造 CART 回歸樹 dtr.fit(train_features, train_price) # 預測測試集中的房價 predict_price = dtr.predict(test_features) # 測試集的結果評價 print('回歸樹二乘偏差均值:', mean_squared_error(test_price, predict_price)) print('回歸樹絕對值偏差均值:', mean_absolute_error(test_price, predict_price))

首先加載了波士頓房價數據集,得到特征集和房價,然后通過 train_test_split 幫助我們把數據集抽取一部分作為測試集,其余作為訓練集。
dtr=DecisionTreeRegressor() 初始化一棵 CART 回歸樹。
dtr.fit(train_features, train_price) 函數, 將訓練集的特征值和結果作為參數進行擬合,得到 CART 回歸樹。
dtr.predict(test_features) 函數進行預測,傳入測試集的特征值,可以得到預測結果 predict_price。
最后我們可以求得這棵回歸樹的二乘偏差均值,以及絕對值偏差均值。

分類樹與回歸樹類似,只是回歸樹最終得到連續值。

CART 決策樹的剪枝

剪枝是改善過擬合非常常用的方法。CART 決策樹的剪枝主要采用的是 CCP 方法,它是一種后剪枝的方法。這種剪枝方式用到一個指標叫做節點的表面誤差率增益值,以此作為剪枝前后誤差的定義

Tt 代表以 t 為根節點的子樹,C(Tt) 表示節點 t 的子樹沒被裁剪時子樹 Tt 的誤差,C(t) 表示節點 t 的子樹被剪枝后節點 t 的誤差,|Tt|代子樹 Tt 的葉子數,剪枝后,T 的葉子數減少了|Tt|-1。

所以節點的表面誤差率增益值等于節點 t 的子樹被剪枝后的誤差變化除以剪掉的葉子數量。
得到了剪枝后的子樹集合后,我們需要用驗證集對所有子樹的誤差計算一遍。可以通過計算每個子樹的基尼指數或者平方誤差,取誤差最小的那個樹,得到我們想要的結果。

總結

以上是生活随笔為你收集整理的决策树算法实现的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。