人工智能和機(jī)器學(xué)習(xí)之回歸算法:支持向量回歸(SVR):SVR參數(shù)選擇與模型調(diào)優(yōu)_第1頁(yè)
人工智能和機(jī)器學(xué)習(xí)之回歸算法:支持向量回歸(SVR):SVR參數(shù)選擇與模型調(diào)優(yōu)_第2頁(yè)
人工智能和機(jī)器學(xué)習(xí)之回歸算法:支持向量回歸(SVR):SVR參數(shù)選擇與模型調(diào)優(yōu)_第3頁(yè)
人工智能和機(jī)器學(xué)習(xí)之回歸算法:支持向量回歸(SVR):SVR參數(shù)選擇與模型調(diào)優(yōu)_第4頁(yè)
人工智能和機(jī)器學(xué)習(xí)之回歸算法:支持向量回歸(SVR):SVR參數(shù)選擇與模型調(diào)優(yōu)_第5頁(yè)
已閱讀5頁(yè),還剩13頁(yè)未讀, 繼續(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í)之回歸算法:支持向量回歸(SVR):SVR參數(shù)選擇與模型調(diào)優(yōu)1人工智能和機(jī)器學(xué)習(xí)之回歸算法:支持向量回歸(SVR)1.1SVR簡(jiǎn)介與原理1.1.1支持向量回歸的基本概念支持向量回歸(SupportVectorRegression,SVR)是支持向量機(jī)(SupportVectorMachine,SVM)在回歸問題上的應(yīng)用。與分類問題不同,SVR的目標(biāo)是找到一個(gè)函數(shù),使得該函數(shù)與實(shí)際值之間的偏差在給定的容許范圍內(nèi)盡可能小。SVR通過最小化預(yù)測(cè)值與實(shí)際值之間的誤差來實(shí)現(xiàn)這一目標(biāo),同時(shí),它也試圖保持模型的復(fù)雜度盡可能低,以避免過擬合。1.1.2SVR與SVM的聯(lián)系與區(qū)別聯(lián)系:-SVR和SVM都基于相同的數(shù)學(xué)框架,即通過最大化決策邊界(在分類中)或最小化誤差(在回歸中)來構(gòu)建模型。-兩者都使用了核技巧(KernelTrick)來處理非線性問題,將數(shù)據(jù)從低維空間映射到高維空間,從而在高維空間中找到線性可分的超平面。區(qū)別:-SVM用于分類問題,而SVR用于回歸問題。-SVM的目標(biāo)是最大化分類邊界,而SVR的目標(biāo)是找到一個(gè)函數(shù),使得該函數(shù)與實(shí)際值之間的偏差在給定的容許范圍內(nèi)盡可能小。-SVM的損失函數(shù)是HingeLoss,而SVR的損失函數(shù)是Epsilon-InsensitiveLoss。1.1.3核函數(shù)在SVR中的應(yīng)用核函數(shù)在SVR中扮演著關(guān)鍵角色,它允許模型處理非線性關(guān)系。常見的核函數(shù)包括線性核、多項(xiàng)式核、高斯核(RBF核)和Sigmoid核。選擇合適的核函數(shù)對(duì)于模型的性能至關(guān)重要。1.1.3.1示例:使用RBF核的SVR假設(shè)我們有一組房?jī)r(jià)數(shù)據(jù),我們想要預(yù)測(cè)房?jī)r(jià)與房屋面積之間的關(guān)系。我們將使用Python的scikit-learn庫(kù)來實(shí)現(xiàn)SVR。importnumpyasnp

importmatplotlib.pyplotasplt

fromsklearn.svmimportSVR

fromsklearn.model_selectionimporttrain_test_split

fromsklearn.metricsimportmean_squared_error

#生成模擬數(shù)據(jù)

np.random.seed(0)

X=np.sort(5*np.random.rand(40,1),axis=0)

y=np.sin(X).ravel()

y[::5]+=3*(0.5-np.random.rand(8))

#劃分訓(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)建SVR模型,使用RBF核

svr=SVR(kernel='rbf',C=1e3,gamma=0.1)

#訓(xùn)練模型

svr.fit(X_train,y_train)

#預(yù)測(cè)

