人工智能和機(jī)器學(xué)習(xí)之回歸算法:隨機(jī)森林回歸:超參數(shù)調(diào)優(yōu):隨機(jī)森林案例_第1頁
人工智能和機(jī)器學(xué)習(xí)之回歸算法:隨機(jī)森林回歸:超參數(shù)調(diào)優(yōu):隨機(jī)森林案例_第2頁
人工智能和機(jī)器學(xué)習(xí)之回歸算法:隨機(jī)森林回歸:超參數(shù)調(diào)優(yōu):隨機(jī)森林案例_第3頁
人工智能和機(jī)器學(xué)習(xí)之回歸算法:隨機(jī)森林回歸:超參數(shù)調(diào)優(yōu):隨機(jī)森林案例_第4頁
人工智能和機(jī)器學(xué)習(xí)之回歸算法:隨機(jī)森林回歸:超參數(shù)調(diào)優(yōu):隨機(jī)森林案例_第5頁
已閱讀5頁,還剩13頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

人工智能和機(jī)器學(xué)習(xí)之回歸算法:隨機(jī)森林回歸:超參數(shù)調(diào)優(yōu):隨機(jī)森林案例1隨機(jī)森林回歸簡(jiǎn)介1.11隨機(jī)森林回歸原理隨機(jī)森林回歸是一種集成學(xué)習(xí)方法,它通過構(gòu)建多個(gè)決策樹并綜合它們的預(yù)測(cè)結(jié)果來提高預(yù)測(cè)的準(zhǔn)確性和穩(wěn)定性。每個(gè)決策樹都是在數(shù)據(jù)集的不同子集上訓(xùn)練的,這些子集是通過有放回的抽樣(自助抽樣)從原始數(shù)據(jù)集中獲得的。此外,每個(gè)決策樹在每個(gè)節(jié)點(diǎn)上選擇的特征也是隨機(jī)的,這增加了模型的多樣性,從而提高了整體的預(yù)測(cè)性能。1.1.1如何工作自助抽樣:從原始數(shù)據(jù)集中隨機(jī)抽取樣本,形成訓(xùn)練每個(gè)決策樹的數(shù)據(jù)子集。隨機(jī)特征選擇:在每個(gè)決策樹的節(jié)點(diǎn)上,從所有特征中隨機(jī)選擇一部分特征來決定最佳分割。構(gòu)建決策樹:使用數(shù)據(jù)子集和隨機(jī)特征選擇來構(gòu)建決策樹,通常不進(jìn)行剪枝以避免過早停止樹的生長(zhǎng)。預(yù)測(cè):對(duì)于新的輸入數(shù)據(jù),讓森林中的每棵樹進(jìn)行預(yù)測(cè),然后取所有樹預(yù)測(cè)結(jié)果的平均值作為最終預(yù)測(cè)。1.1.2代碼示例假設(shè)我們使用Python的scikit-learn庫來實(shí)現(xiàn)隨機(jī)森林回歸。以下是一個(gè)簡(jiǎn)單的示例,展示了如何使用隨機(jī)森林回歸模型進(jìn)行預(yù)測(cè):#導(dǎo)入必要的庫

importnumpyasnp

fromsklearn.ensembleimportRandomForestRegressor

fromsklearn.model_selectionimporttrain_test_split

fromsklearn.metricsimportmean_squared_error

#創(chuàng)建一個(gè)簡(jiǎn)單的數(shù)據(jù)集

X=np.array([[1,2],[2,3],[3,4],[4,5],[5,6],[6,7],[7,8],[8,9]])

y=np.array([3,5,7,9,11,13,15,17])

#劃分?jǐn)?shù)據(jù)集為訓(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)建隨機(jī)森林回歸模型

rf=RandomForestRegressor(n_estimators=100,random_state=42)

#訓(xùn)練模型

rf.fit(X_train,y_train)

#預(yù)測(cè)

y_pred=rf.predict(X_test)

#計(jì)算預(yù)測(cè)誤差

mse=mean_squared_error(y_test,y_pred)

