python 下與matlab下SVM 使用結果對比:
1、matlab測試code:
scores_train = ones(28,1)*0.8
scores_train(1,1)=6
scores_train(2,1)=4
score_size= size(scores_train)
D=ones(28,5)*0.2
scores_train
svm_model = svmtrain(scores_train, D, '-s 4 -t 0'); %svmtrain
[scores_pred, ~,~] = svmpredict(scores_train, D, svm_model,'-q');
abs(scores_pred - scores_train)
svm_err = (sum(abs(scores_pred - scores_train))) / length(scores_train)
2、python測試代碼:
def Train_SVR( ):
store_D1 = np.ones((28,5))*0.2
store_score1 = np.ones((28, 1)) * 0.8
store_score1[0, 0] =6
store_score1[1,0] =4
store_score1= store_score1.ravel()
print("store_D1", store_D1)
print("store_score1", store_score1)
# svr = GridSearchCV(SVR(kernel='linear'), cv=3, # param_grid={"C": [0.01, 0.1, 1, 10]})
# param_grid={"C": [1e0, 1e1, 1e2, 1e3]})
# 訓練
svr = SVR(kernel="linear", epsilon=-0.0, C=0.1)
svr.fit( store_D1, store_score1 )
y_svr = svr.predict(store_D1)
print("y_svr ***************************》 ", y_svr)
print(" len(store_score1)", len(store_score1))
abs_value= abs(y_svr - store_score1)
print("abs_value ", abs_value)
svm_err = (sum(abs_value) )/ len(store_score1)
print("svm error ", svm_err)
return svr
起初,測試發現python預測的結果總是過擬合,查看y_svr, 總是比matlab中多個0.1, 很是納悶,改變對離散點的懲罰項C, 不起任何作用, 最後通過通過matlab的輸出,發現是默認epsilon=0.1.
參考鏈接: