溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

python中Bagging算法的原理分析

發(fā)布時(shí)間:2021-06-17 09:15:18 來(lái)源:億速云 閱讀:171 作者:小新 欄目:開(kāi)發(fā)技術(shù)

這篇文章給大家分享的是有關(guān)python中Bagging算法的原理分析的內(nèi)容。小編覺(jué)得挺實(shí)用的,因此分享給大家做個(gè)參考,一起跟隨小編過(guò)來(lái)看看吧。

一、什么是集成學(xué)習(xí)

集成學(xué)習(xí)是一種技術(shù)框架,它本身不是一個(gè)單獨(dú)的機(jī)器學(xué)習(xí)算法,而是通過(guò)構(gòu)建并結(jié)合多個(gè)機(jī)器學(xué)習(xí)器來(lái)完成學(xué)習(xí)任務(wù),一般結(jié)構(gòu)是:先產(chǎn)生一組“個(gè)體學(xué)習(xí)器”,再用某種策略將它們結(jié)合起來(lái),目前,有三種常見(jiàn)的集成學(xué)習(xí)框架(策略):bagging,boosting和stacking

python中Bagging算法的原理分析

也就是說(shuō),集成學(xué)習(xí)有兩個(gè)主要的問(wèn)題需要解決,第一是如何得到若干個(gè)個(gè)體學(xué)習(xí)器,第二是如何選擇一種結(jié)合策略,將這些個(gè)體學(xué)習(xí)器集合成一個(gè)強(qiáng)學(xué)習(xí)器

集成學(xué)習(xí)是指將若干弱分類器組合之后產(chǎn)生一個(gè)強(qiáng)分類器。弱分類器(weak learner)指那些分類準(zhǔn)確率只稍好于隨機(jī)猜測(cè)的分類器(error rate < 50%)。如今集成學(xué)習(xí)有兩個(gè)流派,一種是bagging流派,它的特點(diǎn)是各個(gè)弱學(xué)習(xí)器之間沒(méi)有依賴關(guān)系,可以并行擬合,隨機(jī)森林算法就屬于bagging派系;另一個(gè)是boosting派系,它的特點(diǎn)是各個(gè)弱學(xué)習(xí)器之間有依賴關(guān)系,Adaboost算法就屬于boosting派系。在實(shí)現(xiàn)集成學(xué)習(xí)算法時(shí),很重要的一個(gè)核心就是如何實(shí)現(xiàn)數(shù)據(jù)的多樣性,從而實(shí)現(xiàn)弱分類器的多樣性

集成學(xué)習(xí)有如下的特點(diǎn):

(1)將多個(gè)分類方法聚集在一起,以提高分類的準(zhǔn)確率(這些算法可以是不同的算法,也可以是相同的算法。);

(2)集成學(xué)習(xí)法由訓(xùn)練數(shù)據(jù)構(gòu)建一組基分類器,然后通過(guò)對(duì)每個(gè)基分類器的預(yù)測(cè)進(jìn)行投票來(lái)進(jìn)行分類;

(3)嚴(yán)格來(lái)說(shuō),集成學(xué)習(xí)并不算是一種分類器,而是一種分類器結(jié)合的方法;

(4)通常一個(gè)集成分類器的分類性能會(huì)好于單個(gè)分類器;

(5)如果把單個(gè)分類器比作一個(gè)決策者的話,集成學(xué)習(xí)的方法就相當(dāng)于多個(gè)決策者共同進(jìn)行一項(xiàng)決策。

Bagging和Boosting的使用區(qū)別如下:

1)樣本選擇:
Bagging:訓(xùn)練集是在原始集中有放回選取的,從原始集中選出的各輪訓(xùn)練集之間是獨(dú)立的。
Boosting:每一輪的訓(xùn)練集不變,只是訓(xùn)練集中每個(gè)樣例在分類器中的權(quán)重發(fā)生變化。而權(quán)值是根據(jù)上一輪的分類結(jié)果進(jìn)行調(diào)整。

2)樣例權(quán)重
Bagging:使用均勻取樣,每個(gè)樣例的權(quán)重相等
Boosting:根據(jù)錯(cuò)誤率不斷調(diào)整樣例的權(quán)值,錯(cuò)誤率越大則權(quán)重越大。

3)預(yù)測(cè)函數(shù)
Bagging:所有預(yù)測(cè)函數(shù)的權(quán)重相等。
Boosting:每個(gè)弱分類器都有相應(yīng)的權(quán)重,對(duì)于分類誤差小的分類器會(huì)有更大的權(quán)重。