print(f"MeanSquaredError:{mse}")在這個(gè)例子中,我們首先創(chuàng)建了一個(gè)簡(jiǎn)單的數(shù)據(jù)集X和目標(biāo)變量y。然后,我們使用train_test_split函數(shù)將數(shù)據(jù)集劃分為訓(xùn)練集和測(cè)試集。接下來,我們創(chuàng)建了一個(gè)RandomForestRegressor對(duì)象,并設(shè)置了n_estimators參數(shù)為100,這意味著我們將構(gòu)建100棵樹。最后,我們訓(xùn)練模型,進(jìn)行預(yù)測(cè),并計(jì)算預(yù)測(cè)的均方誤差。1.22隨機(jī)森林在回歸問題中的應(yīng)用隨機(jī)森林回歸可以應(yīng)用于各種回歸問題,包括但不限于房?jī)r(jià)預(yù)測(cè)、股票價(jià)格預(yù)測(cè)、銷售預(yù)測(cè)等。它在處理高維數(shù)據(jù)和非線性關(guān)系時(shí)表現(xiàn)尤為出色,同時(shí)能夠處理缺失值和異常值,這使得隨機(jī)森林回歸成為數(shù)據(jù)預(yù)處理要求較低的回歸任務(wù)的理想選擇。1.2.1案例分析:房?jī)r(jià)預(yù)測(cè)假設(shè)我們有一組房屋數(shù)據(jù),包括房屋的大小、臥室數(shù)量、地理位置等特征,以及每棟房屋的售價(jià)。我們的目標(biāo)是使用隨機(jī)森林回歸來預(yù)測(cè)房屋的價(jià)格。#加載房?jī)r(jià)數(shù)據(jù)集

fromsklearn.datasetsimportfetch_california_housing

data=fetch_california_housing()

X=data.data

y=data.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)

#創(chuàng)建隨機(jī)森林回歸模型

rf=RandomForestRegressor(n_estimators=200,max_depth=10,random_state=42)

#訓(xùn)練模型

rf.fit(X_train,y_train)

#預(yù)測(cè)

y_pred=rf.predict(X_test)

#計(jì)算預(yù)測(cè)誤差

mse=mean_squared_error(y_test,y_pred)

print(f"MeanSquaredError:{mse}")在這個(gè)案例中,我們使用了scikit-learn庫中的fetch_california_housing函數(shù)來加載加州房?jī)r(jià)數(shù)據(jù)集。然后,我們創(chuàng)建了一個(gè)隨機(jī)森林回歸模型,設(shè)置了n_estimators為200和max_depth為10,以控制樹的數(shù)量和深度。模型訓(xùn)練后,我們對(duì)測(cè)試集進(jìn)行預(yù)測(cè),并計(jì)算預(yù)測(cè)的均方誤差。1.2.2超參數(shù)調(diào)優(yōu)隨機(jī)森林回歸的性能可以通過調(diào)整其超參數(shù)來優(yōu)化。主要的超參數(shù)包括:n_estimators:森林中樹的數(shù)量。增加樹的數(shù)量通??梢蕴岣吣P偷男阅埽矔?huì)增加計(jì)算時(shí)間。max_depth:樹的最大深度。限制樹的深度可以防止過擬合。min_samples_split:節(jié)點(diǎn)分裂所需的最小樣本數(shù)。增加這個(gè)值可以減少模型的復(fù)雜性。min_samples_leaf:葉節(jié)點(diǎn)上所需的最小樣本數(shù)。增加這個(gè)值可以減少模型的復(fù)雜性。max_features:在尋找最佳分割時(shí)考慮的特征數(shù)量。減少這個(gè)值可以增加模型的多樣性。調(diào)優(yōu)這些超參數(shù)通常需要使用交叉驗(yàn)證和網(wǎng)格搜索等技術(shù)。例如,使用GridSearchCV來尋找最佳的n_estimators和max_depth:fromsklearn.model_selectionimportGridSearchCV

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

param_grid={

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

'max_depth':[None,10,20,30],

}

#創(chuàng)建隨機(jī)森林回歸模型

rf=RandomForestRegressor(random_state=42)

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

grid_search=GridSearchCV(rf,param_grid,cv=5,scoring='neg_mean_squared_error')

#執(zhí)行網(wǎng)格搜索

grid_search.fit(X_train,y_train)

#輸出最佳參數(shù)

print(f"Bestparameters:{grid_search.best_params_}")通過上述代碼,我們可以找到在均方誤差上表現(xiàn)最佳的n_estimators和max_depth的組合。這將幫助我們構(gòu)建一個(gè)更準(zhǔn)確的隨機(jī)森林回歸模型。1.2.3結(jié)論隨機(jī)森林回歸是一種強(qiáng)大的機(jī)器學(xué)習(xí)算法,適用于各種回歸問題。通過調(diào)整其超參數(shù),我們可以進(jìn)一步優(yōu)化模型的性能,使其在預(yù)測(cè)任務(wù)中表現(xiàn)得更加出色。在實(shí)際應(yīng)用中,隨機(jī)森林回歸的靈活性和魯棒性使其成為數(shù)據(jù)科學(xué)家和機(jī)器學(xué)習(xí)工程師的首選工具之一。2隨機(jī)森林回歸的超參數(shù)2.11n_estimators參數(shù)詳解隨機(jī)森林回歸算法中的n_estimators參數(shù)決定了森林中決策樹的數(shù)量。增加決策樹的數(shù)量通??梢蕴岣吣P偷姆€(wěn)定性和預(yù)測(cè)性能,但同時(shí)也會(huì)增加計(jì)算時(shí)間和資源消耗。選擇合適的n_estimators值是一個(gè)平衡模型性能和計(jì)算效率的過程。2.1.1示例代碼#導(dǎo)入必要的庫

fromsklearn.ensembleimportRandomForestRegressor

fromsklearn.datasetsimportmake_regression

fromsklearn.model_selectionimporttrain_test_split

fromsklearn.metricsimportmean_squared_error

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

X,y=make_regression(n_samples=1000,n_features=10,noise=0.1)

#劃分訓(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)建隨機(jī)森林回歸模型,設(shè)置不同的n_estimators值

rf_10=RandomForestRegressor(n_estimators=10,random_state=42)

rf_100=RandomForestRegressor(n_estimators=100,random_state=42)

#訓(xùn)練模型

rf_10.fit(X_train,y_train)

rf_100.fit(X_train,y_train)

#預(yù)測(cè)

y_pred_10=rf_10.predict(X_test)

y_pred_100=rf_100.predict(X_test)

#計(jì)算均方誤差

mse_10=mean_squared_error(y_test,y_pred_10)

mse_100=mean_squared_error(y_test,y_pred_100)

#輸出結(jié)果

print(f"10棵樹的隨機(jī)森林MSE:{mse_10}")

print(f"100棵樹的隨機(jī)森林MSE:{mse_100}")2.1.2解釋在上述代碼中,我們創(chuàng)建了兩個(gè)隨機(jī)森林回歸模型,一個(gè)有10棵樹,另一個(gè)有100棵樹。通過比較兩個(gè)模型在相同數(shù)據(jù)集上的均方誤差(MSE),我們可以觀察到n_estimators參數(shù)對(duì)模型性能的影響。通常,隨著決策樹數(shù)量的增加,模型的預(yù)測(cè)誤差會(huì)逐漸減小,但這種改善會(huì)逐漸趨于平緩。2.22max_depth參數(shù)的作用max_depth參數(shù)控制著每棵樹的最大深度。設(shè)置max_depth可以防止決策樹過深,從而避免過擬合。過深的樹可能會(huì)學(xué)習(xí)到訓(xùn)練數(shù)據(jù)中的噪聲,而不是數(shù)據(jù)的內(nèi)在規(guī)律,導(dǎo)致模型在新數(shù)據(jù)上的泛化能力下降。2.2.1示例代碼#創(chuàng)建不同深度的隨機(jī)森林回歸模型

rf_shallow=RandomForestRegressor(max_depth=3,random_state=42)

rf_deep=RandomForestRegressor(max_depth=30,random_state=42)

#訓(xùn)練模型

rf_shallow.fit(X_train,y_train)

rf_deep.fit(X_train,y_train)

#預(yù)測(cè)

y_pred_shallow=rf_shallow.predict(X_test)

y_pred_deep=rf_deep.predict(X_test)

#計(jì)算均方誤差

mse_shallow=mean_squared_error(y_test,y_pred_shallow)

mse_deep=mean_squared_error(y_test,y_pred_deep)

#輸出結(jié)果

print(f"樹深度為3的隨機(jī)森林MSE:{mse_shallow}")

print(f"樹深度為30的隨機(jī)森林MSE:{mse_deep}")2.2.2解釋通過設(shè)置不同的max_depth值,我們可以觀察到模型復(fù)雜度對(duì)預(yù)測(cè)性能的影響。較淺的樹可能無法捕捉到數(shù)據(jù)中的復(fù)雜模式,而過深的樹則可能過度擬合訓(xùn)練數(shù)據(jù)。選擇合適的max_depth值是超參數(shù)調(diào)優(yōu)的關(guān)鍵步驟之一。2.33min_samples_split和min_samples_leaf參數(shù)解析min_samples_split參數(shù)定義了內(nèi)部節(jié)點(diǎn)分裂所需最小樣本數(shù),而min_samples_leaf參數(shù)定義了葉節(jié)點(diǎn)上所需的最小樣本數(shù)。這兩個(gè)參數(shù)用于控制樹的生長(zhǎng),防止過擬合。較高的值可以減少模型的復(fù)雜度,但可能犧牲一些預(yù)測(cè)精度。2.3.1示例代碼#創(chuàng)建不同min_samples_split和min_samples_leaf值的隨機(jī)森林回歸模型

rf_split_2=RandomForestRegressor(min_samples_split=2,min_samples_leaf=1,random_state=42)

rf_split_10=RandomForestRegressor(min_samples_split=10,min_samples_leaf=5,random_state=42)

#訓(xùn)練模型

rf_split_2.fit(X_train,y_train)

rf_split_10.fit(X_train,y_train)

#預(yù)測(cè)

y_pred_split_2=rf_split_2.predict(X_test)

y_pred_split_10=rf_split_10.predict(X_test)

#計(jì)算均方誤差

mse_split_2=mean_squared_error(y_test,y_pred_split_2)

mse_split_10=mean_squared_error(y_test,y_pred_split_10)

#輸出結(jié)果

print(f"min_samples_split=2,min_samples_leaf=1的隨機(jī)森林MSE:{mse_split_2}")

print(f"min_samples_split=10,min_samples_leaf=5的隨機(jī)森林MSE:{mse_split_10}")2.3.2解釋在代碼示例中,我們通過調(diào)整min_samples_split和min_samples_leaf的值來觀察模型的性能變化。較低的值允許樹更自由地生長(zhǎng),可能捕捉到更多的數(shù)據(jù)細(xì)節(jié),但同時(shí)也增加了過擬合的風(fēng)險(xiǎn)。較高的值則限制了樹的生長(zhǎng),可能使模型更加穩(wěn)健,但預(yù)測(cè)精度可能會(huì)有所下降。2.44max_features參數(shù)的重要性max_features參數(shù)決定了在尋找最佳分裂點(diǎn)時(shí)考慮的特征數(shù)量。默認(rèn)情況下,隨機(jī)森林在每個(gè)分裂點(diǎn)上考慮所有特征,但設(shè)置max_features可以增加模型的隨機(jī)性,從而提高模型的泛化能力。通常,可以設(shè)置為“sqrt”(特征數(shù)量的平方根)或“l(fā)og2”(特征數(shù)量的對(duì)數(shù))。2.4.1示例代碼#創(chuàng)建不同max_features值的隨機(jī)森林回歸模型

rf_sqrt=RandomForestRegressor(max_features='sqrt',random_state=42)

rf_log2=RandomForestRegressor(max_features='log2',random_state=42)

#訓(xùn)練模型

rf_sqrt.fit(X_train,y_train)

rf_log2.fit(X_train,y_train)

#預(yù)測(cè)

y_pred_sqrt=rf_sqrt.predict(X_test)

y_pred_log2=rf_log2.predict(X_test)

#計(jì)算均方誤差

mse_sqrt=mean_squared_error(y_test,y_pred_sqrt)

mse_log2=mean_squared_error(y_test,y_pred_log2)

#輸出結(jié)果

print(f"max_features='sqrt'的隨機(jī)森林MSE:{mse_sqrt}")

