欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

python sklearn中的決策樹模型詳解

 更新時(shí)間:2023年08月27日 14:07:41   作者:rink1t  
本文主要說明 Python 的 sklearn 庫中的決策樹的常用接口、屬性以及參數(shù)調(diào)優(yōu)說明,需要讀者或多或少了解過sklearn庫和一些基本的機(jī)器學(xué)習(xí)知識,感興趣的同學(xué)跟著小編一起來看看吧

sklearn中的決策樹

sklearn 中的決策樹實(shí)現(xiàn)使用的是CART(Classification and Regression Trees)算法

sklearn中的決策樹都在 sklearn.tree 這個(gè)模塊下。

位置說明
tree.DecisionTreeClassifier分類樹
tree.DecisionTreeRegressor回歸樹
tree.export_graphviz用于畫圖
tree.ExtraTreeClassifier高隨機(jī)版本的分類樹
tree.ExtraTreeRegressor高隨機(jī)版本的回歸樹

基本使用

以紅酒數(shù)據(jù)集和波士頓房價(jià)數(shù)據(jù)集為例,sklearn中的分類樹和回歸樹的簡單使用如下:

# 導(dǎo)包
from sklearn.datasets import load_wine, load_boston
from sklearn.model_selection import train_test_split
from sklearn.tree import DecisionTreeClassifier, DecisionTreeRegressor
# 分類樹
data_wine = load_wine()  # 加載紅酒數(shù)據(jù)集
# 劃分訓(xùn)練集和測試集
X_train, X_test, y_train, y_test = train_test_split(data_wine.data, data_wine.target, test_size=0.3, random_state=42)
clf = DecisionTreeClassifier()  # 分類樹
clf.fit(X_train, y_train)  # 擬合訓(xùn)練集
print(clf.predict(X_train))  # 輸出測試集的預(yù)測結(jié)果
print(clf.score(X_test, y_test))  # 測試集上的準(zhǔn)確率
# 回歸樹
data_boston = load_boston()  # 加載波士頓房價(jià)數(shù)據(jù)集
# 劃分訓(xùn)練集和測試集
X_train, X_test, y_train, y_test = train_test_split(data_boston.data, data_boston.target, test_size=0.3, random_state=42)
regressor = DecisionTreeRegressor()  # 回歸樹
regressor.fit(X_train, y_train)  # 擬合訓(xùn)練集
print(regressor.predict(X_train))   # 測試集的預(yù)測結(jié)果
print(regressor.score(X_test, y_test))   # 測試集上的決定系數(shù) R2

常用屬性和接口

  • .feature_importances_:每個(gè)特征的特征重要性,總和為1
  • .apply():與predict不同,例如輸入為X_test,apply返回的則是測試樣本所在葉子節(jié)點(diǎn)的索引

幾乎每個(gè)模型都有的接口如訓(xùn)練和預(yù)測就不說明了.

決策樹的 .score()接口的計(jì)算方法:

  • 分類樹:使用Accuracy(準(zhǔn)確度)作為指標(biāo),準(zhǔn)確度=
    預(yù)測正確的樣本數(shù)?/總體樣數(shù)
  • 回歸樹:使用決定系數(shù) R2R^2R2 作為指標(biāo),[0,1],越接近1表示效果越好,反之越差

本文主要講解分類樹和回歸樹的常用參數(shù)。

注:本文的說明都不是絕對的,不存在某種情況下某種說法一定就是正確的。

參數(shù)說明

以下參數(shù)說明是針對分類樹的,對于回歸樹,幾乎所有參數(shù)、屬性及接口都和分類樹一模一樣。需要注意的是,在回歸樹中,沒有標(biāo)簽分布是否均衡的問題,因此沒有class_weight這樣的參數(shù)。

sklearn中分類樹和回歸樹的默認(rèn)參數(shù)

  • 分類樹:
DecisionTreeClassifier(ccp_alpha=0.0, class_weight=None, criterion='gini',
                       max_depth=None, max_features=None, max_leaf_nodes=None,
                       min_impurity_decrease=0.0, min_impurity_split=None,
                       min_samples_leaf=1, min_samples_split=2,
                       min_weight_fraction_leaf=0.0, presort='deprecated',
                       random_state=None, splitter='best')
  • 回歸樹:
DecisionTreeRegressor(ccp_alpha=0.0, criterion='mse', max_depth=None,
                      max_features=None, max_leaf_nodes=None,
                      min_impurity_decrease=0.0, min_impurity_split=None,
                      min_samples_leaf=1, min_samples_split=2,
                      min_weight_fraction_leaf=0.0, presort='deprecated',
                      random_state=None, splitter='best')

本文涉及的參數(shù)和調(diào)優(yōu)說明:

  • criterion
  • random_state
  • splitter
  • max_depth
  • min_samples_leaf
  • min_samples_split
  • max_features
  • min_impurity_decrease
  • class_weight
  • class_weight_fraction_leaf

本文主要就以上這十個(gè)常用參數(shù)進(jìn)行說明和講解.

criterion

criterion:規(guī)則,原則(英文直譯)

criterion:該參數(shù)用于決定決策樹來計(jì)算不純度的方法,共有兩種選擇

  • 'entropy':信息熵
  • 'gini':Gini系數(shù),默認(rèn)值

參數(shù)說明:

  • 信息熵和基尼系數(shù)的效果基本相同
  • 使用信息熵速度會相對更慢一些,因?yàn)樾畔㈧氐挠?jì)算(存在對數(shù))比Gini系數(shù)的計(jì)算相對更復(fù)雜一些
  • 信息熵對不純度更加敏感,對不純度的懲罰相對更強(qiáng),使用信息熵作為指標(biāo)時(shí)決策樹的生長會更加 "精細(xì)",更容易過擬合
  • 當(dāng)模型欠擬合時(shí)(訓(xùn)練集測試集表現(xiàn)都差)可以嘗試使用信息熵,當(dāng)模型過擬合時(shí)(訓(xùn)練集好測試集差)可以嘗試使用Gini系數(shù)

一般情況下使用Gini系數(shù),當(dāng)數(shù)據(jù)維度很高、噪音很大的時(shí)候使用Gini系數(shù);維度低、數(shù)據(jù)相對清晰的時(shí)候信息熵和Gini系數(shù)區(qū)別不大;當(dāng)決策樹的擬合程度不夠(欠擬合)時(shí),使用信息熵。

對于回歸樹,criterion支持的標(biāo)準(zhǔn)為三種:

  • 'mse' (默認(rèn)):均方誤差mean squared error(MSE),父節(jié)點(diǎn)和葉子節(jié)點(diǎn)之間的均方誤差的差額將被用來作為 特征選擇的標(biāo)準(zhǔn),這種方法通過使用葉子節(jié)點(diǎn)的均值來最小化損失
  • 'friedman_mse':使用費(fèi)爾德曼均方誤差,這種指標(biāo)使用弗里德曼針對潛在分枝中的問題改進(jìn)后的均方誤差
  • 'mae':使用絕對平均誤差MAE(mean absolute error),這種指標(biāo)使用葉節(jié)點(diǎn)的中值來最小化損失

在回歸樹中,MSE不只是我們的分枝質(zhì)量衡量指標(biāo),也是我們最常用的衡量回歸樹回歸質(zhì)量的指標(biāo),我們往往選擇均方誤差作為我們的評估標(biāo)準(zhǔn)

雖然均方誤差永遠(yuǎn)為正,但是sklearn當(dāng)中使用均方誤差作為評判標(biāo)準(zhǔn)時(shí),卻是計(jì)算 "負(fù)均方誤差"(neg_mean_squared_error)。

  • 這是因?yàn)閟klearn在計(jì)算模型評估指標(biāo)的時(shí)候,會考慮指標(biāo)本身的性質(zhì),均 方誤差本身是一種誤差,所以被sklearn劃分為模型的一種損失(loss),因此在sklearn當(dāng)中,都以負(fù)數(shù)表示。真正的均方誤差MSE的數(shù)值,其實(shí)就是neg_mean_squared_error去掉負(fù)號的數(shù)字。

random_state & splitter

splitter:分離器 (英文直譯)

random_state:用來設(shè)置分枝中的隨機(jī)模式的參數(shù),默認(rèn)None,在高維度時(shí)隨機(jī)性會表現(xiàn)更明顯,對于低維度的數(shù)據(jù),隨機(jī)性幾乎不會顯現(xiàn)。輸入任意整數(shù),會一直長出同一棵樹,讓模型穩(wěn)定下來。

sklearn中的決策樹都是會先對原本所有的特征隨機(jī)選取其中一部分用來建模,random_state的值不同,隨機(jī)選取的情況可能也不同,當(dāng)random_state為None時(shí),每次都會重新進(jìn)行隨機(jī)選取。

splitter:用來控制決策樹中的隨機(jī)選項(xiàng),有兩種輸入值:

  • 'best' (默認(rèn)值):決策樹在分枝時(shí)雖然隨機(jī),但是還是會優(yōu)先選擇更重要的特征進(jìn)行分枝(重要性可以通過屬性feature_importances_查看)
  • 'random':決策樹在分枝時(shí)會更加隨機(jī),樹會因?yàn)楹懈嗟牟槐匾畔⒍罡螅⒁蜻@些不必要信息而降低對數(shù)據(jù)集的擬合程度。

控制決策樹在選取特征時(shí)的隨機(jī)程度也是防止過擬合的一種方式。當(dāng)你預(yù)測到你的模型會過擬合,用這兩個(gè)參數(shù)來幫助你降低樹建成之后過擬合的可能性。

剪枝參數(shù)

在不加限制的情況下,一棵決策樹會生長到衡量不純度的指標(biāo)最優(yōu)的情況,或者沒有更多的特征可用為止,這樣的決策樹模型往往會過擬合。為了讓決策樹有更好的泛化性,我們要對決策樹進(jìn)行剪枝。

剪枝策略對決策樹的影響巨大,正確的剪枝策略是優(yōu)化決策樹算法的核心

max_depth:限制樹的最大深度,超過設(shè)定深度的樹枝全部剪掉

  • 默認(rèn)值為 None,即不做限制
  • 這是用得最廣泛的剪枝參數(shù),在高維度低樣本量時(shí)非常有效。決策樹多生長一層,對樣本量的需求會增加近似一倍,所以限制樹深度能夠有效地限制過擬合。在集成算法中也非常實(shí)用。實(shí)際使用時(shí),建議從 3 開始嘗試,看看擬合的效 果再決定是否增加設(shè)定深度。

min_samples_leaf:一個(gè)節(jié)點(diǎn)在分支后的每個(gè)子節(jié)點(diǎn)都必須包含至少 min_samples_leaf 個(gè)訓(xùn)練樣本,否則分枝就不會發(fā)生。

  • 默認(rèn)值為 1
  • 一般搭配 max_depth 使用,在回歸樹中有神奇的效果,可以讓模型變得更加平滑。這個(gè)參數(shù)的數(shù)量設(shè)置得太小可能會引起過擬合,設(shè)置得太大可能會欠擬合,一般從 5 開始調(diào)整
  • 如果葉節(jié)點(diǎn)中含有的樣本量變化很大,建議輸入浮點(diǎn)數(shù)作為樣本量的百分比來使用:當(dāng)輸入為浮點(diǎn)數(shù)時(shí),例如0.05,則表示 樣本量*0.05 作為參數(shù)值
  • 這個(gè)參數(shù)可以保證每個(gè)葉子的最小尺寸,可以在回歸問題中避免高方差,過擬合的葉子節(jié)點(diǎn)出現(xiàn)。
  • 對于類別不多的分類問題,1 通常就是最佳選擇。

min_samples_split:一個(gè)節(jié)點(diǎn)必須要包含至 少min_samples_split 個(gè)訓(xùn)練樣本,這個(gè)節(jié)點(diǎn)才允許被分枝,否則分枝就不會發(fā)生。

  • 注意這里的概念不要與 min_samples_leaf 進(jìn)行混淆,若樣本數(shù)量小于 min_samples_split 那么該節(jié)點(diǎn)就不會考慮進(jìn)行分支,是前提條件。

max_features:限制分枝時(shí)考慮的特征個(gè)數(shù),超過限制個(gè)數(shù)的特征都會被舍棄。

  • 默認(rèn)值為 None
  • 如果max_features是一個(gè)整數(shù),則每個(gè)節(jié)點(diǎn)的拆分最多考慮max_features個(gè)特征
  • 如果max_features是一個(gè)浮點(diǎn)數(shù),則每個(gè)節(jié)點(diǎn)的拆分最多考慮max_features * n_features個(gè)特征,其中n_features是總特征數(shù)量
  • 如果max_features是一個(gè)字符串,則使用特定的方法選擇特征。例如,"sqrt"表示每個(gè)節(jié)點(diǎn)的拆分最多考慮sqrt(n_features)個(gè)特征,"log2"表示每個(gè)節(jié)點(diǎn)的拆分最多考慮log2(n_features)個(gè)特征

max_features 用來限制高維度數(shù)據(jù)的過擬合的剪枝參數(shù),但其方法比較暴力,是直接限制可以使用的特征數(shù)量 而強(qiáng)行使決策樹停下的參數(shù),在不知道決策樹中的各個(gè)特征的重要性的情況下,強(qiáng)行設(shè)定這個(gè)參數(shù)可能會導(dǎo)致模型學(xué)習(xí)不足。

