人工智能和機(jī)器學(xué)習(xí)之回歸算法:梯度提升回歸(GBR):GBR模型的參數(shù)調(diào)優(yōu)_第1頁(yè)
人工智能和機(jī)器學(xué)習(xí)之回歸算法:梯度提升回歸(GBR):GBR模型的參數(shù)調(diào)優(yōu)_第2頁(yè)
人工智能和機(jī)器學(xué)習(xí)之回歸算法:梯度提升回歸(GBR):GBR模型的參數(shù)調(diào)優(yōu)_第3頁(yè)
人工智能和機(jī)器學(xué)習(xí)之回歸算法:梯度提升回歸(GBR):GBR模型的參數(shù)調(diào)優(yōu)_第4頁(yè)
人工智能和機(jī)器學(xué)習(xí)之回歸算法:梯度提升回歸(GBR):GBR模型的參數(shù)調(diào)優(yōu)_第5頁(yè)
已閱讀5頁(yè),還剩14頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

人工智能和機(jī)器學(xué)習(xí)之回歸算法:梯度提升回歸(GBR):GBR模型的參數(shù)調(diào)優(yōu)1梯度提升回歸簡(jiǎn)介1.1GBR的基本原理梯度提升回歸(GradientBoostingRegression,GBR)是一種迭代的機(jī)器學(xué)習(xí)技術(shù),用于預(yù)測(cè)建模問(wèn)題,特別是回歸問(wèn)題。它基于提升(Boosting)的概念,通過(guò)構(gòu)建一系列弱學(xué)習(xí)器(通常是決策樹(shù)),并逐步優(yōu)化它們的組合,以形成一個(gè)強(qiáng)大的預(yù)測(cè)模型。GBR的核心思想是通過(guò)最小化損失函數(shù)的梯度來(lái)訓(xùn)練每個(gè)新的弱學(xué)習(xí)器,從而逐步減少模型的預(yù)測(cè)誤差。1.1.1梯度提升過(guò)程初始化模型:通常從一個(gè)簡(jiǎn)單的模型開(kāi)始,如平均值或常數(shù)預(yù)測(cè)。計(jì)算殘差:對(duì)于當(dāng)前模型的預(yù)測(cè),計(jì)算實(shí)際值與預(yù)測(cè)值之間的殘差。擬合弱學(xué)習(xí)器:使用殘差作為目標(biāo)變量,擬合一個(gè)新的弱學(xué)習(xí)器(如決策樹(shù))。更新模型:將新弱學(xué)習(xí)器的預(yù)測(cè)乘以一個(gè)學(xué)習(xí)率(learningrate),然后加到當(dāng)前模型的預(yù)測(cè)上,形成一個(gè)更新后的模型。重復(fù)步驟2-4:直到達(dá)到預(yù)定的迭代次數(shù)或模型性能不再顯著提高。1.1.2代碼示例假設(shè)我們使用Python的scikit-learn庫(kù)來(lái)實(shí)現(xiàn)一個(gè)GBR模型。以下是一個(gè)簡(jiǎn)單的示例,使用隨機(jī)生成的數(shù)據(jù)集:importnumpyasnp

fromsklearn.ensembleimportGradientBoostingRegressor

fromsklearn.datasetsimportmake_regression

fromsklearn.model_selectionimporttrain_test_split

#生成數(shù)據(jù)集

X,y=make_regression(n_samples=1000,n_features=10,n_informative=5,random_state=42)

#劃分訓(xùn)練集和測(cè)試集

X_train,X_test,y_train,y_test=train_test_split(X,y,test_size=0.2,random_state=42)

#初始化GBR模型

gbr=GradientBoostingRegressor(n_estimators=100,learning_rate=0.1,max_depth=3,random_state=42)

#訓(xùn)練模型

gbr.fit(X_train,y_train)

#預(yù)測(cè)

predictions=gbr.predict(X_test)

#輸出模型得分