print(f"max_features='log2'的隨機(jī)森林MSE:{mse_log2}")2.4.2解釋通過設(shè)置max_features參數(shù)為“sqrt”和“l(fā)og2”,我們可以觀察到模型在不同特征子集上的表現(xiàn)。使用特征子集可以增加模型的隨機(jī)性,有助于減少過擬合,提高模型在未見數(shù)據(jù)上的表現(xiàn)。然而,特征子集的大小也會(huì)影響模型的預(yù)測(cè)精度,因此需要通過實(shí)驗(yàn)來確定最佳的max_features值。通過上述示例,我們可以看到隨機(jī)森林回歸中不同超參數(shù)對(duì)模型性能的影響。在實(shí)際應(yīng)用中,通常需要通過交叉驗(yàn)證等方法來調(diào)優(yōu)這些超參數(shù),以達(dá)到最佳的預(yù)測(cè)效果。3超參數(shù)調(diào)優(yōu)方法3.11網(wǎng)格搜索(GridSearchCV)調(diào)優(yōu)網(wǎng)格搜索是一種系統(tǒng)地嘗試多種參數(shù)組合的超參數(shù)調(diào)優(yōu)方法,它通過構(gòu)建一個(gè)參數(shù)網(wǎng)格,然后在該網(wǎng)格上進(jìn)行窮舉搜索,找到最佳的參數(shù)組合。在隨機(jī)森林回歸中,我們通常會(huì)調(diào)整如n_estimators(樹的數(shù)量)、max_depth(樹的最大深度)、min_samples_split(節(jié)點(diǎn)分裂所需的最小樣本數(shù))等參數(shù)。3.1.1示例代碼fromsklearn.ensembleimportRandomForestRegressor

fromsklearn.model_selectionimportGridSearchCV

fromsklearn.datasetsimportload_boston

importnumpyasnp

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

data=load_boston()

X=data.data

y=data.target

#定義隨機(jī)森林回歸模型

rf=RandomForestRegressor()

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

param_grid={

'n_estimators':[10,50,100,200],

'max_depth':[None,10,20,30],

'min_samples_split':[2,5,10]

}

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

grid_search=GridSearchCV(estimator=rf,param_grid=param_grid,cv=5,scoring='neg_mean_squared_error')

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

grid_search.fit(X,y)

#輸出最佳參數(shù)組合

best_params=grid_search.best_params_

print("最佳參數(shù)組合:",best_params)

#輸出最佳模型的得分

best_score=grid_search.best_score_

print("最佳模型的得分:",np.sqrt(-best_score))3.1.2解釋在上述代碼中,我們首先加載了波士頓房?jī)r(jià)數(shù)據(jù)集。然后,定義了一個(gè)隨機(jī)森林回歸模型,并創(chuàng)建了一個(gè)參數(shù)網(wǎng)格,其中包含了我們想要嘗試的不同參數(shù)組合。通過GridSearchCV對(duì)象,我們執(zhí)行了交叉驗(yàn)證,并使用負(fù)均方誤差作為評(píng)分標(biāo)準(zhǔn)。最后,我們輸出了找到的最佳參數(shù)組合和模型的得分。3.22隨機(jī)搜索(RandomizedSearchCV)調(diào)優(yōu)隨機(jī)搜索與網(wǎng)格搜索類似,但不是嘗試所有可能的參數(shù)組合,而是隨機(jī)選擇參數(shù)組合進(jìn)行評(píng)估。這種方法在參數(shù)空間較大時(shí)更為高效,因?yàn)樗苊饬瞬槐匾挠?jì)算。3.2.1示例代碼fromsklearn.ensembleimportRandomForestRegressor

fromsklearn.model_selectionimportRandomizedSearchCV

fromsklearn.datasetsimportload_boston

importnumpyasnp

fromscipy.statsimportrandint

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

data=load_boston()

X=data.data

y=data.target

#定義隨機(jī)森林回歸模型

rf=RandomForestRegressor()

#定義參數(shù)分布

param_dist={

'n_estimators':randint(10,200),

'max_depth':[None]+list(np.arange(10,100,10)),

'min_samples_split':randint(2,10)

}

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

random_search=RandomizedSearchCV(estimator=rf,param_distributions=param_dist,n_iter=100,cv=5,scoring='neg_mean_squared_error',random_state=42)

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

random_search.fit(X,y)

#輸出最佳參數(shù)組合

best_params=random_search.best_params_

print("最佳參數(shù)組合:",best_params)

#輸出最佳模型的得分

best_score=random_search.best_score_

print("最佳模型的得分:",np.sqrt(-best_score))3.2.2解釋在隨機(jī)搜索中,我們使用了RandomizedSearchCV,并定義了參數(shù)的分布。n_estimators和min_samples_split使用了隨機(jī)整數(shù)分布,而max_depth則是一個(gè)包含None和一系列整數(shù)值的列表。通過設(shè)置n_iter參數(shù),我們指定了要進(jìn)行的隨機(jī)搜索次數(shù)。3.33貝葉斯優(yōu)化(BayesianOptimization)貝葉斯優(yōu)化是一種基于概率模型的超參數(shù)調(diào)優(yōu)方法,它通過構(gòu)建一個(gè)代理模型來預(yù)測(cè)參數(shù)組合的性能,從而更高效地搜索參數(shù)空間。與網(wǎng)格搜索和隨機(jī)搜索相比,貝葉斯優(yōu)化能夠更快地收斂到最優(yōu)參數(shù)。3.3.1示例代碼fromsklearn.ensembleimportRandomForestRegressor

fromsklearn.model_selectionimportcross_val_score

fromsklearn.datasetsimportload_boston

frombayes_optimportBayesianOptimization

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

data=load_boston()

X=data.data

y=data.target

#定義隨機(jī)森林回歸模型

defrf_regressor(n_estimators,max_depth,min_samples_split):

#轉(zhuǎn)換參數(shù)為整數(shù)

n_estimators=int(n_estimators)

max_depth=int(max_depth)

min_samples_split=int(min_samples_split)

#創(chuàng)建模型

rf=RandomForestRegressor(n_estimators=n_estimators,max_depth=max_depth,min_samples_split=min_samples_split)

#計(jì)算交叉驗(yàn)證得分

score=cross_val_score(rf,X,y,cv=5,scoring='neg_mean_squared_error').mean()

#返回負(fù)均方誤差的負(fù)值,因?yàn)锽ayesianOptimization最小化目標(biāo)函數(shù)

return-score

#定義貝葉斯優(yōu)化的邊界

rf_bo=BayesianOptimization(

rf_regressor,

{

'n_estimators':(10,200),

'max_depth':(10,100),

'min_samples_split':(2,10)

}

)

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

rf_bo.maximize(init_points=5,n_iter=20)

#輸出最佳參數(shù)組合

best_params=rf_bo.max['params']

print("最佳參數(shù)組合:",best_params)

#輸出最佳模型的得分

best_score=rf_bo.max['target']

print("最佳模型的得分:",np.sqrt(-best_score))3.3.2解釋貝葉斯優(yōu)化使用了BayesianOptimization庫。我們首先定義了一個(gè)函數(shù)rf_regressor,該函數(shù)接受超參數(shù)作為輸入,并返回模型的負(fù)均方誤差。然后,我們創(chuàng)建了貝葉斯優(yōu)化對(duì)象,并指定了超參數(shù)的邊界。通過調(diào)用maximize方法,我們進(jìn)行了優(yōu)化過程,init_points參數(shù)用于初始化搜索,n_iter參數(shù)指定了后續(xù)的迭代次數(shù)。3.44使用學(xué)習(xí)曲線進(jìn)行調(diào)優(yōu)學(xué)習(xí)曲線可以幫助我們理解模型在不同數(shù)據(jù)量和復(fù)雜度下的性能,從而指導(dǎo)我們調(diào)整超參數(shù)。通過觀察學(xué)習(xí)曲線,我們可以判斷模型是否過擬合或欠擬合,進(jìn)而調(diào)整如max_depth和min_samples_split等參數(shù)。3.4.1示例代碼fromsklearn.ensembleimportRandomForestRegressor

fromsklearn.model_selectionimportlearning_curve

fromsklearn.datasetsimportload_boston

importmatplotlib.pyplotasplt

importnumpyasnp

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

data=load_boston()

X=data.data

y=data.target

#定義隨機(jī)森林回歸模型

rf=RandomForestRegressor(max_depth=10,min_samples_split=5)

#生成學(xué)習(xí)曲線

train_sizes,train_scores,test_scores=learning_curve(rf,X,y,cv=5,scoring='neg_mean_squared_error',train_sizes=np.linspace(0.1,1.0,10))

#計(jì)算平均值