y_pred=svr.predict(X_test)

#計(jì)算MSE

mse=mean_squared_error(y_test,y_pred)

print(f"MeanSquaredError:{mse}")

#繪制結(jié)果

plt.scatter(X_test,y_test,color='black',label='Data')

plt.plot(X_test,y_pred,color='red',label='SVR')

plt.xlabel('X')

plt.ylabel('y')

plt.legend()

plt.show()在這個(gè)例子中,我們使用了RBF核函數(shù),并設(shè)置了C和gamma參數(shù)。C參數(shù)控制了模型的復(fù)雜度,gamma參數(shù)決定了核函數(shù)的寬度,影響模型的泛化能力。通過調(diào)整這些參數(shù),我們可以優(yōu)化模型的性能。1.2SVR參數(shù)選擇與模型調(diào)優(yōu)1.2.1參數(shù)選擇的重要性在SVR中,參數(shù)選擇對(duì)模型的性能有著直接的影響。主要參數(shù)包括C、epsilon和核函數(shù)的參數(shù)(如gamma)。C參數(shù)控制了模型的復(fù)雜度,epsilon定義了誤差的容許范圍,而核函數(shù)的參數(shù)則影響模型處理非線性關(guān)系的能力。1.2.2示例:使用GridSearchCV進(jìn)行參數(shù)調(diào)優(yōu)為了找到最優(yōu)的參數(shù)組合,我們可以使用scikit-learn中的GridSearchCV。下面是一個(gè)使用GridSearchCV來調(diào)優(yōu)SVR參數(shù)的例子。fromsklearn.model_selectionimportGridSearchCV

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

param_grid={

'C':[1e0,1e1,1e2,1e3],

'gamma':np.logspace(-2,2,5),

'epsilon':[0.1,0.2,0.3,0.4,0.5],

}

#創(chuàng)建SVR模型

svr=SVR(kernel='rbf')

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

grid_svr=GridSearchCV(svr,param_grid,cv=5,scoring='neg_mean_squared_error')

#訓(xùn)練模型

grid_svr.fit(X_train,y_train)

#輸出最優(yōu)參數(shù)

print("Bestparametersfound:",grid_svr.best_params_)

#使用最優(yōu)參數(shù)預(yù)測(cè)

y_pred=grid_svr.predict(X_test)

#計(jì)算MSE

mse=mean_squared_error(y_test,y_pred)

print(f"MeanSquaredErrorwithbestparameters:{mse}")在這個(gè)例子中,我們定義了一個(gè)參數(shù)網(wǎng)格,包括C、gamma和epsilon的不同值。然后,我們使用GridSearchCV來遍歷這些參數(shù)組合,找到使MSE最小的參數(shù)組合。通過這種方式,我們可以確保模型在給定數(shù)據(jù)集上的性能最優(yōu)。1.2.3總結(jié)支持向量回歸(SVR)是一種強(qiáng)大的回歸算法,它基于支持向量機(jī)的數(shù)學(xué)框架,能夠處理線性和非線性問題。通過合理選擇和調(diào)優(yōu)參數(shù),我們可以構(gòu)建出性能優(yōu)異的SVR模型。在實(shí)際應(yīng)用中,使用如GridSearchCV這樣的工具來自動(dòng)尋找最優(yōu)參數(shù)組合,可以極大地提高模型的準(zhǔn)確性和泛化能力。2人工智能和機(jī)器學(xué)習(xí)之回歸算法:支持向量回歸(SVR)參數(shù)詳解2.1C參數(shù)的解釋與影響在支持向量回歸(SVR)中,C參數(shù)是一個(gè)關(guān)鍵的正則化參數(shù),它控制了模型的復(fù)雜度和對(duì)異常值的容忍度。C參數(shù)越大,模型對(duì)訓(xùn)練數(shù)據(jù)的擬合程度越高,這意味著模型會(huì)更加復(fù)雜,對(duì)異常值的容忍度降低,可能會(huì)導(dǎo)致過擬合。反之,C參數(shù)越小,模型的復(fù)雜度降低,對(duì)異常值的容忍度增加,有助于防止過擬合,但可能會(huì)增加偏差。2.1.1示例代碼fromsklearn.svmimportSVR

fromsklearn.model_selectionimporttrain_test_split

fromsklearn.metricsimportmean_squared_error

importnumpyasnp

#生成模擬數(shù)據(jù)

np.random.seed(0)

X=np.sort(5*np.random.rand(40,1),axis=0)

y=np.sin(X).ravel()

y[::5]+=3*(0.5-np.random.rand(8))

#數(shù)據(jù)分割

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

#設(shè)置不同的C值

C_values=[0.1,1,10,100]

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

forCinC_values:

svr=SVR(kernel='rbf',C=C)

svr.fit(X_train,y_train)

y_pred=svr.predict(X_test)

mse=mean_squared_error(y_test,y_pred)

print(f"C={C},MeanSquaredError:{mse}")2.1.2解釋上述代碼中,我們使用了sklearn庫(kù)中的SVR類來訓(xùn)練模型。通過改變C參數(shù)的值,我們可以觀察到模型性能的變化。C值較低時(shí),模型的均方誤差(MSE)可能較高,但模型更簡(jiǎn)單,更不容易過擬合。隨著C值的增加,MSE降低,模型復(fù)雜度增加,但過擬合的風(fēng)險(xiǎn)也隨之增加。2.2epsilon參數(shù)的作用與選擇epsilon參數(shù)在SVR中定義了一個(gè)“不敏感帶”,即在預(yù)測(cè)值與真實(shí)值之間的差異小于epsilon時(shí),模型不會(huì)對(duì)這些差異進(jìn)行懲罰。這有助于模型忽略一些噪聲數(shù)據(jù),從而提高泛化能力。epsilon的值通常需要根據(jù)數(shù)據(jù)的特性來選擇,過小的epsilon值會(huì)使模型過于敏感,而過大的值則可能使模型過于簡(jiǎn)單,無法捕捉到數(shù)據(jù)中的細(xì)節(jié)。2.2.1示例代碼#使用不同的epsilon值

epsilon_values=[0.01,0.1,0.2,0.5]

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

forepsiloninepsilon_values:

svr=SVR(kernel='rbf',C=1,epsilon=epsilon)

svr.fit(X_train,y_train)

y_pred=svr.predict(X_test)

mse=mean_squared_error(y_test,y_pred)

print(f"epsilon={epsilon},MeanSquaredError:{mse}")2.2.2解釋通過調(diào)整epsilon參數(shù),我們可以觀察到模型對(duì)噪聲數(shù)據(jù)的容忍度變化。當(dāng)epsilon值較小時(shí),模型試圖更精確地?cái)M合數(shù)據(jù),這可能導(dǎo)致過擬合。隨著epsilon值的增加,模型開始忽略一些小的誤差,這有助于提高模型的泛化能力,但可能會(huì)犧牲一些精度。2.3核函數(shù)參數(shù)調(diào)整SVR使用核函數(shù)來處理非線性數(shù)據(jù)。最常用的核函數(shù)是徑向基函數(shù)(RBF),其參數(shù)gamma控制了核函數(shù)的寬度。gamma值越大,核函數(shù)的寬度越窄,模型對(duì)局部數(shù)據(jù)點(diǎn)的敏感度增加,可能會(huì)導(dǎo)致過擬合。gamma值越小,核函數(shù)的寬度越寬,模型的泛化能力增強(qiáng),但可能會(huì)忽略一些重要的局部特征。2.3.1示例代碼#使用不同的gamma值

gamma_values=[0.01,0.1,1,10]

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

forgammaingamma_values:

svr=SVR(kernel='rbf',C=1,epsilon=0.1,gamma=gamma)

svr.fit(X_train,y_train)

y_pred=svr.predict(X_test)

mse=mean_squared_error(y_test,y_pred)

print(f"gamma={gamma},MeanSquaredError:{mse}")2.3.2解釋在代碼示例中,我們通過改變gamma參數(shù)來調(diào)整RBF核函數(shù)的寬度。gamma值較低時(shí),模型傾向于捕捉數(shù)據(jù)的全局趨勢(shì),這有助于泛化。然而,當(dāng)gamma值較高時(shí),模型開始關(guān)注數(shù)據(jù)的局部細(xì)節(jié),這可能會(huì)導(dǎo)致模型在新數(shù)據(jù)上的表現(xiàn)不佳,即過擬合。2.4總結(jié)在支持向量回歸(SVR)中,參數(shù)的選擇對(duì)模型的性能有著直接的影響。C參數(shù)控制了模型的復(fù)雜度和對(duì)異常值的容忍度,epsilon參數(shù)定義了不敏感帶的寬度,而gamma參數(shù)則調(diào)整了核函數(shù)的寬度,影響模型對(duì)數(shù)據(jù)局部和全局特征的捕捉能力。通過調(diào)整這些參數(shù),我們可以優(yōu)化模型,使其在訓(xùn)練數(shù)據(jù)和測(cè)試數(shù)據(jù)上都能表現(xiàn)出良好的性能。3數(shù)據(jù)預(yù)處理與模型訓(xùn)練3.1數(shù)據(jù)標(biāo)準(zhǔn)化的重要性在支持向量回歸(SVR)中,數(shù)據(jù)標(biāo)準(zhǔn)化是一個(gè)關(guān)鍵步驟,因?yàn)樗梢源_保不同特征在相同尺度上,避免某些特征因數(shù)值范圍大而對(duì)模型產(chǎn)生過大的影響。SVR算法在計(jì)算時(shí),會(huì)考慮特征之間的距離,如果特征尺度差異大,那么距離計(jì)算將被主導(dǎo)特征所扭曲,導(dǎo)致模型性能下降。3.1.1示例代碼假設(shè)我們有一組數(shù)據(jù),其中包含兩個(gè)特征:年齡和收入,收入的數(shù)值范圍遠(yuǎn)大于年齡。我們使用Python的scikit-learn庫(kù)中的StandardScaler進(jìn)行數(shù)據(jù)標(biāo)準(zhǔn)化。importnumpyasnp

fromsklearn.preprocessingimportStandardScaler

fromsklearn.svmimportSVR

fromsklearn.model_selectionimporttrain_test_split

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

data=np.array([[25,50000],

[30,60000],

[35,70000],

[40,80000],

[45,90000]])

#假設(shè)目標(biāo)變量是年齡

target=data[:,0]

#特征是收入

features=data[:,1].reshape(-1,1)

#數(shù)據(jù)標(biāo)準(zhǔn)化

scaler=StandardScaler()

features_scaled=scaler.fit_transform(features)

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

X_train,X_test,y_train,y_test=train_test_split(features_scaled,target,test_size=0.2,random_state=42)

#創(chuàng)建SVR模型

svr=SVR(kernel='linear')

#訓(xùn)練模型

svr.fit(X_train,y_train)

#預(yù)測(cè)

predictions=svr.predict(X_test)

#輸出預(yù)測(cè)結(jié)果

print(predictions)3.1.2解釋在上述代碼中,我們首先創(chuàng)建了一個(gè)簡(jiǎn)單的數(shù)據(jù)集,其中包含年齡和收入兩個(gè)特征。然后,我們使用StandardScaler對(duì)收入特征進(jìn)行標(biāo)準(zhǔn)化,使其具有零均值和單位方差。接下來,我們使用train_test_split函數(shù)將數(shù)據(jù)集劃分為訓(xùn)練集和測(cè)試集。最后,我們創(chuàng)建一個(gè)線性核的SVR模型,訓(xùn)練模型,并對(duì)測(cè)試集進(jìn)行預(yù)測(cè)。3.2選擇合適的核函數(shù)核函數(shù)在SVR中扮演著重要角色,它決定了模型的復(fù)雜度和擬合能力。常見的核函數(shù)包括線性核、多項(xiàng)式核、高斯核(RBF)和Sigmoid核。選擇合適的核函數(shù)對(duì)于提高模型的預(yù)測(cè)精度至關(guān)重要。3.2.1示例代碼我們將使用scikit-learn庫(kù)中的SVR模型,嘗試使用不同的核函數(shù),并比較它們的性能。#使用不同的核函數(shù)訓(xùn)練SVR模型

kernels=['linear','poly','rbf','sigmoid']

forkernelinkernels:

svr=SVR(kernel=kernel)

svr.fit(X_train,y_train)

score=svr.score(X_test,y_test)

print(f"Kernel:{kernel},Score:{score}")3.2.2解釋在代碼中,我們定義了一個(gè)包含四種核函數(shù)的列表。然后,我們遍歷這個(gè)列表,對(duì)于每種核函數(shù),創(chuàng)建一個(gè)SVR模型,使用訓(xùn)練集進(jìn)行訓(xùn)練,并計(jì)算模型在測(cè)試集上的R23.3訓(xùn)練SVR模型的步驟訓(xùn)練SVR模型涉及以下步驟:數(shù)據(jù)預(yù)處理:包括數(shù)據(jù)清洗、缺失值處理和特征縮放。選擇核函數(shù):根據(jù)問題的性質(zhì)和數(shù)據(jù)的分布選擇合適的核函數(shù)。劃分?jǐn)?shù)據(jù)集:將數(shù)據(jù)集劃分為訓(xùn)練集和測(cè)試集。模型訓(xùn)練:使用訓(xùn)練集數(shù)據(jù)訓(xùn)練SVR模型。參數(shù)調(diào)優(yōu):通過交叉驗(yàn)證等方法調(diào)整模型參數(shù),如C(懲罰參數(shù))和gamma(核函數(shù)參數(shù))。模型評(píng)估:使用測(cè)試集評(píng)估模型的性能。3.3.1示例代碼我們將使用GridSearchCV進(jìn)行參數(shù)調(diào)優(yōu),以找到最佳的C和gamma值。fromsklearn.model_selectionimportGridSearchCV

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

param_grid={'C':[0.1,1,10,100],

'gamma':[1,0.1,0.01,0.001],

'kernel':['rbf']}

#創(chuàng)建SVR模型

svr=SVR()

#使用GridSearchCV進(jìn)行參數(shù)調(diào)優(yōu)

grid=GridSearchCV(svr,param_grid,refit=True,verbose=2)

grid.fit(X_train,y_train)

#輸出最佳參數(shù)

print("BestParameters:",grid.best_params_)

#使用最佳參數(shù)的模型進(jìn)行預(yù)測(cè)

best_svr=grid.best_estimator_

predictions=best_svr.predict(X_test)

#輸出預(yù)測(cè)結(jié)果

print(predictions)3.3.2解釋在代碼中,我們首先定義了一個(gè)參數(shù)網(wǎng)格,包括不同的C和gamma值。然后,我們創(chuàng)建一個(gè)SVR模型,并使用GridSearchCV進(jìn)行參數(shù)調(diào)優(yōu)。GridSearchCV會(huì)遍歷所有參數(shù)組合,使用交叉驗(yàn)證評(píng)估模型性能,并返回最佳參數(shù)組合。最后,我們使用這些最佳參數(shù)重新訓(xùn)練模型,并對(duì)測(cè)試集進(jìn)行預(yù)測(cè)。通過以上步驟,我們可以有效地訓(xùn)練一個(gè)SVR模型,并通過參數(shù)調(diào)優(yōu)提高其預(yù)測(cè)性能。4人工智能和機(jī)器學(xué)習(xí)之回歸算法:支持向量回歸(SVR):模型評(píng)估與調(diào)優(yōu)4.1評(píng)估回歸模型的常用指標(biāo)在評(píng)估支持向量回歸(SVR)模型的性能時(shí),我們通常使用以下幾種指標(biāo):均方誤差(MeanSquaredError,MSE):衡量預(yù)測(cè)值與真實(shí)值之間的平均平方差,值越小表示模型預(yù)測(cè)越準(zhǔn)確。均方根誤差(RootMeanSquaredError,RMSE):MSE的平方根,與MSE類似,但結(jié)果與原始數(shù)據(jù)的單位相同,更直觀。平均絕對(duì)誤差(MeanAbsoluteError,MAE):預(yù)測(cè)值與真實(shí)值之間的平均絕對(duì)差,值越小表示模型預(yù)測(cè)越準(zhǔn)確。R2分?jǐn)?shù)(R2Score):表示模型解釋了數(shù)據(jù)中多少變異,取值范圍在-∞到1之間,值越接近1表示模型擬合越好。4.1.1示例代碼假設(shè)我們使用了sklearn庫(kù)中的SVR模型,并有訓(xùn)練集和測(cè)試集的數(shù)據(jù)X_train,y_train,X_test,y_test。fromsklearn.svmimportSVR

fromsklearn.metricsimportmean_squared_error,mean_absolute_error,r2_score

#創(chuàng)建SVR模型

svr=SVR(kernel='rbf',C=100,gamma=0.1,epsilon=.1)

#訓(xùn)練模型

svr.fit(X_train,y_train)

#預(yù)測(cè)

y_pred=svr.predict(X_test)

#計(jì)算評(píng)估指標(biāo)

mse=mean_squared_error(y_test,y_pred)

mae=mean_absolute_error(y_test,y_pred)

r2=r2_score(y_test,y_pred)

print(f'MSE:{mse}')

print(f'MAE:{mae}')

print(f'R2Score:{r2}')4.2使用交叉驗(yàn)證進(jìn)行模型調(diào)優(yōu)交叉驗(yàn)證是一種評(píng)估模型性能的方法,通過將數(shù)據(jù)集分為幾個(gè)子集,輪流將其中一個(gè)子集作為測(cè)試集,其余子集作為訓(xùn)練集,可以得到模型在不同數(shù)據(jù)劃分下的性能,從而更準(zhǔn)確地評(píng)估模型的泛化能力。4.2.1示例代碼使用sklearn庫(kù)中的cross_val_score函數(shù)進(jìn)行交叉驗(yàn)證。fromsklearn.model_selectionimportcross_val_score

#創(chuàng)建SVR模型

svr=SVR(kernel='rbf',C=100,gamma=0.1,epsilon=.1)

#使用交叉驗(yàn)證計(jì)算R2分?jǐn)?shù)

scores=cross_val_score(svr,X_train,y_train,cv=5,scoring='r2')

print(f'Cross-ValidationR2Scores:{scores}')

print(f'AverageR2Score:{scores.mean()}')4.3網(wǎng)格搜索優(yōu)化SVR參數(shù)網(wǎng)格搜索是一種參數(shù)調(diào)優(yōu)方法,通過在預(yù)定義的參數(shù)網(wǎng)格上進(jìn)行搜索,找到最佳的參數(shù)組合。sklearn庫(kù)中的GridSearchCV可以實(shí)現(xiàn)這一功能。4.3.1示例代碼定義參數(shù)網(wǎng)格并使用GridSearchCV進(jìn)行搜索。fromsklearn.model_selectionimportGridSearchCV

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

param_grid={

'C':[1,10,100],

'gamma':[0.001,0.01,0.1],

'kernel':['rbf','linear']

}

#創(chuàng)建SVR模型

svr=SVR()

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

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

#搜索最佳參數(shù)

grid_search.fit(X_train,y_train)

#輸出最佳參數(shù)

print(f'BestParameters:{grid_search.best_params_}')4.3.2數(shù)據(jù)樣例假設(shè)我們有以下數(shù)據(jù)樣例:#生成示例數(shù)據(jù)

importnumpyasnp

X=np.sort(5*np.random.rand(40,1),axis=0)

y=np.sin(X).ravel()

#添加噪聲

