SVM之matlab與python對比測試

 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.

參考鏈接:

[1]、python機器學習庫scikit-learn:SVR的基本應用_python

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章