print("GBRModelScore:",gbr.score(X_test,y_test))在這個(gè)例子中,我們首先生成了一個(gè)回歸數(shù)據(jù)集,然后使用GradientBoostingRegressor類(lèi)來(lái)創(chuàng)建一個(gè)GBR模型。我們?cè)O(shè)置了模型的幾個(gè)關(guān)鍵參數(shù),如n_estimators(弱學(xué)習(xí)器的數(shù)量)、learning_rate(學(xué)習(xí)率)和max_depth(決策樹(shù)的最大深度)。最后,我們訓(xùn)練模型并評(píng)估其在測(cè)試集上的性能。1.2GBR與傳統(tǒng)回歸算法的對(duì)比梯度提升回歸與傳統(tǒng)回歸算法(如線性回歸、決策樹(shù)回歸)的主要區(qū)別在于其迭代和優(yōu)化的方式。傳統(tǒng)回歸算法通常一次性擬合模型,而GBR通過(guò)迭代地添加弱學(xué)習(xí)器來(lái)逐步改進(jìn)模型,這使得GBR能夠捕捉到數(shù)據(jù)中的復(fù)雜模式,從而在許多情況下提供更準(zhǔn)確的預(yù)測(cè)。1.2.1線性回歸對(duì)比線性回歸假設(shè)數(shù)據(jù)之間的關(guān)系是線性的,而GBR則沒(méi)有這樣的假設(shè),它能夠通過(guò)組合多個(gè)決策樹(shù)來(lái)擬合非線性關(guān)系。1.2.2決策樹(shù)回歸對(duì)比單一決策樹(shù)可能容易過(guò)擬合,而GBR通過(guò)組合多個(gè)決策樹(shù)并控制學(xué)習(xí)率,可以減少過(guò)擬合的風(fēng)險(xiǎn),同時(shí)提高模型的泛化能力。1.2.3示例:GBR與線性回歸的性能比較fromsklearn.linear_modelimportLinearRegression

#初始化線性回歸模型

lr=LinearRegression()

#訓(xùn)練線性回歸模型

lr.fit(X_train,y_train)

#預(yù)測(cè)

lr_predictions=lr.predict(X_test)

#輸出模型得分

print("LinearRegressionModelScore:",lr.score(X_test,y_test))通過(guò)比較GBR和線性回歸模型的得分,我們可以直觀地看到GBR在處理復(fù)雜數(shù)據(jù)模式時(shí)的優(yōu)越性。以上內(nèi)容詳細(xì)介紹了梯度提升回歸的基本原理,以及它與傳統(tǒng)回歸算法的對(duì)比,通過(guò)代碼示例展示了如何使用scikit-learn庫(kù)實(shí)現(xiàn)GBR模型,并與線性回歸模型進(jìn)行了性能比較。2人工智能和機(jī)器學(xué)習(xí)之回歸算法:梯度提升回歸(GBR)模型參數(shù)詳解2.1學(xué)習(xí)率(learning_rate)的設(shè)定學(xué)習(xí)率是梯度提升回歸模型中的一個(gè)關(guān)鍵參數(shù),它控制著每一步迭代中模型更新的幅度。較小的學(xué)習(xí)率可以使得模型更加穩(wěn)健,避免過(guò)擬合,但同時(shí)會(huì)增加訓(xùn)練時(shí)間。較大的學(xué)習(xí)率則可能使模型快速收斂,但也容易導(dǎo)致過(guò)擬合。2.1.1示例代碼fromsklearn.ensembleimportGradientBoostingRegressor

fromsklearn.datasetsimportmake_regression

fromsklearn.model_selectionimporttrain_test_split

#生成回歸數(shù)據(jù)集

X,y=make_regression(n_samples=1000,n_features=20,n_informative=15,random_state=42)

X_train,X_test,y_train,y_test=train_test_split(X,y,test_size=0.2,random_state=42)

#設(shè)置不同的學(xué)習(xí)率

learning_rates=[0.01,0.1,1]

#訓(xùn)練模型并評(píng)估

forlrinlearning_rates:

gbr=GradientBoostingRegressor(learning_rate=lr,n_estimators=100,random_state=42)

gbr.fit(X_train,y_train)

score=gbr.score(X_test,y_test)

print(f"Learningrate:{lr},Testscore:{score}")2.2迭代次數(shù)(n_estimators)的選擇n_estimators參數(shù)決定了梯度提升回歸中基學(xué)習(xí)器的數(shù)量。增加迭代次數(shù)通常會(huì)提高模型的準(zhǔn)確度,但也會(huì)增加計(jì)算成本和過(guò)擬合的風(fēng)險(xiǎn)。2.2.1示例代碼#設(shè)置不同的迭代次數(shù)

n_estimators_values=[50,100,200]

#訓(xùn)練模型并評(píng)估

forn_estinn_estimators_values:

gbr=GradientBoostingRegressor(learning_rate=0.1,n_estimators=n_est,random_state=42)

gbr.fit(X_train,y_train)

score=gbr.score(X_test,y_test)

print(f"Numberofestimators:{n_est},Testscore:{score}")2.3損失函數(shù)(loss)的類(lèi)型梯度提升回歸支持多種損失函數(shù),如ls(最小二乘)、lad(絕對(duì)偏差)、huber和quantile。不同的損失函數(shù)適用于不同的數(shù)據(jù)分布和異常值處理。2.3.1示例代碼#設(shè)置不同的損失函數(shù)

loss_functions=['ls','lad','huber']

#訓(xùn)練模型并評(píng)估

forlossinloss_functions:

gbr=GradientBoostingRegressor(loss=loss,learning_rate=0.1,n_estimators=100,random_state=42)

gbr.fit(X_train,y_train)

score=gbr.score(X_test,y_test)

print(f"Lossfunction:{loss},Testscore:{score}")2.4基學(xué)習(xí)器(base_estimator)的配置雖然梯度提升回歸默認(rèn)使用決策樹(shù)作為基學(xué)習(xí)器,但也可以配置為其他類(lèi)型的模型。然而,實(shí)踐中通常使用默認(rèn)的決策樹(shù)基學(xué)習(xí)器,因?yàn)樗鼈冊(cè)谔荻忍嵘蚣苤斜憩F(xiàn)良好。2.5樹(shù)的最大深度(max_depth)與復(fù)雜度控制max_depth參數(shù)控制著決策樹(shù)的最大深度,從而影響模型的復(fù)雜度。深度較大的樹(shù)可以捕捉更復(fù)雜的模式,但也更容易過(guò)擬合。2.5.1示例代碼#設(shè)置不同的樹(shù)深度

max_depth_values=[3,5,10]

#訓(xùn)練模型并評(píng)估

fordepthinmax_depth_values:

gbr=GradientBoostingRegressor(learning_rate=0.1,n_estimators=100,max_depth=depth,random_state=42)

gbr.fit(X_train,y_train)

score=gbr.score(X_test,y_test)

print(f"Maxdepth:{depth},Testscore:{score}")2.6最小樣本分割(min_samples_split)與最小樣本葉子(min_samples_leaf)min_samples_split和min_samples_leaf參數(shù)用于控制決策樹(shù)的分裂和葉子節(jié)點(diǎn)的樣本數(shù)量,以防止過(guò)擬合。2.6.1示例代碼#設(shè)置不同的最小樣本分割和葉子節(jié)點(diǎn)樣本數(shù)量

min_samples_splits=[2,10,20]

min_samples_leaves=[1,5,10]

#訓(xùn)練模型并評(píng)估

forsplitinmin_samples_splits:

forleafinmin_samples_leaves:

gbr=GradientBoostingRegressor(learning_rate=0.1,n_estimators=100,min_samples_split=split,min_samples_leaf=leaf,random_state=42)

gbr.fit(X_train,y_train)

score=gbr.score(X_test,y_test)

print(f"Minsamplessplit:{split},Minsamplesleaf:{leaf},Testscore:{score}")2.7正則化參數(shù)(subsample,max_features)的作用subsample參數(shù)控制著每棵樹(shù)訓(xùn)練時(shí)使用的樣本比例,而max_features參數(shù)控制著每棵樹(shù)考慮的特征數(shù)量。這兩個(gè)參數(shù)可以作為正則化手段,減少過(guò)擬合。2.7.1示例代碼#設(shè)置不同的subsample和max_features值

subsamples=[0.5,0.8,1.0]

max_features=['auto','sqrt','log2']

#訓(xùn)練模型并評(píng)估

forsubsampleinsubsamples:

forfeatureinmax_features:

gbr=GradientBoostingRegressor(learning_rate=0.1,n_estimators=100,subsample=subsample,max_features=feature,random_state=42)

gbr.fit(X_train,y_train)

score=gbr.score(X_test,y_test)