min_impurity_decrease:限制信息增益的大小,信息增益小于設(shè)定數(shù)值的分枝不會發(fā)生

  • 默認(rèn)值為 None,即不做限制
  • 可以嘗試從一個(gè)相對較小的值開始調(diào)優(yōu),例如0.001或0.0001,并根據(jù)結(jié)果逐漸調(diào)整

如何確認(rèn)最優(yōu)的剪枝參數(shù):

  • 畫曲線,橫軸為超參數(shù)的值,縱軸為模型評估指標(biāo),觀察曲線來選擇超參數(shù)

剪枝參數(shù)的默認(rèn)值會讓樹無盡地生長,這些樹在某些數(shù)據(jù)集上可能非常巨大,對內(nèi)存的消耗也非常巨 大。所以如果你手中的數(shù)據(jù)集非常巨大,你已經(jīng)預(yù)測到無論如何你都是要剪枝的,那提前設(shè)定這些參數(shù)來控制樹的 復(fù)雜性和大小會比較好。

目標(biāo)權(quán)重參數(shù)

class_weight:對樣本標(biāo)簽進(jìn)行一定的均衡,給少量的標(biāo)簽更多的權(quán)重,讓模型更偏向少數(shù)類,向捕獲少數(shù)類的方向建模。該參數(shù)默認(rèn)None,此模式表示自動給 與數(shù)據(jù)集中的所有標(biāo)簽相同的權(quán)重。

  • None(默認(rèn)值):所有類別的權(quán)重都被視為相等,不進(jìn)行特殊處理。
  • 'balanced':根據(jù)訓(xùn)練集中每個(gè)類別的樣本數(shù)量自動調(diào)整權(quán)重。權(quán)重與類別中樣本數(shù)量的反比成正比。
  • 字典(Dictionary):可以手動指定每個(gè)類別的權(quán)重。字典的鍵是類別標(biāo)簽,值是對應(yīng)的權(quán)重。例如,{0: 1, 1: 2}表示類別0的權(quán)重為1,類別1的權(quán)重為2

樣本不平衡:指在一組數(shù)據(jù)集中,標(biāo)簽的一類天生占有很大的比例。比如說,在銀行要 判斷 "一個(gè)辦了信用卡的人是否會違約","是" 和 "否"(1%:99%)的比例。這種分類狀況下,即便模型什么也不做,全把結(jié)果預(yù)測成 "否",正確率也能有99%。

min_weight_fraction_leaf:用于控制葉子節(jié)點(diǎn)中樣本權(quán)重的最小總和的比例。它可以用來限制決策樹生成過程中葉子節(jié)點(diǎn)的最小權(quán)重

  • 默認(rèn)值為 0.0
  • 類似于 min_samples_leaf,不過是權(quán)重版本的。在決策樹的生成過程中,分裂節(jié)點(diǎn)時(shí)會考慮葉子節(jié)點(diǎn)中樣本在指定權(quán)重下的總和。如果一個(gè)節(jié)點(diǎn)的權(quán)重總和低于 min_weight_fraction_leaf 指定的閾值,則不會進(jìn)行分支。

class_weight 相當(dāng)于給不同標(biāo)簽的樣本的數(shù)量加上了權(quán)重,決策樹在分支時(shí)會計(jì)算樣本量等操作,對于不均衡的數(shù)據(jù),class_weight 可以保證決策樹在計(jì)算不同標(biāo)簽樣本量時(shí)也會乘以不同的權(quán)重,一般對于不均衡數(shù)據(jù)參數(shù)使用 'balanced' 就可以了。

min_weight_fraction_leaf 就是權(quán)重版本的 min_samples_leaf 參數(shù),需要注意的是,在設(shè)定 class_weight 參數(shù)后使用 min_samples_leaf 參數(shù)在計(jì)算樣本量時(shí)是不會加上權(quán)重的。

決策樹的優(yōu)缺點(diǎn)

決策樹優(yōu)點(diǎn):

  • 需要很少的數(shù)據(jù)準(zhǔn)備。其他很多算法通常都需要數(shù)據(jù)規(guī)范化,需要?jiǎng)?chuàng)建虛擬變量并刪除空值等。但請注意,sklearn中的決策樹模塊不支持對缺失值的處理。
  • 使用樹的成本(比如說,在預(yù)測數(shù)據(jù)的時(shí)候)是用于訓(xùn)練樹的數(shù)據(jù)點(diǎn)的數(shù)量的對數(shù),相比于其他算法,這是一個(gè)很低的成本。
  • 能夠同時(shí)處理數(shù)值型和離散型數(shù)據(jù),既可以做回歸又可以做分類。
  • 白盒模型,易于理解和解釋。如果在模型中可以觀察到給定的情況,則可以通過布爾邏輯輕松解釋條件。相反,在黑盒模型中(例如,在人工神經(jīng)網(wǎng)絡(luò)中),結(jié)果可能更難以解釋。

決策樹缺點(diǎn):

  • 決策樹可能不穩(wěn)定,數(shù)據(jù)中微小的變化可能導(dǎo)致生成完全不同的樹,這個(gè)問題需要通過集成算法來解決。
  • 決策樹的學(xué)習(xí)是基于貪心算法,它靠優(yōu)化局部最優(yōu)(每個(gè)節(jié)點(diǎn)的最優(yōu))來試圖達(dá)到整體的最優(yōu),但這種做法不能保證返回全局最優(yōu)決策樹。

以上就是python sklearn中的決策樹模型詳解的詳細(xì)內(nèi)容,更多關(guān)于python sklearn決策樹的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • Pytorch中使用TensorBoard詳情

    Pytorch中使用TensorBoard詳情

    這篇文章主要介紹了Pytorch中使用TensorBoard詳情,TensorBoard的前段數(shù)據(jù)顯示和后端數(shù)據(jù)記錄是異步I/O的,即后端程序?qū)?shù)據(jù)寫入到一個(gè)文件中,而前端程序讀取文件中的數(shù)據(jù)來進(jìn)行顯示
    2022-06-06
  • Python asyncore socket客戶端實(shí)現(xiàn)方法詳解

    Python asyncore socket客戶端實(shí)現(xiàn)方法詳解

    這篇文章主要介紹了Python asyncore socket客戶端實(shí)現(xiàn)方法,asyncore庫是python的一個(gè)標(biāo)準(zhǔn)庫,提供了以異步的方式寫入套接字服務(wù)的客戶端和服務(wù)器的基礎(chǔ)結(jié)構(gòu)
    2022-12-12
  • 一篇文章徹底搞懂Python中可迭代(Iterable)、迭代器(Iterator)與生成器(Generator)的概念

    一篇文章徹底搞懂Python中可迭代(Iterable)、迭代器(Iterator)與生成器(Generator)的概念

    這篇文章主要給大家介紹了如何通過一篇文章徹底搞懂Python中可迭代(Iterable)、迭代器(Iterator)與生成器(Generator)的概念,對大家學(xué)習(xí)或者使用Python具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-05-05
  • 基于python分布式爬蟲并解決假死的問題

    基于python分布式爬蟲并解決假死的問題

    這篇文章主要介紹了基于python分布式爬蟲并解決假死的問題,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-04-04
  • pip安裝python庫的方法總結(jié)

    pip安裝python庫的方法總結(jié)

    在本篇文章里小編給大家分享了關(guān)于使用pip安裝python庫的幾種常用方法,有需要的朋友們可以參考下。
    2019-08-08
  • 如何在Python中自定義異常類與異常處理機(jī)制

    如何在Python中自定義異常類與異常處理機(jī)制

    在Python編程中,異常處理是一種重要的編程范式,它允許我們在程序運(yùn)行時(shí)檢測并處理錯(cuò)誤,本文將介紹如何在Python中編寫自定義的異常類,并詳細(xì)解釋Python的異常處理機(jī)制,感興趣的朋友一起看看吧
    2024-06-06
  • 微信跳一跳小游戲python腳本

    微信跳一跳小游戲python腳本

    這篇文章主要為大家詳細(xì)介紹了微信跳一跳小程序Python腳本,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-01-01
  • Python 找到列表中滿足某些條件的元素方法

    Python 找到列表中滿足某些條件的元素方法

    今天小編就為大家分享一篇Python 找到列表中滿足某些條件的元素方法,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-06-06
  • python retrying模塊的使用方法詳解

    python retrying模塊的使用方法詳解

    這篇文章主要介紹了python retrying模塊的使用方法詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-09-09
  • postman發(fā)送文件請求并以python服務(wù)接收方式

    postman發(fā)送文件請求并以python服務(wù)接收方式

    這篇文章主要介紹了postman發(fā)送文件請求并以python服務(wù)接收方式,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-07-07

最新評論