y[::5]+=3*(0.5-np.random.rand(8))在上述代碼中,我們生成了一個(gè)包含40個(gè)樣本的單特征數(shù)據(jù)集X,以及相應(yīng)的標(biāo)簽y。y是X的正弦函數(shù)加上一些隨機(jī)噪聲,用于模擬真實(shí)世界中的數(shù)據(jù)不完美性。4.3.3代碼解釋在每個(gè)示例代碼中,我們首先導(dǎo)入了必要的庫(kù),然后創(chuàng)建了SVR模型。在評(píng)估模型性能時(shí),我們使用了mean_squared_error,mean_absolute_error,和r2_score函數(shù)來計(jì)算MSE,MAE,和R2分?jǐn)?shù)。在進(jìn)行交叉驗(yàn)證時(shí),我們使用了cross_val_score函數(shù),并指定了交叉驗(yàn)證的次數(shù)(cv參數(shù))。在網(wǎng)格搜索中,我們定義了一個(gè)參數(shù)網(wǎng)格param_grid,并使用GridSearchCV對(duì)象來搜索最佳參數(shù)組合。通過這些步驟,我們可以有效地評(píng)估和調(diào)優(yōu)SVR模型,確保其在未知數(shù)據(jù)上的表現(xiàn)盡可能好。5實(shí)戰(zhàn)案例分析5.1房?jī)r(jià)預(yù)測(cè)的SVR應(yīng)用在房?jī)r(jià)預(yù)測(cè)中,支持向量回歸(SVR)是一種強(qiáng)大的機(jī)器學(xué)習(xí)算法,它基于支持向量機(jī)(SVM)的原理,但用于回歸問題。SVR試圖找到一個(gè)函數(shù),該函數(shù)能夠盡可能準(zhǔn)確地預(yù)測(cè)房?jī)r(jià),同時(shí)最小化預(yù)測(cè)誤差。5.1.1數(shù)據(jù)準(zhǔn)備假設(shè)我們有如下數(shù)據(jù)集,包含房屋的特征(如面積、臥室數(shù)量等)和對(duì)應(yīng)的價(jià)格:Area(m^2)BedroomsAge(years)Price(USD)1203203500001504545000080215200000…………5.1.2參數(shù)選擇與調(diào)優(yōu)在SVR中,關(guān)鍵參數(shù)包括C(懲罰參數(shù))、epsilon(誤差范圍)和kernel(核函數(shù))。這些參數(shù)的選擇直接影響模型的性能和泛化能力。5.1.2.1示例代碼importpandasaspd

fromsklearn.model_selectionimporttrain_test_split

fromsklearn.preprocessingimportStandardScaler

fromsklearn.svmimportSVR

fromsklearn.metricsimportmean_squared_error

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

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

X=data[['Area','Bedrooms','Age']]

y=data['Price']

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

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

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

scaler=StandardScaler()

X_train=scaler.fit_transform(X_train)

X_test=scaler.transform(X_test)

#創(chuàng)建SVR模型

svr=SVR(kernel='rbf',C=100,epsilon=0.1)

#訓(xùn)練模型

svr.fit(X_train,y_train)

#預(yù)測(cè)

y_pred=svr.predict(X_test)

#評(píng)估模型

mse=mean_squared_error(y_test,y_pred)

print(f'MeanSquaredError:{mse}')5.1.3調(diào)優(yōu)策略網(wǎng)格搜索:使用GridSearchCV來遍歷不同的參數(shù)組合,找到最佳參數(shù)。交叉驗(yàn)證:確保模型在不同數(shù)據(jù)子集上的性能穩(wěn)定。5.2股票價(jià)格預(yù)測(cè)的SVR模型股票價(jià)格預(yù)測(cè)是金融領(lǐng)域的一個(gè)重要應(yīng)用,SVR可以用來預(yù)測(cè)股票的未來價(jià)格。由于股票價(jià)格的波動(dòng)性,選擇合適的參數(shù)尤為重要。5.2.1數(shù)據(jù)準(zhǔn)備股票數(shù)據(jù)通常包括日期、開盤價(jià)、收盤價(jià)、最高價(jià)、最低價(jià)等。我們可能使用過去幾天的收盤價(jià)來預(yù)測(cè)未來的收盤價(jià)。5.2.2參數(shù)選擇與調(diào)優(yōu)在股票價(jià)格預(yù)測(cè)中,由于數(shù)據(jù)的非線性和復(fù)雜性,選擇kernel參數(shù)尤為重要,rbf或poly核可能更適用。5.2.2.1示例代碼importnumpyasnp

importpandasaspd

fromsklearn.svmimportSVR

fromsklearn.model_selectionimportGridSearchCV

fromsklearn.metricsimportmean_squared_error

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

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

data['Date']=pd.to_datetime(data['Date'])

data.set_index('Date',inplace=True)

prices=data['Close'].values

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

defcreate_dataset(dataset,look_back=1):

dataX,dataY=[],[]

foriinrange(len(dataset)-look_back-1):

a=dataset[i:(i+look_back),0]

dataX.append(a)

dataY.append(dataset[i+look_back,0])

returnnp.array(dataX),np.array(dataY)

look_back=10

X,y=create_dataset(prices,look_back)

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