print(f"Subsample:{subsample},Maxfeatures:{feature},Testscore:{score}")通過(guò)上述代碼示例,我們可以觀察到不同參數(shù)設(shè)置對(duì)梯度提升回歸模型性能的影響。在實(shí)際應(yīng)用中,參數(shù)調(diào)優(yōu)通常需要通過(guò)交叉驗(yàn)證等方法來(lái)確定最佳參數(shù)組合,以達(dá)到模型性能和計(jì)算效率之間的平衡。3人工智能和機(jī)器學(xué)習(xí)之回歸算法:梯度提升回歸(GBR)模型參數(shù)調(diào)優(yōu)3.1參數(shù)調(diào)優(yōu)策略3.1.1網(wǎng)格搜索(GridSearchCV)網(wǎng)格搜索是一種參數(shù)調(diào)優(yōu)方法,它通過(guò)構(gòu)建一個(gè)參數(shù)網(wǎng)格,對(duì)所有可能的參數(shù)組合進(jìn)行遍歷,從而找到最佳的參數(shù)組合。這種方法在參數(shù)空間較小的情況下非常有效,但在參數(shù)空間較大時(shí),計(jì)算成本會(huì)顯著增加。3.1.1.1示例代碼fromsklearn.ensembleimportGradientBoostingRegressor

fromsklearn.model_selectionimportGridSearchCV

fromsklearn.datasetsimportload_boston

fromsklearn.model_selectionimporttrain_test_split

#加載數(shù)據(jù)

boston=load_boston()

X=boston.data

y=boston.target

#劃分訓(xùn)練集和測(cè)試集

X_train,X_test,y_train,y_test=train_test_split(X,y,test_size=0.2,random_state=42)

#創(chuàng)建GBR模型

gbr=GradientBoostingRegressor(random_state=42)

#定義參數(shù)網(wǎng)格

param_grid={

'n_estimators':[100,200,300],

'learning_rate':[0.01,0.1,1],

'max_depth':[3,5,7],

'min_samples_split':[2,5,10]

}

#創(chuàng)建網(wǎng)格搜索對(duì)象

grid_search=GridSearchCV(estimator=gbr,param_grid=param_grid,cv=5,scoring='neg_mean_squared_error',verbose=1,n_jobs=-1)

#擬合數(shù)據(jù)

grid_search.fit(X_train,y_train)

#輸出最佳參數(shù)

print("Bestparametersfound:",grid_search.best_params_)3.1.2隨機(jī)搜索(RandomizedSearchCV)隨機(jī)搜索與網(wǎng)格搜索類(lèi)似,但不是遍歷所有參數(shù)組合,而是從參數(shù)分布中隨機(jī)選擇參數(shù)組合進(jìn)行搜索。這種方法在參數(shù)空間較大時(shí),可以更高效地找到接近最優(yōu)的參數(shù)組合。3.1.2.1示例代碼fromsklearn.ensembleimportGradientBoostingRegressor

fromsklearn.model_selectionimportRandomizedSearchCV

fromsklearn.datasetsimportload_boston

fromsklearn.model_selectionimporttrain_test_split

fromscipy.statsimportuniform,randint

#加載數(shù)據(jù)

boston=load_boston()

X=boston.data

y=boston.target

#劃分訓(xùn)練集和測(cè)試集

X_train,X_test,y_train,y_test=train_test_split(X,y,test_size=0.2,random_state=42)

#創(chuàng)建GBR模型

gbr=GradientBoostingRegressor(random_state=42)

#定義參數(shù)分布

param_dist={

'n_estimators':randint(100,500),

'learning_rate':uniform(0.01,0.5),

'max_depth':randint(3,10),

'min_samples_split':randint(2,20)

}

#創(chuàng)建隨機(jī)搜索對(duì)象

random_search=RandomizedSearchCV(estimator=gbr,param_distributions=param_dist,n_iter=100,cv=5,scoring='neg_mean_squared_error',verbose=1,n_jobs=-1)

#擬合數(shù)據(jù)

random_search.fit(X_train,y_train)

#輸出最佳參數(shù)

print("Bestparametersfound:",random_search.best_params_)3.1.3貝葉斯優(yōu)化(BayesianOptimization)貝葉斯優(yōu)化是一種基于概率模型的參數(shù)調(diào)優(yōu)方法,它通過(guò)構(gòu)建一個(gè)代理模型來(lái)預(yù)測(cè)參數(shù)的效果,從而指導(dǎo)搜索過(guò)程。這種方法在參數(shù)空間復(fù)雜時(shí),可以更智能地探索參數(shù)空間,找到最優(yōu)參數(shù)。3.1.3.1示例代碼fromsklearn.ensembleimportGradientBoostingRegressor

fromsklearn.datasetsimportload_boston

fromsklearn.model_selectionimporttrain_test_split

frombayes_optimportBayesianOptimization

#加載數(shù)據(jù)

boston=load_boston()

X=boston.data

y=boston.target

#劃分訓(xùn)練集和測(cè)試集

X_train,X_test,y_train,y_test=train_test_split(X,y,test_size=0.2,random_state=42)

#定義優(yōu)化函數(shù)

defgbr_optimize(n_estimators,learning_rate,max_depth,min_samples_split):

gbr=GradientBoostingRegressor(n_estimators=int(n_estimators),learning_rate=learning_rate,max_depth=int(max_depth),min_samples_split=int(min_samples_split),random_state=42)

gbr.fit(X_train,y_train)

score=gbr.score(X_test,y_test)

returnscore

#定義參數(shù)范圍

pbounds={'n_estimators':(100,500),'learning_rate':(0.01,1),'max_depth':(3,10),'min_samples_split':(2,20)}

#創(chuàng)建貝葉斯優(yōu)化對(duì)象

optimizer=BayesianOptimization(f=gbr_optimize,pbounds=pbounds,random_state=42)

#進(jìn)行優(yōu)化

optimizer.maximize(init_points=10,n_iter=100)

#輸出最佳參數(shù)

print("Bestparametersfound:",optimizer.max['params'])3.1.4總結(jié)在調(diào)優(yōu)梯度提升回歸(GBR)模型時(shí),網(wǎng)格搜索、隨機(jī)搜索和貝葉斯優(yōu)化是三種常用的方法。網(wǎng)格搜索適合參數(shù)空間較小的情況,隨機(jī)搜索在參數(shù)空間較大時(shí)更為高效,而貝葉斯優(yōu)化則在參數(shù)空間復(fù)雜時(shí)提供更智能的搜索策略。選擇哪種方法取決于具體問(wèn)題的參數(shù)空間大小和計(jì)算資源的限制。4案例分析與實(shí)踐4.1房?jī)r(jià)預(yù)測(cè)案例在房?jī)r(jià)預(yù)測(cè)的場(chǎng)景中,梯度提升回歸(GBR)模型可以有效地捕捉到房?jī)r(jià)與各種特征之間的復(fù)雜關(guān)系。下面我們將通過(guò)一個(gè)具體的案例,使用Python的scikit-learn庫(kù)來(lái)展示如何構(gòu)建和調(diào)優(yōu)GBR模型。4.1.1數(shù)據(jù)準(zhǔn)備假設(shè)我們有如下數(shù)據(jù)集,包含了房屋的特征和價(jià)格:層數(shù)面積(平方米)距離市中心(公里)房?jī)r(jià)(萬(wàn)元)312051502801010041503200…………4.1.2加載數(shù)據(jù)importpandasaspd

fromsklearn.model_selectionimporttrain_test_split

fromsklearn.ensembleimportGradientBoostingRegressor

fromsklearn.metricsimportmean_squared_error

#加載數(shù)據(jù)

data=pd.read_csv('house_prices.csv')

X=data[['floors','area','distance_to_center']]

y=data['price']

#劃分訓(xùn)練集和測(cè)試集

X_train,X_test,y_train,y_test=train_test_split(X,y,test_size=0.2,random_state=42)4.1.3構(gòu)建GBR模型#初始化GBR模型

gbr=GradientBoostingRegressor(n_estimators=100,learning_rate=0.1,max_depth=3,random_state=42)

#訓(xùn)練模型

gbr.fit(X_train,y_train)

#預(yù)測(cè)

predictions=gbr.predict(X_test)4.1.4參數(shù)調(diào)優(yōu)GBR模型的參數(shù)調(diào)優(yōu)是關(guān)鍵,可以顯著提高模型的預(yù)測(cè)性能。主要參數(shù)包括:n_estimators:決策樹(shù)的數(shù)量。learning_rate:每棵樹(shù)的貢獻(xiàn)權(quán)重。max_depth:決策樹(shù)的最大深度。min_samples_split:內(nèi)部節(jié)點(diǎn)再劃分所需最小樣本數(shù)。min_samples_leaf:葉子節(jié)點(diǎn)上所需最小樣本數(shù)。4.1.4.1使用GridSearchCV進(jìn)行參數(shù)調(diào)優(yōu)fromsklearn.model_selectionimportGridSearchCV

#定義參數(shù)網(wǎng)格