4)并行計(jì)算
Bagging:各個(gè)預(yù)測(cè)函數(shù)可以并行生成
Boosting:各個(gè)預(yù)測(cè)函數(shù)只能順序生成,因?yàn)楹笠粋€(gè)模型參數(shù)需要前一輪模型的結(jié)果。

5)計(jì)算效果
Bagging主要減小了variance,而B(niǎo)oosting主要減小了bias,而這種差異直接推動(dòng)結(jié)合Bagging和Boosting的MultiBoosting的誕生

二、Bagging算法

Bagging(裝袋算法)的集成學(xué)習(xí)方法非常簡(jiǎn)單,假設(shè)我們有一個(gè)數(shù)據(jù)集D,使用Bootstrap sample(有放回的隨機(jī)采樣,這里說(shuō)明一下,有放回抽樣是抽一個(gè)就放回一個(gè),然后再抽,而不是這個(gè)人抽10個(gè),再放回,下一個(gè)繼續(xù)抽,它是每一個(gè)樣本被抽中概率符合均勻分布)的方法取了k個(gè)數(shù)據(jù)子集(子集樣本數(shù)都相等):D1,D2,…,Dk,作為新的訓(xùn)練集,我們使用這k個(gè)子集分別訓(xùn)練一個(gè)分類器(使用分類、回歸等算法),最后會(huì)得到k個(gè)分類模型。我們將測(cè)試數(shù)據(jù)輸入到這k個(gè)分類器,會(huì)得到k個(gè)分類結(jié)果,比如分類結(jié)果是0和1,那么這k個(gè)結(jié)果中誰(shuí)占比最多,那么預(yù)測(cè)結(jié)果就是誰(shuí)。

大致過(guò)程如下:

1.對(duì)于給定的訓(xùn)練樣本S,每輪從訓(xùn)練樣本S中采用有放回抽樣(Booststraping)的方式抽取M個(gè)訓(xùn)練樣本,共進(jìn)行n輪,得到了n個(gè)樣本集合,需要注意的是這里的n個(gè)訓(xùn)練集之間是相互獨(dú)立的。

2.在獲取了樣本集合之后,每次使用一個(gè)樣本集合得到一個(gè)預(yù)測(cè)模型,對(duì)于n個(gè)樣本集合來(lái)說(shuō),我們總共可以得到n個(gè)預(yù)測(cè)模型。

3.如果我們需要解決的是分類問(wèn)題,那么我們可以對(duì)前面得到的n個(gè)模型采用投票的方式得到分類的結(jié)果,對(duì)于回歸問(wèn)題來(lái)說(shuō),我們可以采用計(jì)算模型均值的方法來(lái)作為最終預(yù)測(cè)的結(jié)果。

python中Bagging算法的原理分析

那么我們什么時(shí)候該使用bagging集成方法:學(xué)習(xí)算法不穩(wěn)定:就是說(shuō)如果訓(xùn)練集稍微有所改變就會(huì)導(dǎo)致分類器性能比較大大變化那么我們可以采用bagging這種集成方法AdaBoost只適用于二分類任務(wù)不同,Bagging可以用于多分類,回歸的任務(wù)舉個(gè)例子可以看出bagging的好處:X 表示一維屬性,Y 表示類標(biāo)號(hào)(1或-1)測(cè)試條件:當(dāng)x<=k時(shí),y=?;當(dāng)x>k時(shí),y=?;k為最佳分裂點(diǎn)下表為屬性x對(duì)應(yīng)的唯一正確的y類別:

python中Bagging算法的原理分析

每一輪隨機(jī)抽樣后,都生成一個(gè)分類器。然后再將五輪分類融合

python中Bagging算法的原理分析

即是說(shuō)當(dāng)我們模型拿捏不住樣本屬于哪個(gè),或者是分裂時(shí)的閾值,我們多做幾次,得到多個(gè)結(jié)果,然后投票決定

優(yōu)缺點(diǎn):

(1) Bagging通過(guò)降低基分類器的方差,改善了泛化誤差;
(2)其性能依賴于基分類器的穩(wěn)定性;如果基分類器不穩(wěn)定,bagging有助于降低訓(xùn)練數(shù)據(jù)的隨機(jī)波動(dòng)導(dǎo)致的誤差;如果穩(wěn)定,則集成分類器的誤差主要由基分類器的偏倚引起;
(3)由于每個(gè)樣本被選中的概率相同,因此bagging并不側(cè)重于訓(xùn)練數(shù)據(jù)集中的任何特定實(shí)例

