版權(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024墻紙供貨施工合同樣本
- 村農(nóng)業(yè)調(diào)查匯報(bào)
- 2024守護(hù)合同范文
- 是三年級(jí)上冊(cè)第八單元《分?jǐn)?shù)的初步認(rèn)識(shí)》中的第一塊幾分之一
- 2024工程合同翻譯范文
- 假期時(shí)間表發(fā)言稿
- 撰寫職業(yè)生涯規(guī)劃報(bào)告
- 美容美發(fā)店經(jīng)營(yíng)策略手冊(cè)
- 網(wǎng)絡(luò)覆蓋優(yōu)化合作協(xié)議
- 網(wǎng)絡(luò)直播平臺(tái)運(yùn)營(yíng)及管理服務(wù)合同
- 四川宜賓五糧液股份有限公司招聘筆試題庫2024
- 幼兒園優(yōu)質(zhì)課大班社會(huì)《民族朋友多》課件
- 幼兒園中班數(shù)學(xué)《認(rèn)識(shí)數(shù)字“7”》
- 【精選】主題班會(huì)教案小學(xué)《和同學(xué)友好相處》主題班會(huì)案例
- 本屆業(yè)委會(huì)任期工作報(bào)告
- 讀后續(xù)寫練習(xí)butterfly
- 鐵路周邊綠化施工方案
- 工程分包單位的質(zhì)量責(zé)任書
- 關(guān)于進(jìn)一步加強(qiáng)招商引資工作的幾點(diǎn)思考
- 通用公函模板
- 糧改飼工作匯報(bào)(共6篇)
評(píng)論
0/150
提交評(píng)論