param_grid={

'n_estimators':[100,200,300],

'learning_rate':[0.1,0.05,0.01],

'max_depth':[3,4,5],

'min_samples_split':[2,3,4],

'min_samples_leaf':[1,2,3]

}

#創(chuàng)建GridSearchCV對(duì)象

grid_search=GridSearchCV(GradientBoostingRegressor(random_state=42),param_grid,cv=5,scoring='neg_mean_squared_error')

#搜索最佳參數(shù)

grid_search.fit(X_train,y_train)

#輸出最佳參數(shù)

best_params=grid_search.best_params_

print("Bestparametersfound:",best_params)

#使用最佳參數(shù)重新訓(xùn)練模型

best_gbr=GradientBoostingRegressor(**best_params,random_state=42)

best_gbr.fit(X_train,y_train)

#評(píng)估模型

best_predictions=best_gbr.predict(X_test)

mse=mean_squared_error(y_test,best_predictions)

print("MeanSquaredError:",mse)4.2股票價(jià)格預(yù)測(cè)案例股票價(jià)格預(yù)測(cè)是金融領(lǐng)域中一個(gè)極具挑戰(zhàn)性的任務(wù),GBR模型可以用來(lái)分析歷史數(shù)據(jù),預(yù)測(cè)未來(lái)的股票價(jià)格。下面我們將展示如何使用GBR模型進(jìn)行股票價(jià)格預(yù)測(cè)。4.2.1數(shù)據(jù)準(zhǔn)備假設(shè)我們有如下股票歷史數(shù)據(jù):日期開(kāi)盤(pán)價(jià)收盤(pán)價(jià)最高價(jià)最低價(jià)成交量2023-01-0110010510799100002023-01-0210510811010412000………………4.2.2加載數(shù)據(jù)#加載數(shù)據(jù)

data=pd.read_csv('stock_prices.csv')

X=data[['open','high','low','volume']]

y=data['close']

#劃分訓(xùn)練集和測(cè)試集

X_train,X_test,y_train,y_test=train_test_split(X,y,test_size=0.2,random_state=42)4.2.3構(gòu)建GBR模型#初始化GBR模型

gbr=GradientBoostingRegressor(n_estimators=100,learning_rate=0.1,max_depth=3,random_state=42)

#訓(xùn)練模型

gbr.fit(X_train,y_train)

#預(yù)測(cè)

predictions=gbr.predict(X_test)4.2.4參數(shù)調(diào)優(yōu)對(duì)于股票價(jià)格預(yù)測(cè),我們同樣需要對(duì)GBR模型進(jìn)行參數(shù)調(diào)優(yōu),以提高預(yù)測(cè)的準(zhǔn)確性。4.2.4.1使用RandomizedSearchCV進(jìn)行參數(shù)調(diào)優(yōu)fromsklearn.model_selectionimportRandomizedSearchCV

fromscipy.statsimportrandint

#定義參數(shù)分布

param_dist={

'n_estimators':randint(100,500),

'learning_rate':[0.1,0.05,0.01],

'max_depth':randint(3,10),

'min_samples_split':randint(2,10),

'min_samples_leaf':randint(1,10)

}

#創(chuàng)建RandomizedSearchCV對(duì)象

random_search=RandomizedSearchCV(GradientBoostingRegressor(random_state=42),param_dist,n_iter=10,cv=5,scoring='neg_mean_squared_error',random_state=42)

#搜索最佳參數(shù)

random_search.fit(X_train,y_train)

#輸出最佳參數(shù)

best_params=random_search.best_params_

print("Bestparametersfound:",best_params)

#使用最佳參數(shù)重新訓(xùn)練模型

best_gbr=GradientBoostingRegressor(**best_params,random_state=42)

best_gbr.fit(X_train,y_train)

#評(píng)估模型

best_predictions=best_gbr.predict(X_test)

mse=mean_squared_error(y_test,best_predictions)

print("MeanSquaredError:",mse)通過(guò)以上案例,我們可以看到,梯度提升回歸模型在房?jī)r(jià)預(yù)測(cè)和股票價(jià)格預(yù)測(cè)中都能發(fā)揮重要作用,而參數(shù)調(diào)優(yōu)是提高模型性能的關(guān)鍵步驟。使用GridSearchCV和RandomizedSearchCV可以幫助我們找到最佳的模型參數(shù),從而提高預(yù)測(cè)的準(zhǔn)確性。5GBR模型調(diào)優(yōu)后的評(píng)估與解釋5.1模型評(píng)估指標(biāo)在評(píng)估梯度提升回歸(GBR)模型的性能時(shí),我們通常關(guān)注幾個(gè)關(guān)鍵指標(biāo),這些指標(biāo)幫助我們理解模型的預(yù)測(cè)準(zhǔn)確性和穩(wěn)定性。以下是一些常用的評(píng)估指標(biāo):均方誤差(MSE)均方誤差是預(yù)測(cè)值與真實(shí)值之間差的平方的平均值,它強(qiáng)調(diào)了較大誤差的影響。fromsklearn.metricsimportmean_squared_error