train_scores_mean=np.mean(train_scores,axis=1)

test_scores_mean=np.mean(test_scores,axis=1)

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

plt.figure()

plt.title("LearningCurve")

plt.xlabel("Trainingexamples")

plt.ylabel("Score")

plt.grid()

plt.plot(train_sizes,train_scores_mean,'o-',color="r",label="Trainingscore")

plt.plot(train_sizes,test_scores_mean,'o-',color="g",label="Cross-validationscore")

plt.legend(loc="best")

plt.show()3.4.2解釋在學(xué)習(xí)曲線的示例中,我們首先定義了一個(gè)具有特定超參數(shù)的隨機(jī)森林回歸模型。然后,使用learning_curve函數(shù)生成了學(xué)習(xí)曲線,該函數(shù)會(huì)返回不同訓(xùn)練集大小下的訓(xùn)練得分和交叉驗(yàn)證得分。最后,我們繪制了學(xué)習(xí)曲線,通過觀察曲線的形狀,我們可以判斷模型的性能,并據(jù)此調(diào)整超參數(shù)。通過上述四種方法,我們可以有效地調(diào)整隨機(jī)森林回歸模型的超參數(shù),以提高模型的預(yù)測(cè)性能。每種方法都有其適用場(chǎng)景,選擇哪種方法取決于問題的復(fù)雜度和可用的計(jì)算資源。4隨機(jī)森林回歸案例分析4.11數(shù)據(jù)集準(zhǔn)備在開始隨機(jī)森林回歸模型的構(gòu)建之前,我們首先需要準(zhǔn)備一個(gè)數(shù)據(jù)集。這里我們將使用一個(gè)虛構(gòu)的房?jī)r(jià)數(shù)據(jù)集,該數(shù)據(jù)集包含多個(gè)特征,如房屋面積、臥室數(shù)量、地理位置等,以及一個(gè)目標(biāo)變量,即房屋價(jià)格。我們將使用Python的Pandas庫來加載和預(yù)處理數(shù)據(jù)。importpandasaspd

importnumpyasnp

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

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

#數(shù)據(jù)預(yù)處理

#假設(shè)數(shù)據(jù)集中存在缺失值,我們使用中位數(shù)填充

data.fillna(data.median(),inplace=True)

#分離特征和目標(biāo)變量

X=data.drop('price',axis=1)

y=data['price']

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

fromsklearn.model_selectionimporttrain_test_split

X_train,X_test,y_train,y_test=train_test_split(X,y,test_size=0.2,random_state=42)4.22基準(zhǔn)模型的建立接下來,我們將建立一個(gè)隨機(jī)森林回歸模型的基準(zhǔn)模型,以評(píng)估模型在未調(diào)優(yōu)前的性能。我們將使用Scikit-learn庫中的RandomForestRegressor類。fromsklearn.ensembleimportRandomForestRegressor

#創(chuàng)建隨機(jī)森林回歸模型

rf=RandomForestRegressor(n_estimators=100,random_state=42)

#訓(xùn)練模型

rf.fit(X_train,y_train)

#預(yù)測(cè)測(cè)試集

y_pred=rf.predict(X_test)4.33超參數(shù)調(diào)優(yōu)過程隨機(jī)森林回歸模型有許多超參數(shù)可以調(diào)優(yōu),以提高模型的性能。我們將使用網(wǎng)格搜索(GridSearchCV)來尋找最佳的超參數(shù)組合。我們將重點(diǎn)調(diào)整n_estimators(樹的數(shù)量)和max_depth(樹的最大深度)。fromsklearn.model_selectionimportGridSearchCV

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

param_grid={

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

'max_depth':[10,20,30,None]

}

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

grid_search=GridSearchCV(estimator=rf,param_grid=param_grid,cv=5,scoring='neg_mean_squared_error')

#執(zhí)行網(wǎng)格搜索

grid_search.fit(X_train,y_train)

#獲取最佳參數(shù)

best_params=grid_search.best_params_

print("最佳參數(shù):",best_params)

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

rf_best=RandomForestRegressor(n_estimators=best_params['n_estimators'],max_depth=best_params['max_depth'],random_state=42)

