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.
参考链接: