版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
人工智能和機(jī)器學(xué)習(xí)之回歸算法:支持向量回歸(SVR):回歸算法基礎(chǔ)理論1回歸算法概覽1.11回歸算法定義回歸算法是機(jī)器學(xué)習(xí)中用于預(yù)測(cè)連續(xù)值輸出的一類算法。在回歸問(wèn)題中,模型試圖學(xué)習(xí)輸入特征與輸出值之間的關(guān)系,以便對(duì)新的、未知的數(shù)據(jù)點(diǎn)進(jìn)行預(yù)測(cè)?;貧w算法可以用于各種場(chǎng)景,如預(yù)測(cè)房?jī)r(jià)、股票價(jià)格、銷售額等。1.22回歸算法類型1.2.1線性回歸線性回歸是最基本的回歸算法,它假設(shè)輸入特征與輸出值之間存在線性關(guān)系。模型通過(guò)找到最佳擬合直線來(lái)預(yù)測(cè)輸出值。示例代碼importnumpyasnp
fromsklearn.linear_modelimportLinearRegression
fromsklearn.model_selectionimporttrain_test_split
#生成示例數(shù)據(jù)
X=np.random.rand(100,1)
y=2+3*X+np.random.rand(100,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)建線性回歸模型
model=LinearRegression()
#訓(xùn)練模型
model.fit(X_train,y_train)
#預(yù)測(cè)
y_pred=model.predict(X_test)
#輸出模型參數(shù)
print("模型截距:",ercept_)
print("模型斜率:",model.coef_)1.2.2支持向量回歸(SVR)支持向量回歸是支持向量機(jī)(SVM)在回歸問(wèn)題中的應(yīng)用。它通過(guò)在高維空間中找到一個(gè)超平面,使得預(yù)測(cè)值與實(shí)際值之間的誤差最小化。SVR可以處理非線性關(guān)系,通過(guò)使用不同的核函數(shù)。示例代碼importnumpyasnp
fromsklearn.svmimportSVR
fromsklearn.model_selectionimporttrain_test_split
#生成示例數(shù)據(jù)
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模型
model=SVR(kernel='rbf',C=1e3,gamma=0.1)
#訓(xùn)練模型
model.fit(X_train,y_train)
#預(yù)測(cè)
y_pred=model.predict(X_test)
#輸出模型預(yù)測(cè)結(jié)果
print("預(yù)測(cè)結(jié)果:",y_pred)1.2.3決策樹(shù)回歸決策樹(shù)回歸通過(guò)構(gòu)建一棵樹(shù)來(lái)預(yù)測(cè)連續(xù)值。每個(gè)內(nèi)部節(jié)點(diǎn)表示一個(gè)特征上的測(cè)試,每個(gè)分支表示一個(gè)測(cè)試結(jié)果,每個(gè)葉節(jié)點(diǎn)表示一個(gè)預(yù)測(cè)值。示例代碼importnumpyasnp
fromsklearn.treeimportDecisionTreeRegressor
fromsklearn.model_selectionimporttrain_test_split
#生成示例數(shù)據(jù)
X=np.random.rand(100,1)
y=np.sin(2*np.pi*X).ravel()
#劃分訓(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)建決策樹(shù)回歸模型
model=DecisionTreeRegressor(random_state=42)
#訓(xùn)練模型
model.fit(X_train,y_train)
#預(yù)測(cè)
y_pred=model.predict(X_test)
#輸出模型預(yù)測(cè)結(jié)果
print("預(yù)測(cè)結(jié)果:",y_pred)1.2.4隨機(jī)森林回歸隨機(jī)森林回歸是決策樹(shù)回歸的集成學(xué)習(xí)方法。它通過(guò)構(gòu)建多個(gè)決策樹(shù)并取平均值來(lái)提高預(yù)測(cè)的準(zhǔn)確性和防止過(guò)擬合。示例代碼importnumpyasnp
fromsklearn.ensembleimportRandomForestRegressor
fromsklearn.model_selectionimporttrain_test_split
#生成示例數(shù)據(jù)
X=np.random.rand(100,1)
y=np.sin(2*np.pi*X).ravel()
#劃分訓(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ī)森林回歸模型
model=RandomForestRegressor(n_estimators=100,random_state=42)
#訓(xùn)練模型
model.fit(X_train,y_train)
#預(yù)測(cè)
y_pred=model.predict(X_test)
#輸出模型預(yù)測(cè)結(jié)果
print("預(yù)測(cè)結(jié)果:",y_pred)1.33評(píng)估回歸模型的指標(biāo)評(píng)估回歸模型的性能通常使用以下幾種指標(biāo):1.3.1均方誤差(MSE)均方誤差是預(yù)測(cè)值與實(shí)際值差的平方的平均值。MSE越小,模型的預(yù)測(cè)性能越好。示例代碼fromsklearn.metricsimportmean_squared_error
#計(jì)算MSE
mse=mean_squared_error(y_test,y_pred)
print("均方誤差:",mse)1.3.2均方根誤差(RMSE)均方根誤差是MSE的平方根,它以與預(yù)測(cè)值相同的單位來(lái)表示誤差。示例代碼fromsklearn.metricsimportmean_squared_error
#計(jì)算RMSE
rmse=np.sqrt(mean_squared_error(y_test,y_pred))
print("均方根誤差:",rmse)1.3.3平均絕對(duì)誤差(MAE)平均絕對(duì)誤差是預(yù)測(cè)值與實(shí)際值差的絕對(duì)值的平均值。MAE越小,模型的預(yù)測(cè)性能越好。示例代碼fromsklearn.metricsimportmean_absolute_error
#計(jì)算MAE
mae=mean_absolute_error(y_test,y_pred)
print("平均絕對(duì)誤差:",mae)1.3.4R2分?jǐn)?shù)R2分?jǐn)?shù)表示模型解釋了數(shù)據(jù)中多少變異。R2分?jǐn)?shù)越接近1,模型的預(yù)測(cè)性能越好。示例代碼fromsklearn.metricsimportr2_score
#計(jì)算R2分?jǐn)?shù)
r2=r2_score(y_test,y_pred)
print("R2分?jǐn)?shù):",r2)以上示例代碼展示了如何使用Python的scikit-learn庫(kù)來(lái)實(shí)現(xiàn)和評(píng)估不同的回歸算法。通過(guò)這些代碼,你可以看到如何生成數(shù)據(jù)、訓(xùn)練模型、進(jìn)行預(yù)測(cè)以及計(jì)算模型的評(píng)估指標(biāo)。這些指標(biāo)幫助我們理解模型的性能,并在不同的模型之間進(jìn)行比較。2支持向量機(jī)(SVM)基礎(chǔ)2.11SVM的基本原理支持向量機(jī)(SVM,SupportVectorMachine)是一種監(jiān)督學(xué)習(xí)模型,主要用于分類和回歸分析。SVM的基本思想是找到一個(gè)超平面,使得兩類樣本在該超平面兩側(cè)被盡可能清晰地分開(kāi),同時(shí)保證這個(gè)超平面與最近的樣本點(diǎn)之間的距離(即間隔)最大化。這種最大化間隔的策略有助于提高模型的泛化能力,減少過(guò)擬合的風(fēng)險(xiǎn)。2.1.1示例:線性可分SVM假設(shè)我們有以下數(shù)據(jù)集,其中包含兩類樣本點(diǎn),分別標(biāo)記為紅色和藍(lán)色:特征1特征2類別12紅色23紅色34紅色45紅色56紅色11藍(lán)色22藍(lán)色33藍(lán)色44藍(lán)色55藍(lán)色使用Python的scikit-learn庫(kù),我們可以訓(xùn)練一個(gè)SVM模型來(lái)分類這些數(shù)據(jù):importnumpyasnp
fromsklearnimportsvm
importmatplotlib.pyplotasplt
#數(shù)據(jù)集
X=np.array([[1,2],[2,3],[3,4],[4,5],[5,6],
[1,1],[2,2],[3,3],[4,4],[5,5]])
y=np.array([1,1,1,1,1,-1,-1,-1,-1,-1])
#創(chuàng)建SVM分類器
clf=svm.SVC(kernel='linear')
#訓(xùn)練模型
clf.fit(X,y)
#繪制決策邊界
w=clf.coef_[0]
a=-w[0]/w[1]
xx=np.linspace(0,6)
yy=a*xx-(ercept_[0])/w[1]
#繪制支持向量
b=clf.support_vectors_[0]
yy_down=a*xx+(b[1]-a*b[0])
b=clf.support_vectors_[-1]
yy_up=a*xx+(b[1]-a*b[0])
#繪制數(shù)據(jù)點(diǎn)和決策邊界
plt.plot(xx,yy,'k-')
plt.plot(xx,yy_down,'k--')
plt.plot(xx,yy_up,'k--')
plt.scatter(X[:,0],X[:,1],c=y,cmap=plt.cm.Paired)
plt.show()2.22最大間隔與支持向量在SVM中,最大間隔是指決策邊界與最近的樣本點(diǎn)之間的距離。這個(gè)距離越大,模型的泛化能力越強(qiáng)。支持向量是指那些距離決策邊界最近的樣本點(diǎn),它們對(duì)決策邊界的確定起著關(guān)鍵作用。在訓(xùn)練SVM模型時(shí),我們只關(guān)注這些支持向量,而忽略其他樣本點(diǎn),這使得SVM在處理高維數(shù)據(jù)時(shí)非常高效。2.2.1示例:支持向量的可視化繼續(xù)使用上述數(shù)據(jù)集,我們可以可視化支持向量:#繪制支持向量
plt.scatter(clf.support_vectors_[:,0],clf.support_vectors_[:,1],
s=80,facecolors='none',edgecolors='k')
plt.show()2.33核函數(shù)與非線性分類當(dāng)數(shù)據(jù)不是線性可分時(shí),SVM通過(guò)使用核函數(shù)將數(shù)據(jù)映射到更高維度的空間,使得在新的空間中數(shù)據(jù)變得線性可分。常見(jiàn)的核函數(shù)包括多項(xiàng)式核、高斯核(徑向基函數(shù)核,RBF)和Sigmoid核等。2.3.1示例:使用高斯核的SVM假設(shè)我們有以下非線性可分的數(shù)據(jù)集:特征1特征2類別11紅色22紅色12藍(lán)色21藍(lán)色我們可以使用高斯核(RBF)來(lái)訓(xùn)練SVM:#數(shù)據(jù)集
X=np.array([[1,1],[2,2],[1,2],[2,1]])
y=np.array([1,1,-1,-1])
#創(chuàng)建SVM分類器,使用高斯核
clf=svm.SVC(kernel='rbf')
#訓(xùn)練模型
clf.fit(X,y)
#繪制決策邊界
#由于高斯核在二維空間中可能產(chǎn)生非線性決策邊界,這里使用meshgrid生成網(wǎng)格點(diǎn)
xx,yy=np.meshgrid(np.linspace(0,3,50),
np.linspace(0,3,50))
Z=clf.decision_function(np.c_[xx.ravel(),yy.ravel()])
Z=Z.reshape(xx.shape)
#繪制決策邊界和數(shù)據(jù)點(diǎn)
plt.contourf(xx,yy,Z,cmap=plt.cm.Paired,alpha=0.8)
plt.scatter(X[:,0],X[:,1],c=y,cmap=plt.cm.Paired)
plt.show()通過(guò)上述代碼,我們可以看到即使在非線性可分的數(shù)據(jù)集上,SVM通過(guò)高斯核也能找到一個(gè)有效的決策邊界。3支持向量回歸(SVR)介紹3.11SVR的數(shù)學(xué)模型支持向量回歸(SupportVectorRegression,SVR)是支持向量機(jī)(SupportVectorMachine,SVM)在回歸問(wèn)題上的應(yīng)用。與分類問(wèn)題不同,SVR的目標(biāo)是找到一個(gè)函數(shù),使得該函數(shù)與實(shí)際值之間的偏差在給定的容許誤差范圍內(nèi)盡可能小。SVR的數(shù)學(xué)模型基于結(jié)構(gòu)風(fēng)險(xiǎn)最小化原則,通過(guò)引入ε-insensitivelossfunction來(lái)實(shí)現(xiàn)這一目標(biāo)。3.1.1ε-insensitivelossfunctionε-insensitivelossfunction允許模型在ε范圍內(nèi)存在誤差,而不會(huì)受到懲罰。這意味著,只有當(dāng)預(yù)測(cè)值與實(shí)際值的偏差超過(guò)ε時(shí),模型才會(huì)被計(jì)算損失。這一特性使得SVR能夠?qū)Ξ惓V稻哂懈鼜?qiáng)的魯棒性。3.1.2SVR的優(yōu)化目標(biāo)SVR的優(yōu)化目標(biāo)是找到一個(gè)超平面,使得在ε范圍內(nèi)的數(shù)據(jù)點(diǎn)盡可能多,同時(shí)保持模型的復(fù)雜度盡可能低。這一目標(biāo)通過(guò)最小化以下函數(shù)實(shí)現(xiàn):1其中,w是權(quán)重向量,w2是權(quán)重向量的范數(shù),用于控制模型復(fù)雜度;C是懲罰系數(shù),用于平衡模型復(fù)雜度和訓(xùn)練誤差;ξi和3.1.3示例代碼假設(shè)我們有一組數(shù)據(jù),我們使用Python的sklearn庫(kù)來(lái)實(shí)現(xiàn)SVR。importnumpyasnp
fromsklearn.svmimportSVR
fromsklearn.model_selectionimporttrain_test_split
importmatplotlib.pyplotasplt
#生成數(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))
#劃分?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)建SVR模型
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)
#繪制結(jié)果
plt.scatter(X_test,y_test,color='black',label='data')
plt.plot(X_test,y_pred,color='red',lw=3,label='SVR')
plt.xlabel('data')
plt.ylabel('target')
plt.legend()
plt.show()這段代碼首先生成了一組帶有噪聲的正弦波數(shù)據(jù),然后使用SVR模型進(jìn)行訓(xùn)練和預(yù)測(cè),并將預(yù)測(cè)結(jié)果與實(shí)際數(shù)據(jù)點(diǎn)一起繪制出來(lái),以直觀地展示SVR的性能。3.22SVR與SVM的聯(lián)系與區(qū)別3.2.1聯(lián)系SVR和SVM都基于Vapnik-Chervonenkis理論,使用了相同的核技巧和優(yōu)化方法。它們都試圖找到一個(gè)最優(yōu)的超平面,但SVR用于回歸問(wèn)題,而SVM用于分類問(wèn)題。3.2.2區(qū)別目標(biāo)函數(shù):SVM的目標(biāo)是最大化分類間隔,而SVR的目標(biāo)是找到一個(gè)函數(shù),使得該函數(shù)與實(shí)際值之間的偏差在給定的容許誤差范圍內(nèi)盡可能小。損失函數(shù):SVM使用的是hingeloss,而SVR使用的是ε-insensitiveloss。應(yīng)用領(lǐng)域:SVM主要用于分類問(wèn)題,而SVR主要用于回歸問(wèn)題。3.33SVR的損失函數(shù)與優(yōu)化目標(biāo)3.3.1損失函數(shù)SVR的損失函數(shù)是ε-insensitiveloss,它定義了預(yù)測(cè)值與實(shí)際值之間的偏差。只有當(dāng)預(yù)測(cè)值與實(shí)際值的偏差超過(guò)ε時(shí),損失函數(shù)才會(huì)計(jì)算損失。3.3.2優(yōu)化目標(biāo)SVR的優(yōu)化目標(biāo)是找到一個(gè)函數(shù),使得該函數(shù)與實(shí)際值之間的偏差在ε范圍內(nèi)盡可能多,同時(shí)保持模型的復(fù)雜度盡可能低。這一目標(biāo)通過(guò)最小化損失函數(shù)和模型復(fù)雜度的加權(quán)和來(lái)實(shí)現(xiàn)。3.3.3示例代碼在上一節(jié)的代碼示例中,我們已經(jīng)看到了如何使用SVR模型進(jìn)行訓(xùn)練和預(yù)測(cè)。這里,我們可以通過(guò)調(diào)整C和epsilon參數(shù),來(lái)觀察它們對(duì)模型性能的影響。#創(chuàng)建SVR模型,調(diào)整C和epsilon參數(shù)
svr1=SVR(kernel='rbf',C=1e3,gamma=0.1,epsilon=0.2)
svr2=SVR(kernel='rbf',C=1e3,gamma=0.1,epsilon=0.1)
#訓(xùn)練模型
svr1.fit(X_train,y_train)
svr2.fit(X_train,y_train)
#預(yù)測(cè)
y_pred1=svr1.predict(X_test)
y_pred2=svr2.predict(X_test)
#繪制結(jié)果
plt.scatter(X_test,y_test,color='black',label='data')
plt.plot(X_test,y_pred1,color='red',lw=3,label='SVR(epsilon=0.2)')
plt.plot(X_test,y_pred2,color='blue',lw=3,label='SVR(epsilon=0.1)')
plt.xlabel('data')
plt.ylabel('target')
plt.legend()
plt.show()通過(guò)調(diào)整epsilon參數(shù),我們可以觀察到,當(dāng)ε值增大時(shí),模型對(duì)數(shù)據(jù)的擬合程度降低,但對(duì)異常值的魯棒性增強(qiáng);當(dāng)ε值減小時(shí),模型對(duì)數(shù)據(jù)的擬合程度提高,但對(duì)異常值的魯棒性減弱。3.4SVR的核函數(shù)應(yīng)用3.4.11線性核函數(shù)線性核函數(shù)是最簡(jiǎn)單的核函數(shù)類型,它直接使用輸入特征的內(nèi)積作為核函數(shù)的輸出。在支持向量回歸(SVR)中,線性核函數(shù)可以被看作是特征空間與原始空間相同的情況下的核函數(shù)。這意味著,如果數(shù)據(jù)在原始空間中是線性可分的,或者我們希望模型保持簡(jiǎn)單,避免過(guò)擬合,線性核函數(shù)是一個(gè)很好的選擇。代碼示例#導(dǎo)入必要的庫(kù)
importnumpyasnp
fromsklearn.svmimportSVR
fromsklearn.model_selectionimporttrain_test_split
importmatplotlib.pyplotasplt
#創(chuàng)建數(shù)據(jù)集
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模型,使用線性核函數(shù)
svr_linear=SVR(kernel='linear',C=1e3)
svr_linear.fit(X_train,y_train)
#預(yù)測(cè)
y_pred=svr_linear.predict(X_test)
#繪制結(jié)果
plt.scatter(X_train,y_train,color='black',label='訓(xùn)練數(shù)據(jù)')
plt.scatter(X_test,y_test,color='red',label='測(cè)試數(shù)據(jù)')
plt.plot(X_test,y_pred,color='blue',label='預(yù)測(cè)結(jié)果')
plt.xlabel('數(shù)據(jù)')
plt.ylabel('目標(biāo)')
plt.legend()
plt.show()3.4.22高斯核函數(shù)高斯核函數(shù),也稱為徑向基函數(shù)(RBF),是SVR中最常用的核函數(shù)之一。它通過(guò)計(jì)算兩個(gè)向量之間的歐氏距離的指數(shù)函數(shù)來(lái)映射數(shù)據(jù)到高維空間,從而能夠處理非線性可分的數(shù)據(jù)。高斯核函數(shù)的參數(shù)gamma控制了數(shù)據(jù)點(diǎn)的影響范圍,gamma值越大,數(shù)據(jù)點(diǎn)的影響范圍越小,模型越容易過(guò)擬合。代碼示例#使用高斯核函數(shù)的SVR模型
svr_rbf=SVR(kernel='rbf',C=1e3,gamma=0.1)
svr_rbf.fit(X_train,y_train)
#預(yù)測(cè)
y_pred_rbf=svr_rbf.predict(X_test)
#繪制結(jié)果
plt.scatter(X_train,y_train,color='black',label='訓(xùn)練數(shù)據(jù)')
plt.scatter(X_test,y_test,color='red',label='測(cè)試數(shù)據(jù)')
plt.plot(X_test,y_pred_rbf,color='green',label='高斯核函數(shù)預(yù)測(cè)結(jié)果')
plt.xlabel('數(shù)據(jù)')
plt.ylabel('目標(biāo)')
plt.legend()
plt.show()3.4.33多項(xiàng)式核函數(shù)多項(xiàng)式核函數(shù)通過(guò)計(jì)算輸入向量的內(nèi)積的多項(xiàng)式次方來(lái)映射數(shù)據(jù)到更高維的空間。這使得模型能夠捕捉到數(shù)據(jù)中的復(fù)雜關(guān)系,但同時(shí)也增加了模型的復(fù)雜度,可能導(dǎo)致過(guò)擬合。多項(xiàng)式核函數(shù)的參數(shù)degree決定了多項(xiàng)式的次數(shù),gamma和coef0則分別控制了內(nèi)積的權(quán)重和常數(shù)項(xiàng)。代碼示例#使用多項(xiàng)式核函數(shù)的SVR模型
svr_poly=SVR(kernel='poly',C=1e3,degree=2)
svr_poly.fit(X_train,y_train)
#預(yù)測(cè)
y_pred_poly=svr_poly.predict(X_test)
#繪制結(jié)果
plt.scatter(X_train,y_train,color='black',label='訓(xùn)練數(shù)據(jù)')
plt.scatter(X_test,y_test,color='red',label='測(cè)試數(shù)據(jù)')
plt.plot(X_test,y_pred_poly,color='orange',label='多項(xiàng)式核函數(shù)預(yù)測(cè)結(jié)果')
plt.xlabel('數(shù)據(jù)')
plt.ylabel('目標(biāo)')
plt.legend()
plt.show()通過(guò)上述代碼示例,我們可以看到不同核函數(shù)對(duì)SVR模型的影響。線性核函數(shù)適用于數(shù)據(jù)線性可分的情況,高斯核函數(shù)能夠處理非線性關(guān)系,而多項(xiàng)式核函數(shù)則在數(shù)據(jù)具有復(fù)雜結(jié)構(gòu)時(shí)提供更多的靈活性。選擇合適的核函數(shù)對(duì)于構(gòu)建有效的SVR模型至關(guān)重要。4SVR的參數(shù)調(diào)優(yōu)4.11C參數(shù)的選擇在支持向量回歸(SVR)中,C參數(shù)控制了模型的復(fù)雜度與過(guò)擬合的風(fēng)險(xiǎn)。它相當(dāng)于軟間隔的懲罰系數(shù),決定了模型對(duì)偏離ε-insensitive區(qū)域的容忍度。C值越大,模型對(duì)訓(xùn)練數(shù)據(jù)的誤差越敏感,可能會(huì)導(dǎo)致過(guò)擬合;C值越小,模型對(duì)訓(xùn)練數(shù)據(jù)的誤差容忍度越高,可能會(huì)導(dǎo)致欠擬合。4.1.1示例代碼fromsklearn.svmimportSVR
fromsklearn.model_selectionimportGridSearchCV
fromsklearn.datasetsimportmake_regression
importnumpyasnp
#生成回歸數(shù)據(jù)
X,y=make_regression(n_samples=100,n_features=1,noise=0.1)
#創(chuàng)建SVR模型
svr=SVR(kernel='rbf')
#定義參數(shù)網(wǎng)格
param_grid={'C':[0.1,1,10,100],'gamma':[1,0.1,0.01,0.001]}
#使用GridSearchCV進(jìn)行參數(shù)調(diào)優(yōu)
grid=GridSearchCV(svr,param_grid,cv=5)
grid.fit(X,y)
#輸出最佳參數(shù)
print("Bestparametersfound:",grid.best_params_)4.1.2解釋上述代碼中,我們使用GridSearchCV來(lái)尋找最佳的C和gamma參數(shù)。C參數(shù)的值在[0.1,1,10,100]中選擇,gamma參數(shù)在[1,0.1,0.01,0.001]中選擇。通過(guò)交叉驗(yàn)證,GridSearchCV能夠找到使模型性能最佳的參數(shù)組合。4.22ε參數(shù)的理解與設(shè)置ε參數(shù)定義了ε-insensitive區(qū)域的寬度,即模型預(yù)測(cè)值與真實(shí)值之間的誤差在ε范圍內(nèi)時(shí),模型不會(huì)受到懲罰。這有助于減少模型的復(fù)雜度,避免過(guò)擬合。ε值的選擇依賴于數(shù)據(jù)的分布和問(wèn)題的特性,通常需要通過(guò)實(shí)驗(yàn)來(lái)確定。4.2.1示例代碼#創(chuàng)建SVR模型,設(shè)置ε參數(shù)
svr=SVR(kernel='rbf',epsilon=0.2)
#定義參數(shù)網(wǎng)格,包括ε參數(shù)
param_grid={'C':[0.1,1,10,100],'gamma':[1,0.1,0.01,0.001],'epsilon':[0.1,0.2,0.3]}
#使用GridSearchCV進(jìn)行參數(shù)調(diào)優(yōu)
grid=GridSearchCV(svr,param_grid,cv=5)
grid.fit(X,y)
#輸出最佳參數(shù)
print("Bestparametersfound:",grid.best_params_)4.2.2解釋在本例中,我們?cè)黾恿薳psilon參數(shù)到param_grid中,其值在[0.1,0.2,0.3]中選擇。通過(guò)GridSearchCV,我們可以找到最佳的C、gamma和epsilon參數(shù)組合,以優(yōu)化模型的預(yù)測(cè)性能。4.33核函數(shù)參數(shù)的調(diào)整SVR中的核函數(shù)參數(shù),如gamma,對(duì)于模型的性能至關(guān)重要。gamma參數(shù)決定了RBF核的寬度,影響著模型的復(fù)雜度和泛化能力。gamma值越大,模型越復(fù)雜,可能過(guò)擬合;gamma值越小,模型越簡(jiǎn)單,可能欠擬合。4.3.1示例代碼#創(chuàng)建SVR模型,使用RBF核
svr=SVR(kernel='rbf')
#定義參數(shù)網(wǎng)格,專注于γ參數(shù)
param_grid={'gamma':[1,0.1,0.01,0.001]}
#使用GridSearchCV進(jìn)行參數(shù)調(diào)優(yōu)
grid=GridSearchCV(svr,param_grid,cv=5)
grid.fit(X,y)
#輸出最佳參數(shù)
print("Bestgammafound:",grid.best_params_['gamma'])4.3.2解釋這段代碼展示了如何僅針對(duì)gamma參數(shù)進(jìn)行調(diào)優(yōu)。通過(guò)GridSearchCV,我們可以在不同的gamma值中尋找最佳值,以優(yōu)化SVR模型的核函數(shù)性能,從而提高模型的預(yù)測(cè)準(zhǔn)確性。通過(guò)上述三個(gè)部分的參數(shù)調(diào)優(yōu),我們可以更精細(xì)地控制SVR模型的性能,確保其在處理回歸問(wèn)題時(shí)既不過(guò)擬合也不欠擬合,達(dá)到最佳的預(yù)測(cè)效果。5SVR在實(shí)際問(wèn)題中的應(yīng)用5.11數(shù)據(jù)預(yù)處理數(shù)據(jù)預(yù)處理是機(jī)器學(xué)習(xí)項(xiàng)目中至關(guān)重要的一步,它直接影響模型的性能和預(yù)測(cè)準(zhǔn)確性。在支持向量回歸(SVR)中,數(shù)據(jù)預(yù)處理尤為重要,因?yàn)镾VR對(duì)輸入數(shù)據(jù)的尺度敏感。以下是一些關(guān)鍵的數(shù)據(jù)預(yù)處理步驟:5.1.1標(biāo)準(zhǔn)化數(shù)據(jù)標(biāo)準(zhǔn)化(或歸一化)數(shù)據(jù)可以確保所有特征在相同的尺度上,這對(duì)于SVR的性能至關(guān)重要。我們可以使用StandardScaler或MinMaxScaler來(lái)實(shí)現(xiàn)這一目標(biāo)。fromsklearn.preprocessingimportStandardScaler
fromsklearn.preprocessingimportMinMaxScaler
importnumpyasnp
#示例數(shù)據(jù)
data=np.array([[1,2],[3,4],[5,6],[7,8]])
#使用StandardScaler
scaler=StandardScaler()
data_scaled=scaler.fit_transform(data)
#使用MinMaxScaler
scaler=MinMaxScaler()
data_normalized=scaler.fit_transform(data)5.1.2處理缺失值數(shù)據(jù)中可能包含缺失值,這些值需要被處理,否則可能影響模型的訓(xùn)練。常見(jiàn)的處理方法包括刪除含有缺失值的記錄或使用插值法填充缺失值。importpandasaspd
#示例數(shù)據(jù)
data=pd.DataFrame({'A':[1,2,np.nan,4],'B':[5,np.nan,7,8]})
#刪除含有缺失值的行
data_cleaned=data.dropna()
#使用平均值填充缺失值
data_filled=data.fillna(data.mean())5.1.3特征選擇并非所有特征都對(duì)預(yù)測(cè)結(jié)果有貢獻(xiàn),選擇與目標(biāo)變量最相關(guān)的特征可以提高模型的效率和準(zhǔn)確性。fromsklearn.feature_selectionimportSelectKBest
fromsklearn.feature_selectionimportf_regression
#示例數(shù)據(jù)
X=np.array([[1,2,3],[4,5,6],[7,8,9]])
y=np.array([1,2,3])
#選擇與目標(biāo)變量最相關(guān)的前兩個(gè)特征
selector=SelectKBest(score_func=f_regression,k=2)
X_new=selector.fit_transform(X,y)5.22模型訓(xùn)練與驗(yàn)證在數(shù)據(jù)預(yù)處理完成后,我們可以開(kāi)始訓(xùn)練SVR模型。選擇合適的核函數(shù)和調(diào)整超參數(shù)是關(guān)鍵步驟。模型訓(xùn)練后,通過(guò)交叉驗(yàn)證評(píng)估模型的性能。5.2.1訓(xùn)練模型fromsklearn.svmimportSVR
fromsklearn.model_selectionimporttrain_test_split
#示例數(shù)據(jù)
X=np.array([[1,2],[3,4],[5,6],[7,8]])
y=np.array([2,4,6,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模型
svr=SVR(kernel='rbf',C=1,gamma='scale')
#訓(xùn)練模型
svr.fit(X_train,y_train)5.2.2交叉驗(yàn)證fromsklearn.model_selectionimportcross_val_score
#使用交叉驗(yàn)證評(píng)估模型
scores=cross_val_score(svr,X,y,cv=5)
print("Cross-validationscores:",scores)5.33案例分析:房?jī)r(jià)預(yù)測(cè)房?jī)r(jià)預(yù)測(cè)是一個(gè)典型的支持向量回歸應(yīng)用案例。我們將使用波士頓房?jī)r(jià)數(shù)據(jù)集來(lái)演示如何使用SVR預(yù)測(cè)房?jī)r(jià)。5.3.1加載數(shù)據(jù)fromsklearn.datasetsimportload_boston
#加載波士頓房?jī)r(jià)數(shù)據(jù)集
boston=load_boston()
X=boston.data
y=boston.target5.3.2數(shù)據(jù)預(yù)處理fromsklearn.preprocessingimportStandardScaler
#標(biāo)準(zhǔn)化數(shù)據(jù)
scaler=StandardScaler()
X_scaled=scaler.fit_transform(X)5.3.3訓(xùn)練模型fromsklearn.svmimportSVR
fromsklearn.model_selectionimporttrain_test_split
#劃分訓(xùn)練集和測(cè)試集
X_train,X_test,y_train,y_test=train_test_split(X_scaled,y,test_size=0.2,random_state=42)
#創(chuàng)建SVR模型
svr=SVR(kernel='linear',C=1)
#訓(xùn)練模型
svr.fit(X_train,y_train)5.3.4預(yù)測(cè)與評(píng)估fromsklearn.metricsimportmean_squared_error
#預(yù)測(cè)房?jī)r(jià)
y_pred=svr.predict(X_test)
#計(jì)算均方誤差
mse=mean_squared_error(y_test,y_pred)
print("MeanSquaredError:",mse)通過(guò)以上步驟,我們不僅預(yù)處理了數(shù)據(jù),還訓(xùn)練了一個(gè)SVR模型,并使用交叉驗(yàn)證和均方誤差來(lái)評(píng)估模型的性能。在實(shí)際應(yīng)用中,可能需要進(jìn)一步調(diào)整模型參數(shù)以優(yōu)化預(yù)測(cè)結(jié)果。5.4SVR的優(yōu)缺點(diǎn)與適用場(chǎng)景5.4.11SVR的優(yōu)點(diǎn)支持向量回歸(SupportVectorRegression,SVR)作為支持向量機(jī)(SupportVectorMachine,SVM)在回歸問(wèn)題上的應(yīng)用,擁有以下顯著優(yōu)點(diǎn):魯棒性:SVR對(duì)異常值和噪聲數(shù)據(jù)具有較強(qiáng)的魯棒性,通過(guò)設(shè)置損失函數(shù)的邊界參數(shù)(epsilon),可以忽略預(yù)測(cè)值與真實(shí)值之間的微小差異,從而減少異常值對(duì)模型的影響。非線性處理能力:通過(guò)使用核技巧(KernelTrick),SVR能夠處理非線性回歸問(wèn)題,即使數(shù)據(jù)在高維空間中不是線性可分的,SVR也能找到一個(gè)合適的超平面進(jìn)行預(yù)測(cè)。小樣本有效性:SVR在小樣本數(shù)據(jù)集上表現(xiàn)良好,這得益于其基于結(jié)構(gòu)風(fēng)險(xiǎn)最小化(StructuralRiskMinimization,SRM)的理論,而不是經(jīng)驗(yàn)風(fēng)險(xiǎn)最小化(EmpiricalRiskMinimization,ERM)。泛化能力:SVR通過(guò)最大化邊界(Margin)來(lái)提高模型的泛化能力,即使在訓(xùn)練數(shù)據(jù)有限的情況下,也能保持較好的預(yù)測(cè)性能。5.4.22SVR的缺點(diǎn)盡管SVR具有上述優(yōu)點(diǎn),但在實(shí)際應(yīng)用中也存在一些局限性:計(jì)算復(fù)雜度:SVR的訓(xùn)練時(shí)間隨著數(shù)據(jù)量的增加而顯著增加,對(duì)于大規(guī)模數(shù)據(jù)集,計(jì)算成本可能變得非常高。參數(shù)選擇:SVR的性能高度依賴于參數(shù)的選擇,包括懲罰參數(shù)(C)、核函數(shù)(Kernel)和epsilon值。不恰當(dāng)?shù)膮?shù)設(shè)置可能導(dǎo)致過(guò)擬合或欠擬合。解釋性:相比于一些線性模型,SVR的模型解釋性較差,尤其是當(dāng)使用復(fù)雜的核函數(shù)時(shí),模型的內(nèi)部工作原理可能難以直觀理解。多輸出問(wèn)題:SVR在處理多輸出回歸問(wèn)題時(shí)不如一些其他回歸算法直觀和有效。5.4.33SVR適用的場(chǎng)景分析SVR適用于以下場(chǎng)景:非線性關(guān)系預(yù)測(cè):當(dāng)數(shù)據(jù)間存在復(fù)雜的非線性關(guān)系時(shí),SVR通過(guò)核技巧能夠捕捉這些關(guān)系,提供準(zhǔn)確的預(yù)測(cè)。小樣本數(shù)據(jù)集:在樣本數(shù)量有限的情況下,SVR能夠有效利用每個(gè)樣本的信息,構(gòu)建具有較好泛化能力的模型。高維數(shù)據(jù):SVR在處理高維數(shù)據(jù)時(shí)表現(xiàn)良好,即使特征數(shù)量遠(yuǎn)大于樣本數(shù)量,也能保持模型的穩(wěn)定性和預(yù)測(cè)精度。需要魯棒性預(yù)測(cè):在數(shù)據(jù)中存在異常值或噪聲的情況下,SVR能夠通過(guò)調(diào)整epsilon值,減少這些異常數(shù)據(jù)對(duì)模型的影響。示例:使用Python的Scikit-learn庫(kù)進(jìn)行SVR預(yù)測(cè)#導(dǎo)入必要的庫(kù)
importnumpyasnp
fromsklearn.svmimportSVR
fromsklearn.model_selectionimporttrain_test_split
fromsklearn.metricsimportmean_squared_error
#創(chuàng)建示例數(shù)據(jù)
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))#添加一些噪聲
#劃分?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)建SVR模型
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)
#評(píng)估模型
mse=mean_squared_error(y_test,y_pred)
print(f'MeanSquaredError:{mse}')在這個(gè)例子中,我們使用了numpy來(lái)生成數(shù)據(jù),sklearn.svm.SVR來(lái)構(gòu)建SVR模型,sklearn.model_selection.train_test_split來(lái)劃分?jǐn)?shù)據(jù)集,以及sklearn.metrics.mean_squared_error來(lái)評(píng)估模型的預(yù)測(cè)性能。通過(guò)調(diào)整C和gamma參數(shù),我們可以優(yōu)化模型的泛化能力。解釋數(shù)據(jù)生成:我們生成了一個(gè)包含40個(gè)樣本的單特征數(shù)據(jù)集,其中目標(biāo)變量y是X的正弦函數(shù),且每5個(gè)樣本中添加了噪聲,以模擬真實(shí)世界數(shù)據(jù)中的不確定性。模型訓(xùn)練:使用SVR類,我們選擇了徑向基函數(shù)(RBF)作為核函數(shù),C參數(shù)控制了模型的復(fù)雜度,gamma參數(shù)決定了核函數(shù)的寬度,影響模型的非線性處理能力。預(yù)測(cè)與評(píng)估:模型在訓(xùn)練集上訓(xùn)練后,對(duì)測(cè)試集進(jìn)行預(yù)測(cè),并使用均方誤差(MeanSquaredError,MSE)來(lái)評(píng)估預(yù)測(cè)的準(zhǔn)確性。通過(guò)這個(gè)例子,我們可以看到SVR在處理非線性關(guān)系和噪聲數(shù)據(jù)時(shí)的潛力,同時(shí)也體會(huì)到了參數(shù)選擇的重要性。5.5進(jìn)階主題:多輸出SVR與在線SVR5.5.11多輸出SVR的原理多輸出支持向量回歸(Multi-outputSupportVectorRegression,MOSVR)是支持向量回歸(SVR)的一種擴(kuò)展,用于處理多個(gè)連續(xù)輸出變量的回歸問(wèn)題。在傳統(tǒng)的SVR中,我們預(yù)測(cè)一個(gè)單一的連續(xù)值,但在許多實(shí)際應(yīng)用中,可能需要同時(shí)預(yù)測(cè)多個(gè)相關(guān)變量,例如預(yù)測(cè)天氣數(shù)據(jù)時(shí),可能需要同時(shí)預(yù)測(cè)溫度、濕度和風(fēng)速。原理在MOSVR中,對(duì)于每個(gè)輸出變量,都會(huì)建立一個(gè)獨(dú)立的SVR模型。這意味著,如果有n個(gè)輸出變量,那么將會(huì)有n個(gè)SVR模型。每個(gè)模型都試圖最小化其對(duì)
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 《 扎賚特旗媒介研究》范文
- 統(tǒng)編版語(yǔ)文二年級(jí)上冊(cè)1-2單元測(cè)試卷(含答案)
- 和平區(qū)高一下學(xué)期期末考試語(yǔ)文試題(圖片版無(wú)答案)
- 《 農(nóng)業(yè)保險(xiǎn)對(duì)農(nóng)業(yè)碳排放的影響及作用機(jī)制》范文
- 統(tǒng)編版語(yǔ)文二年級(jí)上冊(cè)第六單元達(dá)標(biāo)檢測(cè)卷(單元測(cè)試)(含答案)
- 容器制作合同協(xié)議書(shū)
- 部分地區(qū)四年級(jí)下學(xué)期期末語(yǔ)文練習(xí)試卷(PDF版 無(wú)答案)
- 《2024年 加速康復(fù)外科在腹腔鏡聯(lián)合膽道鏡治療膽囊結(jié)石合并膽總管結(jié)石中的應(yīng)用研究》范文
- 《 化驗(yàn)單拍照識(shí)別系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)》范文
- 養(yǎng)老院實(shí)踐匯報(bào)
- 識(shí)別界限 拒絕性騷擾 課件 2024-2025學(xué)年人教版(2024)初中體育與健康七年級(jí)全一冊(cè)
- Unit1-2 (單元測(cè)試)-2024-2025學(xué)年人教PEP版(2024)英語(yǔ)三年級(jí)上冊(cè)
- 金華市婺城區(qū)城市發(fā)展控股集團(tuán)有限公司招聘筆試題庫(kù)2024
- 2024-2025學(xué)年人教版九年級(jí)物理上學(xué)期第一次月考模擬練習(xí)(A卷)
- 燃燒仿真軟件OpenFOAM教程:燃燒模型與化學(xué)反應(yīng)機(jī)理
- 地圖的選擇和應(yīng)用 2024-2025學(xué)年七年級(jí)地理上冊(cè)同步課件(人教版2024)
- 2024至2030年全球與中國(guó)螢石行業(yè)發(fā)展?jié)摿巴顿Y策略分析報(bào)告
- 2024年醫(yī)療器械咨詢服務(wù)協(xié)議
- 2024年青驕第二課堂高中生禁毒知識(shí)競(jìng)賽題庫(kù)及答案(108題)
- 2024年秋新北師大版七年級(jí)上冊(cè)數(shù)學(xué)教學(xué)課件 第三章 整式及其加減 問(wèn)題解決策略:歸納
- 臨床試驗(yàn)倫理審查協(xié)議
評(píng)論
0/150
提交評(píng)論