【scikit-learn基础】--『监督学习』之 决策树回归
決策樹算法是一種既可以用于分類,也可以用于回歸的算法。
決策樹回歸是通過(guò)對(duì)輸入特征的不斷劃分來(lái)建立一棵決策樹,每一步劃分都基于當(dāng)前數(shù)據(jù)集的最優(yōu)劃分特征。
它的目標(biāo)是最小化總體誤差或最大化預(yù)測(cè)精度,其構(gòu)建通常采用自上而下的貪心搜索方式,通過(guò)比較不同劃分標(biāo)準(zhǔn)來(lái)選擇最優(yōu)劃分。
決策樹回歸廣泛應(yīng)用于各種回歸問(wèn)題,如預(yù)測(cè)房?jī)r(jià)、股票價(jià)格、客戶流失等。
1. 算法概述
決策樹相關(guān)的諸多算法之中,有一種CART算法,全稱是 classification and regression tree(分類與回歸樹)。
顧名思義,這個(gè)算法既可以用來(lái)分類,也可以用來(lái)回歸,本篇主要介紹其在回歸問(wèn)題上的應(yīng)用。
決策樹算法的核心在于生成一棵決策樹過(guò)程中,如何劃分各個(gè)特征到樹的不同分支上去。
CART算法是根據(jù)基尼系數(shù)(Gini)來(lái)劃分特征的,每次選擇基尼系數(shù)最小的特征作為最優(yōu)切分點(diǎn)。
其中基尼系數(shù)的計(jì)算方法:\(gini(p) = \sum_{i=1}^n p_i(1-p_i)=1-\sum_{i=1}^n p_i^2\)
2. 創(chuàng)建樣本數(shù)據(jù)
這次的回歸樣本數(shù)據(jù),我們用 scikit-learn 自帶的玩具數(shù)據(jù)集中的糖尿病數(shù)據(jù)集。
關(guān)于玩具數(shù)據(jù)集的內(nèi)容,可以參考:TODO
from sklearn.datasets import load_diabetes
# 糖尿病數(shù)據(jù)集
diabetes = load_diabetes()
X = diabetes.data
y = diabetes.target
這個(gè)數(shù)據(jù)集中大約有400多條數(shù)據(jù)。
3. 模型訓(xùn)練
訓(xùn)練之前,為了減少算法誤差,先對(duì)數(shù)據(jù)進(jìn)行標(biāo)準(zhǔn)化處理。
from sklearn import preprocessing as pp
# 數(shù)據(jù)標(biāo)準(zhǔn)化
X = pp.scale(X)
y = pp.scale(y)
接下來(lái)分割訓(xùn)練集和測(cè)試集。
from sklearn.model_selection import train_test_split
# 分割訓(xùn)練集和測(cè)試集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.1)
然后用scikit-learn中的DecisionTreeRegressor模型來(lái)訓(xùn)練:
from sklearn.tree import DecisionTreeRegressor
# 定義決策樹回歸模型
reg = DecisionTreeRegressor(max_depth=2)
# 訓(xùn)練模型
reg.fit(X_train, y_train)
# 在測(cè)試集上進(jìn)行預(yù)測(cè)
y_pred = reg.predict(X_test)
DecisionTreeRegressor的主要參數(shù)包括:
- criterion:用于衡量節(jié)點(diǎn)劃分質(zhì)量的指標(biāo)。可以選擇的值有'mse'(均方誤差)或'mae'(平均絕對(duì)誤差)。默認(rèn)值為'mse',適用于大多數(shù)情況。
- splitter:用于決定節(jié)點(diǎn)如何進(jìn)行劃分的策略??梢赃x擇的值有'best'(選擇最佳劃分)或'random'(隨機(jī)劃分)。默認(rèn)值為'best'。
- max_depth:決策樹的最大深度。默認(rèn)值為None,表示不限制最大深度。增加最大深度有助于更好地?cái)M合訓(xùn)練數(shù)據(jù),但可能導(dǎo)致過(guò)擬合。
- random_state:用于設(shè)置隨機(jī)數(shù)生成器的種子。默認(rèn)值為None,表示使用隨機(jī)數(shù)生成器。
- ccp_alpha:用于控制正則化強(qiáng)度的參數(shù)。默認(rèn)值為None,表示不進(jìn)行正則化。
- max_samples:用于控制每個(gè)節(jié)點(diǎn)最少需要多少樣本才能進(jìn)行分裂。默認(rèn)值為None,表示使用整個(gè)數(shù)據(jù)集。
- min_samples_split:用于控制每個(gè)節(jié)點(diǎn)最少需要多少樣本才能進(jìn)行分裂。默認(rèn)值為2,表示每個(gè)節(jié)點(diǎn)至少需要2個(gè)樣本才能進(jìn)行分裂。
- min_samples_leaf:用于控制每個(gè)葉子節(jié)點(diǎn)最少需要多少樣本才能停止分裂。默認(rèn)值為1,表示每個(gè)葉子節(jié)點(diǎn)至少需要1個(gè)樣本才能停止分裂。
- min_weight_fraction_leaf:用于控制每個(gè)葉子節(jié)點(diǎn)最少需要多少樣本的權(quán)重才能停止分裂。默認(rèn)值為0.0,表示每個(gè)葉子節(jié)點(diǎn)至少需要0個(gè)樣本的權(quán)重才能停止分裂。
- max_features:用于控制每個(gè)節(jié)點(diǎn)最多需要考慮多少個(gè)特征進(jìn)行分裂。默認(rèn)值為None,表示使用所有特征。
- max_leaf_nodes:用于控制決策樹最多有多少個(gè)葉子節(jié)點(diǎn)。默認(rèn)值為None,表示不限制葉子節(jié)點(diǎn)的數(shù)量。
- min_impurity_decrease:用于控制每個(gè)節(jié)點(diǎn)最少需要減少多少不純度才能進(jìn)行分裂。默認(rèn)值為0.0,表示每個(gè)節(jié)點(diǎn)至少需要減少0個(gè)不純度才能進(jìn)行分裂。
- min_impurity_split:用于控制每個(gè)葉子節(jié)點(diǎn)最少需要減少多少不純度才能停止分裂。默認(rèn)值為None,表示使用min_impurity_decrease參數(shù)。
- class_weight:用于設(shè)置類別權(quán)重的字典或方法。默認(rèn)值為None,表示使用均勻權(quán)重。
最后驗(yàn)證模型的訓(xùn)練效果:
from sklearn import metrics
# 在測(cè)試集上進(jìn)行預(yù)測(cè)
y_pred = reg.predict(X_test)
mse, r2, m_error = 0.0, 0.0, 0.0
y_pred = reg.predict(X_test)
mse = metrics.mean_squared_error(y_test, y_pred)
r2 = metrics.r2_score(y_test, y_pred)
m_error = metrics.median_absolute_error(y_test, y_pred)
print("均方誤差:{}".format(mse))
print("復(fù)相關(guān)系數(shù):{}".format(r2))
print("中位數(shù)絕對(duì)誤差:{}".format(m_error))
# 運(yùn)行結(jié)果
均方誤差:0.5973573097746598
復(fù)相關(guān)系數(shù):0.5153160857515913
中位數(shù)絕對(duì)誤差:0.5496418600646286
從預(yù)測(cè)的誤差來(lái)看,訓(xùn)練的效果還不錯(cuò)。
這里用DecisionTreeRegressor訓(xùn)練模型時(shí)使用了參數(shù)max_depth=2,
我從max_depth=1逐個(gè)嘗試到了max_depth=10,發(fā)現(xiàn)max_depth=2時(shí)誤差最小。
4. 總結(jié)
決策樹回歸具有直觀、易于理解、易于實(shí)現(xiàn)等優(yōu)點(diǎn)。
生成的決策樹可以直觀地展示出輸入特征與輸出結(jié)果之間的關(guān)系,因此對(duì)于非專業(yè)人士來(lái)說(shuō)也易于理解。
此外,決策樹回歸算法相對(duì)簡(jiǎn)單,易于實(shí)現(xiàn),且對(duì)數(shù)據(jù)的預(yù)處理要求較低。
然而,決策樹回歸也存在一些缺點(diǎn)。
首先,它容易過(guò)擬合訓(xùn)練數(shù)據(jù),特別是當(dāng)訓(xùn)練數(shù)據(jù)量較小時(shí);
其次,決策樹的性能受劃分標(biāo)準(zhǔn)選擇的影響較大,不同的劃分標(biāo)準(zhǔn)可能會(huì)導(dǎo)致生成的決策樹性能差異較大;
此外,決策樹回歸在處理大規(guī)模數(shù)據(jù)時(shí)可能會(huì)比較耗時(shí),因?yàn)樾枰闅v整個(gè)數(shù)據(jù)集進(jìn)行訓(xùn)練和預(yù)測(cè)。
總結(jié)
以上是生活随笔為你收集整理的【scikit-learn基础】--『监督学习』之 决策树回归的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 5 款开源热搜项目「GitHub 热点速
- 下一篇: java信息管理系统总结_java实现科