sklearn中支持向量機(SVM)用于回歸
摘要:本文使用SVM進行回歸;
00 獲取sklearn中糖尿病患者數據
import numpy as np
import matplotlib.pyplot as plt
from sklearn import datasets, svm
diabetes=datasets.load_diabetes()
train_x=diabetes.data[:342,:]
train_y=diabetes.target[:342]
test_x=diabetes.data[342:,:]
test_y=diabetes.target[342:]
01 SVM線性回歸
regre=svm.LinearSVR()
regre.fit(train_x,train_y)
regre.score(test_x,test_y)
Out[36]: -0.3826827941256945
regre.coef_
Out[37]:
array([ 2.49261883, 0.25752362, 6.21448813, 4.90032452, 2.70896776,
2.61597544, -4.9194174 , 5.41655006, 6.48684744, 3.7077186 ])regre.intercept_
Out[38]: array([103.12986397])
regre.n_iter_
Out[39]: 9
考察參數loss的影響:
regre=svm.LinearSVR(loss='epsilon_insensitive')
regre.fit(train_x,train_y)
regre.score(test_x,test_y)
Out[40]: -0.38589592979512455
regre=svm.LinearSVR(loss='squared_epsilon_insensitive')
regre.fit(train_x,train_y)
regre.score(test_x,test_y)
Out[41]: 0.5006695289879384
考察參數epsilon的影響:
考察參數C的影響:
cs=np.logspace(-1,2)
scor=[]
for C in cs:
regre=svm.LinearSVR(epsilon=0.01,loss='squared_epsilon_insensitive',C=C,max_iter=10000)
regre.fit(train_x,train_y)
scor.append(regre.score(test_x,test_y))
plt.plot(cs,scor)
plt.xscale('log')

02 SVM非線性回歸
當kernel=‘linear‘’’時:
regre=svm.SVR(kernel='linear')
regre.fit(train_x,train_y)
regre.score(test_x,test_y)
Out[44]: 0.001143175015592801
當kernel=‘‘poly’’時,考察參數 degree,gamma,C的影響:
degrees=range(1,20)
scor=[]
for i in degrees:
regre=svm.SVR(kernel='poly',degree=i,gamma='auto',coef0=1)
regre.fit(train_x,train_y)
scor.append(regre.score(test_x,test_y))
plt.plot(degrees,scor)
plt.ylim(-1,1)
plt.show()

gammas=range(1,40)
scor=[]
for i in gammas:
regre=svm.SVR(kernel='poly',degree=3,gamma=i,coef0=1)
regre.fit(train_x,train_y)
scor.append(regre.score(test_x,test_y))
plt.plot(gammas,scor)
plt.ylim(0,1)
plt.show()
coef0s=range(0,20)
scor=[]
for i in coef0s:
regre=svm.SVR(kernel='poly',degree=3,gamma=20,coef0=i)
regre.fit(train_x,train_y)
scor.append(regre.score(test_x,test_y))
plt.plot(coef0s,scor)
plt.ylim(0,1)
plt.show()
當kernel=‘‘rbf’’時,參數gamma的影響:
gammas=range(1,20)
scor=[]
for i in gammas:
regre=svm.SVR(kernel='rbf',gamma=i)
regre.fit(train_x,train_y)
scor.append(regre.score(test_x,test_y))
plt.plot(gammas,scor)
plt.ylim(-1,1)
plt.show()
當kernel=‘sigmoid’時,考察gamma,coef0的影響:
gammas=np.logspace(-1,3,20)
scor=[]
for i in gammas:
regre=svm.SVR(kernel='sigmoid',gamma=i,coef0=0.01)
regre.fit(train_x,train_y)
scor.append(regre.score(test_x,test_y))
plt.plot(gammas,scor)
plt.ylim(-1,1)
plt.xscale('log')
plt.show()
coef0s=np.linspace(0,5,20)
scor=[]
for i in coef0s:
regre=svm.SVR(kernel='sigmoid',gamma=10,coef0=i)
regre.fit(train_x,train_y)
scor.append(regre.score(test_x,test_y))
plt.plot(coef0s,scor)
plt.ylim(-1,1)
plt.show()

工程師必備
- 項目客服
- 培訓客服
- 平臺客服
TOP




