X_train,X_test=X[:int(X.shape[0]*0.8)],X[int(X.shape[0]*0.8):]

y_train,y_test=y[:int(y.shape[0]*0.8)],y[int(y.shape[0]*0.8):]

#調(diào)參

param_grid={'C':[0.1,1,10,100],'epsilon':[0.001,0.01,0.1],'kernel':['rbf','poly']}

svr=SVR()

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

grid_search.fit(X_train,y_train)

#最佳參數(shù)

best_params=grid_search.best_params_

print(f'BestParameters:{best_params}')

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

best_svr=SVR(kernel=best_params['kernel'],C=best_params['C'],epsilon=best_params['epsilon'])

best_svr.fit(X_train,y_train)

#預(yù)測(cè)

y_pred=best_svr.predict(X_test)

#評(píng)估模型

mse=mean_squared_error(y_test,y_pred)

print(f'MeanSquaredError:{mse}')5.2.3結(jié)論在實(shí)際應(yīng)用中,通過仔細(xì)選擇和調(diào)優(yōu)SVR的參數(shù),可以顯著提高模型的預(yù)測(cè)性能。無論是房?jī)r(jià)預(yù)測(cè)還是股票價(jià)格預(yù)測(cè),正確的參數(shù)設(shè)置都是關(guān)鍵。使用網(wǎng)格搜索和交叉驗(yàn)證可以幫助我們找到最佳參數(shù)組合,從而優(yōu)化模型。6高級(jí)主題與技巧6.1SVR的非線性問題處理支持向量回歸(SVR)在處理非線性問題時(shí),其核心在于使用核函數(shù)(kernelfunction)將數(shù)據(jù)從低維空間映射到高維空間,從而在高維空間中找到一個(gè)超平面,使得回歸問題變得線性或接近線性。常用的核函數(shù)包括線性核、多項(xiàng)式核、高斯核(徑向基函數(shù)核,RBF)和Sigmoid核等。6.1.1示例:使用RBF核函數(shù)處理非線性數(shù)據(jù)假設(shè)我們有一組非線性分布的數(shù)據(jù),我們將使用SVR和RBF核函數(shù)來擬合這些數(shù)據(jù)。importnumpyasnp

importmatplotlib.pyplotasplt

fromsklearn.svmimportSVR

fromsklearn.pipelineimportmake_pipeline

fromsklearn.preprocessingimportStandardScaler

#生成非線性數(shù)據(jù)

np.random.seed(0)

X=np.sort(5*np.random.rand(40,1),axis=0)

y=np.sin(X).ravel()

y[::5]+=3*(0.5-np.random.rand(8))

#使用RBF核函數(shù)的SVR

svr_rbf=make_pipeline(StandardScaler(),SVR(kernel='rbf',C=1e3,gamma=0.1))

svr_rbf.fit(X,y)

#預(yù)測(cè)

X_plot=np.linspace(0,5,100)[:,None]

y_rbf=svr_rbf.predict(X_plot)

#繪制結(jié)果

plt.scatter(X,y,color='k',label='data')

plt.hold('on')

plt.plot(X_plot,y_rbf,color='g',label='RBFmodel')

plt.xlabel('data')

plt.ylabel('target')

plt.title('SupportVectorRegression')

plt.legend()

plt.show()在這個(gè)例子中,我們首先生成了一組非線性數(shù)據(jù),然后使用RBF核函數(shù)的SVR模型進(jìn)行擬合。通過調(diào)整C和gamma參數(shù),我們可以控制模型的復(fù)雜度和對(duì)噪聲的敏感度。C參數(shù)控制了模型的懲罰系數(shù),gamma參數(shù)決定了核函數(shù)的寬度,從而影響模型的非線性程度。6.2特征選擇對(duì)SVR性能的影響特征選擇是機(jī)器學(xué)習(xí)中一個(gè)重要的步驟,它可以幫助模型減少過擬合的風(fēng)險(xiǎn),提高預(yù)測(cè)性能。在SVR中,特征選擇尤為重要,因?yàn)镾VR的計(jì)算復(fù)雜度與特征數(shù)量直接相關(guān)。過多的特征不僅會(huì)增加計(jì)算成本,還可能導(dǎo)致模型性能下降。6

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝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ù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 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)論