1.優(yōu)點(diǎn),可以減小方差和減小過(guò)擬合

2.缺點(diǎn),重復(fù)有放回采樣的道德樣本集改變了數(shù)據(jù)原有的分布,因此在一定程度上引入了偏差,對(duì)最終的結(jié)果預(yù)測(cè)會(huì)造成一定程度的影響

為什么說(shuō)Bagging算法會(huì)減少方差?

首先我們來(lái)看看偏差和方差的概念

偏差:描述的是預(yù)測(cè)值(估計(jì)值)的期望與真實(shí)值之間的差距。偏差越大,越偏離真實(shí)數(shù)據(jù)

方差:描述的是預(yù)測(cè)值的變化范圍,離散程度,也就是離其期望值的距離。方差越大

  • bias描述的是根據(jù)樣本擬合出的模型的輸出預(yù)測(cè)結(jié)果的期望與樣本真實(shí)結(jié)果的差距,簡(jiǎn)單講,就是在樣本上擬合的好不好。要想在bias上表現(xiàn)好,low bias,就得復(fù)雜化模型,增加模型的參數(shù),但這樣容易過(guò)擬合 (overfitting),過(guò)擬合對(duì)應(yīng)上圖是high variance,點(diǎn)很分散。low bias對(duì)應(yīng)就是點(diǎn)都打在靶心附近,所以瞄的是準(zhǔn)的,但手不一定穩(wěn)。

  • varience描述的是樣本上訓(xùn)練出來(lái)的模型在測(cè)試集上的表現(xiàn),要想在variance上表現(xiàn)好,low varience,就要簡(jiǎn)化模型,減少模型的參數(shù),但這樣容易欠擬合(unfitting),欠擬合對(duì)應(yīng)上圖是high bias,點(diǎn)偏離中心。low variance對(duì)應(yīng)就是點(diǎn)都打的很集中,但不一定是靶心附近,手很穩(wěn),但是瞄的不準(zhǔn)。

python中Bagging算法的原理分析

bagging是對(duì)許多強(qiáng)(甚至過(guò)強(qiáng))的分類器求平均。在這里,每個(gè)單獨(dú)的分類器的bias都是低的,平均之后bias依然低;而每個(gè)單獨(dú)的分類器都強(qiáng)到可能產(chǎn)生overfitting的程度,也就是variance高,求平均的操作起到的作用就是降低這個(gè)variance。

boosting是把許多弱的分類器組合成一個(gè)強(qiáng)的分類器。弱的分類器bias高,而強(qiáng)的分類器bias低,所以說(shuō)boosting起到了降低bias的作用。variance不是boosting的主要考慮因素。Boosting則是迭代算法,每一次迭代都根據(jù)上一次迭代的預(yù)測(cè)結(jié)果對(duì)樣本進(jìn)行加權(quán),所以隨著迭代不斷進(jìn)行,誤差會(huì)越來(lái)越小,所以模型的bias會(huì)不斷降低。這種算法無(wú)法并行,例子比如Adaptive Boosting

Bagging和Rand Forest

1)Rand Forest是選與輸入樣本的數(shù)目相同多的次數(shù)(可能一個(gè)樣本會(huì)被選取多次,同時(shí)也會(huì)造成一些樣本不會(huì)被選取到),而B(niǎo)agging一般選取比輸入樣本的數(shù)目少的樣本

2)bagging是用全部特征來(lái)得到分類器,而Rand Forest是需要從全部特征中選取其中的一部分來(lái)訓(xùn)練得到分類器; 一般Rand forest效果比Bagging效果好!

三、Bagging用于分類

我們使用葡萄酒數(shù)據(jù)集進(jìn)行建模(數(shù)據(jù)處理):

# -*- coding: utf-8 -*-
"""
Created on Tue Aug 11 10:12:48 2020

@author: Admin
"""
## 我們使用葡萄酒數(shù)據(jù)集進(jìn)行建模(數(shù)據(jù)處理)
import pandas as pd 
df_wine = pd.read_csv('https://archive.ics.uci.edu/ml/machine-learning-databases/wine/wine.data',header=None)
df_wine.columns = ['Class label', 'Alcohol','Malic acid', 'Ash','Alcalinity of ash','Magnesium', 'Total phenols',
                   'Flavanoids', 'Nonflavanoid phenols','Proanthocyanins','Color intensity', 'Hue','OD280/OD315 of diluted wines','Proline']
