2015-04-23 333 views
1

正如該主題所說,我在標準化和支持scikitlearn SVM迴歸的數據集標準化方面遇到了一些麻煩。支持向量機標準化或標準化數據輸入scikitlearn

我的問題是:

  1. 當我想要搜索的SVM參數(Cgamma 例如),我用這個代碼:

    param_grid = [ 
        {'C': [1, 10, 100, 1000], 'kernel': ['linear']}, 
        {'C': [1, 10, 100, 1000], 'gamma': [0.001, 0.0001], 'kernel': ['rbf']}, 
    ] 
    
    svr = svm.SVC() 
    clf = grid_search.GridSearchCV(svr, param_grid) 
    clf.fit(X_train,TargetT) 
    

    我應該規範X_trainTargetT載體中的fit函數?

    X_train包含-1和1和TargetT之間的值是0和 1與載體意味着不等於0和std不等於1

  2. 我試圖使用preprocessing.StandardScaler()功能上 的InputTrainingInputValidation數據集,但當我檢查 平均值時,我的每個特徵的值都不等於0( 的順序是e-14),std類似於1.00000985。那 是正常還是我做錯了?我想用縮放 數據集作爲輸入的SVM作爲代碼belove:

    scalerI = preprocessing.StandardScaler() 
    X_train = scalerI.fit_transform(InputT) 
    X_test = scalerI.transform(InputCross) 
    svr = SVR(kernel='rbf', epsilon=0.01, C=100, gamma = 0.01) 
    y_rbf = svr.fit(X_train,TargetT) 
    y_hat=svr.predict(X_test) 
    

非常感謝你。

回答

2
  1. 只有輸入功能X_train需要標準化,而不是目標變量,其被認爲是用於分類任務的字符串標籤的整數值(例如,對於二進制分類的0陣列和1)或(例如'spam' VS 'ham' )。對於迴歸任務(預測連續變量,如攝氏溫度或美元價格),有時可以幫助標準化目標,但這通常不如標準化輸入要素有幫助。

  2. 1e-14足夠接近0.0,1.00000985足夠接近1.0。

作爲一個方面沒有你可以使用管道縮短代碼:

from sklearn.pipeline import make_pipeline 
pipeline = make_pipeline(
    preprocessing.StandardScaler(), 
    SVR(kernel='rbf', epsilon=0.01, C=100, gamma = 0.01), 
) 
pipeline.fit(X_train, TargetT) 
y_hat = pipeline.predict(X_test) 

電網搜查該管道的腸子模型的參數,你將不得不使用與小寫字母前綴類名稱的版本:例如'svr__C''svr__gamma''svr__epsilon'

+0

好的,謝謝!關於第二點,我認爲,因爲他們足夠接近0和1,他們仍然可以作爲SVM的輸入,但我並不完全確定。感謝您提出的管道建議 – PSan