fromsklearn.ensembleimportGradientBoostingRegressor

fromsklearn.model_selectionimporttrain_test_split

importnumpyasnp

#創(chuàng)建數(shù)據(jù)集

X,y=np.random.rand(100,10),np.random.rand(100)

#劃分訓(xùn)練集和測(cè)試集

X_train,X_test,y_train,y_test=train_test_split(X,y,test_size=0.2,random_state=42)

#訓(xùn)練GBR模型

gbr=GradientBoostingRegressor().fit(X_train,y_train)

#預(yù)測(cè)

y_pred=gbr.predict(X_test)

#計(jì)算MSE

mse=mean_squared_error(y_test,y_pred)

print(f'MeanSquaredError:{mse}')均方根誤差(RMSE)均方根誤差是MSE的平方根,它以與目標(biāo)變量相同的單位來(lái)表示誤差。rmse=np.sqrt(mse)

print(f'RootMeanSquaredError:{rmse}')平均絕對(duì)誤差(MAE)平均絕對(duì)誤差是預(yù)測(cè)值與真實(shí)值之間差的絕對(duì)值的平均值,它對(duì)所有誤差一視同仁。fromsklearn.metricsimportmean_absolute_error

mae=mean_absolute_error(y_test,y_pred)

print(f'MeanAbsoluteError:{mae}')R2分?jǐn)?shù)R2分?jǐn)?shù)(決定系數(shù))表示模型解釋的方差比例,值越接近1,表示模型的解釋能力越強(qiáng)。fromsklearn.metricsimportr2_score

r2=r2_score(y_test,y_pred)

print(f'R2Score:{r2}')5.2特征重要性分析梯度提升回歸模型能夠提供特征重要性信息,這有助于我們理解哪些特征對(duì)模型的預(yù)測(cè)能力貢獻(xiàn)最大。特征重要性是基于特征在樹(shù)中的使用情況計(jì)算的。#獲取特征重要性

feature_importances=gbr.feature_importances_

#打印特征重要性

fori,importanceinenumerate(feature_importances):

print(f'Feature{i}:Importance:{importance}')5.3殘差分析與模型診斷殘差分析是評(píng)估模型預(yù)測(cè)準(zhǔn)確性的另一種方法,它檢查預(yù)測(cè)值與真實(shí)值之間的差異。殘差圖可以幫助我們識(shí)別模型的偏差和方差問(wèn)題,以及是否存在非線性關(guān)系或異方差性。importmatplotlib.pyplotasplt

#計(jì)算殘差

residuals=y_test-y_pred

#繪制殘差圖

plt.scatter(y_pred,residuals)

plt.axhline(y=0,color='r',linestyle='--')

plt.xlabel('PredictedValues')

plt.ylabel('Residuals')

plt.title('ResidualPlot')

plt.show()此外,我們還可以通過(guò)學(xué)習(xí)曲線來(lái)診斷模型的過(guò)擬合或欠擬合問(wèn)題,這有助于我們調(diào)整模型的復(fù)雜度。fromsklearn.model_selectionimportlearning_curve

#計(jì)算學(xué)習(xí)曲線

train_sizes,train_scores,test_scores=learning_curve(gbr,X,y,cv=5)

#繪制學(xué)習(xí)曲線

plt.figure()

plt.title('LearningCurve')

plt.xlabel('TrainingExamples')

plt.ylabel('Score')

plt.grid()

plt.plot(train_sizes,np.mean(train_scores,axis=1),'o-',color="r",label="Trainingscore")

plt.plot(train_sizes,np.mean(test_scores,axis=1),'o-',color="g",label="Cross-validationscore")

plt.legend(loc="best")