df_wine['Class label'].value_counts()
'''
2    71
1    59
3    48
Name: Class label, dtype: int64
'''
df_wine = df_wine[df_wine['Class label'] != 1]  # drop 1 class
y = df_wine['Class label'].values
X = df_wine[['Alcohol','OD280/OD315 of diluted wines']].values
from sklearn.model_selection import train_test_split  # 切分訓(xùn)練集與測(cè)試集
from sklearn.preprocessing import LabelEncoder   # 標(biāo)簽化分類變量
le = LabelEncoder()
y = le.fit_transform(y)  #吧y值改為0和1 ,原來(lái)是2和3 
X_train,X_test,y_train,y_test = train_test_split(X,y,test_size=0.2,random_state=1,stratify=y)  #2、8分

## 我們使用單一決策樹(shù)分類:
from sklearn.tree import DecisionTreeClassifier
tree = DecisionTreeClassifier(criterion='entropy',random_state=1,max_depth=None)   #選擇決策樹(shù)為基本分類器
from sklearn.metrics import accuracy_score  #計(jì)算準(zhǔn)確率
tree = tree.fit(X_train,y_train)
y_train_pred = tree.predict(X_train)
y_test_pred = tree.predict(X_test)
tree_train = accuracy_score(y_train,y_train_pred)  #訓(xùn)練集準(zhǔn)確率
tree_test = accuracy_score(y_test,y_test_pred)  #測(cè)試集準(zhǔn)確率
print('Decision tree train/test accuracies %.3f/%.3f' % (tree_train,tree_test))
#Decision tree train/test accuracies 1.000/0.833


## 我們使用BaggingClassifier分類:
from sklearn.ensemble import BaggingClassifier
tree = DecisionTreeClassifier(criterion='entropy',random_state=1,max_depth=None)   #選擇決策樹(shù)為基本分類器
bag = BaggingClassifier(base_estimator=tree,n_estimators=500,max_samples=1.0,max_features=1.0,bootstrap=True,
                        bootstrap_features=False,n_jobs=1,random_state=1)
from sklearn.metrics import accuracy_score
bag = bag.fit(X_train,y_train)
y_train_pred = bag.predict(X_train)
y_test_pred = bag.predict(X_test)
bag_train = accuracy_score(y_train,y_train_pred)
bag_test = accuracy_score(y_test,y_test_pred)
print('Bagging train/test accuracies %.3f/%.3f' % (bag_train,bag_test))
#Bagging train/test accuracies 1.000/0.917

'''
我們可以對(duì)比兩個(gè)準(zhǔn)確率,測(cè)試準(zhǔn)確率較之決策樹(shù)得到了顯著的提高

我們來(lái)對(duì)比下這兩個(gè)分類方法上的差異
'''
## 我們來(lái)對(duì)比下這兩個(gè)分類方法上的差異
x_min = X_train[:, 0].min() - 1
x_max = X_train[:, 0].max() + 1
y_min = X_train[:, 1].min() - 1
y_max = X_train[:, 1].max() + 1
xx, yy = np.meshgrid(np.arange(x_min, x_max, 0.1),np.arange(y_min, y_max, 0.1))
f, axarr = plt.subplots(nrows=1, ncols=2,sharex='col',sharey='row',figsize=(12, 6))
for idx, clf, tt in zip([0, 1],[tree, bag],['Decision tree', 'Bagging']):
    clf.fit(X_train, y_train)
    Z = clf.predict(np.c_[xx.ravel(), yy.ravel()])  #ravel()方法將數(shù)組維度拉成一維數(shù)組,np.c_是按行連接兩個(gè)矩陣,就是把兩矩陣左右相加,要求行數(shù)相等
    Z = Z.reshape(xx.shape)
    axarr[idx].contourf(xx, yy, Z, alpha=0.3)
    axarr[idx].scatter(X_train[y_train==0, 0],X_train[y_train==0, 1],c='blue', marker='^')
    axarr[idx].scatter(X_train[y_train==1, 0],X_train[y_train==1, 1],c='green', marker='o')
    axarr[idx].set_title(tt)