rf_best.fit(X_train,y_train)4.44模型評(píng)估與結(jié)果分析最后,我們將評(píng)估調(diào)優(yōu)后的隨機(jī)森林回歸模型的性能,并與基準(zhǔn)模型進(jìn)行比較。我們將使用均方根誤差(RMSE)作為評(píng)估指標(biāo)。fromsklearn.metricsimportmean_squared_error

#基準(zhǔn)模型的預(yù)測(cè)

y_pred_base=rf.predict(X_test)

#調(diào)優(yōu)后模型的預(yù)測(cè)

y_pred_best=rf_best.predict(X_test)

#計(jì)算RMSE

rmse_base=np.sqrt(mean_squared_error(y_test,y_pred_base))

rmse_best=np.sqrt(mean_squared_error(y_test,y_pred_best))

print("基準(zhǔn)模型的RMSE:",rmse_base)

print("調(diào)優(yōu)后模型的RMSE:",rmse_best)通過比較基準(zhǔn)模型和調(diào)優(yōu)后模型的RMSE,我們可以評(píng)估超參數(shù)調(diào)優(yōu)的效果。如果調(diào)優(yōu)后的模型具有更低的RMSE,那么我們可以認(rèn)為調(diào)優(yōu)過程是成功的,模型的性能得到了提升。以上步驟詳細(xì)展示了如何使用隨機(jī)森林回歸模型進(jìn)行房?jī)r(jià)預(yù)測(cè),并通過網(wǎng)格搜索進(jìn)行超參數(shù)調(diào)優(yōu)的過程。通過實(shí)踐,我們可以更好地理解隨機(jī)森林回歸模型的工作原理,以及如何通過調(diào)優(yōu)超參數(shù)來提高模型的預(yù)測(cè)性能。5實(shí)戰(zhàn)演練:隨機(jī)森林回歸超參數(shù)調(diào)優(yōu)5.11選擇合適的超參數(shù)調(diào)優(yōu)策略在隨機(jī)森林回歸模型中,超參數(shù)的選擇對(duì)模型的性能有著至關(guān)重要的影響。常見的超參數(shù)包括n_estimators(樹的數(shù)量)、max_depth(樹的最大深度)、min_samples_split(節(jié)點(diǎn)分裂所需的最小樣本數(shù))、min_samples_leaf(葉節(jié)點(diǎn)上所需的最小樣本數(shù))等。選擇調(diào)優(yōu)策略時(shí),可以考慮以下幾種方法:網(wǎng)格搜索(GridSearch):通過定義一個(gè)超參數(shù)的網(wǎng)格,遍歷所有可能的組合,找到最佳的超參數(shù)組合。這種方法雖然全面,但計(jì)算成本高。隨機(jī)搜索(RandomSearch):從超參數(shù)的分布中隨機(jī)選擇組合進(jìn)行搜索,相比于網(wǎng)格搜索,隨機(jī)搜索在有限的計(jì)算資源下往往能更有效地找到較好的超參數(shù)組合。貝葉斯優(yōu)化(BayesianOptimization):使用貝葉斯方法來優(yōu)化超參數(shù),通過構(gòu)建一個(gè)概率模型來預(yù)測(cè)超參數(shù)的性能,從而指導(dǎo)搜索過程,通常比網(wǎng)格搜索和隨機(jī)搜索更高效。5.1.1示例:使用隨機(jī)搜索進(jìn)行超參數(shù)調(diào)優(yōu)假設(shè)我們有一組房?jī)r(jià)預(yù)測(cè)的數(shù)據(jù)集,我們將使用隨機(jī)森林回歸模型,并通過隨機(jī)搜索來調(diào)優(yōu)超參數(shù)。importnumpyasnp

fromsklearn.ensembleimportRandomForestRegressor

fromsklearn.model_selectionimportRandomizedSearchCV

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)

#定義隨機(jī)森林回歸模型

rf=RandomForestRegressor(random_state=42)

#定義超參數(shù)搜索空間

param_dist={

'n_estimators':[10,50,100,200],

'max_depth':[None,10,20,30,40,50],

'min_samples_split':np.linspace(0.1,1.0,10),

'min_samples_leaf':np.linspace(0.1,0.5,5),

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

}

#實(shí)施隨機(jī)搜索

random_search=RandomizedSearchCV(rf,param_distributions=param_dist,n_iter=100,cv=5,verbose=2,random_state

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(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)論