plt.show()通過(guò)上述方法,我們可以全面評(píng)估和解釋GBR模型的性能,確保模型不僅在訓(xùn)練數(shù)據(jù)上表現(xiàn)良好,而且在未見(jiàn)數(shù)據(jù)上也能做出準(zhǔn)確的預(yù)測(cè)。6高級(jí)主題與擴(kuò)展6.1極端梯度提升(XGBoost)6.1.1XGBoost原理XGBoost,或稱(chēng)極端梯度提升,是梯度提升機(jī)的一種高效實(shí)現(xiàn)。它通過(guò)以下特性優(yōu)化了GBR模型:正則化:在損失函數(shù)中加入正則項(xiàng),以減少過(guò)擬合。列塊:將數(shù)據(jù)存儲(chǔ)為列塊,便于并行處理。近似直方圖算法:使用近似直方圖算法加速特征分割點(diǎn)的尋找。緩存意識(shí):利用緩存來(lái)提高計(jì)算效率。并行計(jì)算:在單個(gè)機(jī)器上利用多線程進(jìn)行并行計(jì)算。6.1.2XGBoost參數(shù)調(diào)優(yōu)XGBoost的參數(shù)調(diào)優(yōu)主要涉及以下幾類(lèi)參數(shù):學(xué)習(xí)率(learning_rate):控制每次迭代更新權(quán)重的幅度。樹(shù)的深度(max_depth):樹(shù)的最大深度,影響模型復(fù)雜度。子樣本比例(subsample):每棵樹(shù)隨機(jī)采樣的比例。**列采樣比例(colsample_by*)**:每棵樹(shù)隨機(jī)采樣的特征比例。正則化參數(shù)(alpha,lambda):用于L1和L2正則化,防止過(guò)擬合。最小葉子節(jié)點(diǎn)權(quán)重(min_child_weight):葉子節(jié)點(diǎn)上最小的樣本權(quán)重和。6.1.2.1示例代碼importxgboostasxgb

fromsklearn.datasetsimportload_boston

fromsklearn.model_selectionimporttrain_test_split

fromsklearn.metricsimportmean_squared_error

#加載數(shù)據(jù)

boston=load_boston()

X=boston.data

y=boston.target

#劃分?jǐn)?shù)據(jù)集

X_train,X_test,y_train,y_test=train_test_split(X,y,test_size=0.2,random_state=42)

#定義XGBoost模型

xgb_model=xgb.XGBRegressor(objective='reg:squarederror',

learning_rate=0.1,

max_depth=3,

subsample=0.8,

colsample_bytree=0.8,

min_child_weight=1,

n_estimators=100)

#訓(xùn)練模型

xgb_model.fit(X_train,y_train)

#預(yù)測(cè)

y_pred=xgb_model.predict(X_test)

#評(píng)估

mse=mean_squared_error(y_test,y_pred)

print(f'MeanSquaredError:{mse}')6.1.3輕梯度提升(LightGBM)6.1.3.1LightGBM原理LightGBM是梯度提升框架的另一種實(shí)現(xiàn),它通過(guò)以下方式提高效率和減少內(nèi)存使用:基于直方圖的決策樹(shù)算法:使用更小的直方圖來(lái)近似特征分布。葉子節(jié)點(diǎn)分裂策略:采用“Goose”策略,優(yōu)先考慮分裂后信息增益最大的葉子節(jié)點(diǎn)。稀疏優(yōu)化:自動(dòng)處理缺失值和稀疏數(shù)據(jù)。6.1.3.2LightGBM參數(shù)調(diào)優(yōu)關(guān)鍵參數(shù)包括:學(xué)習(xí)率(learning_rate):控制每次迭代的步長(zhǎng)。樹(shù)的深度(num_leaves):樹(shù)的最大葉子節(jié)點(diǎn)數(shù)。特征分?jǐn)?shù)(feature_fraction):每棵樹(shù)隨機(jī)采樣的特征比例。數(shù)據(jù)分?jǐn)?shù)(bagging_fraction):每棵樹(shù)隨機(jī)采樣的數(shù)據(jù)比例。最小數(shù)據(jù)在葉子節(jié)點(diǎn)(min_data_in_leaf):葉子節(jié)點(diǎn)上最小的數(shù)據(jù)量。6.1.3.3示例代碼importlightgbmaslgb

fromsklearn.datasetsimportload_boston

fromsklearn.model_selectionimporttrain_test_split

fromsklearn.metricsimportmean_squared_error

#加載數(shù)據(jù)

boston=load_boston()

X=boston.data

y=boston.

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論