axarr[0].set_ylabel('Alcohol', fontsize=12)
plt.tight_layout()
plt.text(0, -0.2,s='OD280/OD315 of diluted wines',ha='center',va='center',fontsize=12,transform=axarr[1].transAxes)
plt.show()
'''
從結(jié)果圖看起來(lái),三個(gè)節(jié)點(diǎn)深度的決策樹(shù)分段線性決策邊界在Bagging集成中看起來(lái)更加平滑
'''

python中Bagging算法的原理分析

class sklearn.ensemble.BaggingClassifier(base_estimator=None, n_estimators=10, max_samples=1.0, max_features=1.0, bootstrap=True, bootstrap_features=False, oob_score=False, warm_start=False, n_jobs=None, random_state=None, verbose=0)

參數(shù)說(shuō)明:

  • base_estimator:Object or None。None代表默認(rèn)是DecisionTree,Object可以指定基估計(jì)器(base estimator)

  • n_estimators:int, optional (default=10) 。   要集成的基估計(jì)器的個(gè)數(shù)

  • max_samples: int or float, optional (default=1.0)。決定從x_train抽取去訓(xùn)練基估計(jì)器的樣本數(shù)量。int 代表抽取數(shù)量,float代表抽取比例

  • max_features : int or float, optional (default=1.0)。決定從x_train抽取去訓(xùn)練基估計(jì)器的特征數(shù)量。int 代表抽取數(shù)量,float代表抽取比例

  • bootstrap : boolean, optional (default=True) 決定樣本子集的抽樣方式(有放回和不放回)

  • bootstrap_features : boolean, optional (default=False)決定特征子集的抽樣方式(有放回和不放回)

  • oob_score : bool 決定是否使用包外估計(jì)(out of bag estimate)泛化誤差

  • warm_start : bool, optional (default=False) 設(shè)置為True時(shí),請(qǐng)重用上一個(gè)調(diào)用的解決方案以適合并為集合添加更多估計(jì)量,否則,僅適合一個(gè)全新的集合

  • n_jobs : int, optional (default=None) fit和 并行運(yùn)行的作業(yè)數(shù)predict。None除非joblib.parallel_backend上下文中,否則表示1 。-1表示使用所有處理器

  • random_state : int, RandomState instance or None, optional (default=None)。如果int,random_state是隨機(jī)數(shù)生成器使用的種子; 如果RandomState的實(shí)例,random_state是隨機(jī)數(shù)生成器; 如果None,則隨機(jī)數(shù)生成器是由np.random使用的RandomState實(shí)例

  • verbose : int, optional (default=0)

屬性介紹:

  • estimators_ : list of estimators。The collection of fitted sub-estimators.

  • estimators_samples_ : list of arrays

  • estimators_features_ : list of arrays

  • oob_score_ : float,使用包外估計(jì)這個(gè)訓(xùn)練數(shù)據(jù)集的得分。

  • oob_prediction_ : array of shape = [n_samples]。在訓(xùn)練集上用out-of-bag估計(jì)計(jì)算的預(yù)測(cè)。 如果n_estimator很小,則可能在抽樣過(guò)程中數(shù)據(jù)點(diǎn)不會(huì)被忽略。 在這種情況下,oob_prediction_可能包含NaN。

四、Bagging用于回歸

再補(bǔ)充一下Bagging用于回歸

# -*- coding: utf-8 -*-
"""
Created on Tue Aug 11 10:12:48 2020

@author: Admin
"""
# 從 sklearn.datasets 導(dǎo)入波士頓房?jī)r(jià)數(shù)據(jù)讀取器。
from sklearn.datasets import load_boston
# 從讀取房?jī)r(jià)數(shù)據(jù)存儲(chǔ)在變量 boston 中。
boston = load_boston()

# 從sklearn.cross_validation 導(dǎo)入數(shù)據(jù)分割器。
from sklearn.model_selection import train_test_split
X = boston.data
y = boston.target
# 隨機(jī)采樣 25% 的數(shù)據(jù)構(gòu)建測(cè)試樣本,其余作為訓(xùn)練樣本。
X_train, X_test, y_train, y_test = train_test_split(X,
                                                    y,
                                                    random_state=33,
                                                    test_size=0.25)
                                                    
# 從 sklearn.preprocessing 導(dǎo)入數(shù)據(jù)標(biāo)準(zhǔn)化模塊。
from sklearn.preprocessing import StandardScaler
# 分別初始化對(duì)特征和目標(biāo)值的標(biāo)準(zhǔn)化器。
ss_X = StandardScaler()
ss_y = StandardScaler()
# 分別對(duì)訓(xùn)練和測(cè)試數(shù)據(jù)的特征以及目標(biāo)值進(jìn)行標(biāo)準(zhǔn)化處理。
X_train = ss_X.fit_transform(X_train)
X_test = ss_X.transform(X_test)
y_train = ss_y.fit_transform(y_train.reshape(-1,1))
y_test = ss_y.transform(y_test.reshape(-1,1))                                                


#BaggingRegressor
from sklearn.ensemble import BaggingRegressor
bagr = BaggingRegressor(n_estimators=500,max_samples=1.0,max_features=1.0,bootstrap=True,
                        bootstrap_features=False,n_jobs=1,random_state=1)
bagr.fit(X_train, y_train)
bagr_y_predict = bagr.predict(X_test)

from sklearn.metrics import r2_score, mean_absolute_error, mean_squared_error
# 使用 R-squared、MSE 以及 MAE 指標(biāo)對(duì)默認(rèn)配置的隨機(jī)回歸森林在測(cè)試集上進(jìn)行性能評(píng)估。
print('R-squared value of BaggingRegressor:', bagr.score(X_test, y_test))

print('The mean squared error of BaggingRegressor:', mean_squared_error(
    ss_y.inverse_transform(y_test), ss_y.inverse_transform(bagr_y_predict)))

print('The mean absoluate error of BaggingRegressor:', mean_absolute_error(
    ss_y.inverse_transform(y_test), ss_y.inverse_transform(bagr_y_predict)))

'''
R-squared value of BaggingRegressor: 0.8417369323817341
The mean squared error of BaggingRegressor: 12.27192314456692
The mean absoluate error of BaggingRegressor: 2.2523244094488195
'''

#隨機(jī)森林實(shí)現(xiàn)
from sklearn.ensemble import RandomForestRegressor
rfr = RandomForestRegressor(random_state=1)

rfr.fit(X_train, y_train)

rfr_y_predict = rfr.predict(X_test)


# 使用 R-squared、MSE 以及 MAE 指標(biāo)對(duì)默認(rèn)配置的隨機(jī)回歸森林在測(cè)試集上進(jìn)行性能評(píng)估。
print('R-squared value of RandomForestRegressor:', rfr.score(X_test, y_test))

print('The mean squared error of RandomForestRegressor:', mean_squared_error(
    ss_y.inverse_transform(y_test), ss_y.inverse_transform(rfr_y_predict)))

print('The mean absoluate error of RandomForestRegressor:', mean_absolute_error(
    ss_y.inverse_transform(y_test), ss_y.inverse_transform(rfr_y_predict)))

'''
R-squared value of RandomForestRegressor: 0.8083674472512408
The mean squared error of RandomForestRegressor: 14.859436220472439
The mean absoluate error of RandomForestRegressor: 2.4732283464566924
'''

#用Bagging集成隨機(jī)森林
bagr = BaggingRegressor(base_estimator=rfr,n_estimators=500,max_samples=1.0,max_features=1.0,bootstrap=True,
                        bootstrap_features=False,n_jobs=1,random_state=1)
bagr.fit(X_train, y_train)
bagr_y_predict = bagr.predict(X_test)

# 使用 R-squared、MSE 以及 MAE 指標(biāo)對(duì)默認(rèn)配置的隨機(jī)回歸森林在測(cè)試集上進(jìn)行性能評(píng)估。
print('R-squared value of BaggingRegressor:', bagr.score(X_test, y_test))

print('The mean squared error of BaggingRegressor:', mean_squared_error(
    ss_y.inverse_transform(y_test), ss_y.inverse_transform(bagr_y_predict)))

print('The mean absoluate error of BaggingRegressor:', mean_absolute_error(
    ss_y.inverse_transform(y_test), ss_y.inverse_transform(bagr_y_predict)))

'''
R-squared value of BaggingRegressor: 0.8226953069216255
The mean squared error of BaggingRegressor: 13.748435433319694
The mean absoluate error of BaggingRegressor: 2.3744811023622048
'''

感謝各位的閱讀!關(guān)于“python中Bagging算法的原理分析”這篇文章就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,讓大家可以學(xué)到更多知識(shí),如果覺(jué)得文章不錯(cuò),可以把它分享出去讓更多的人看到吧!

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI