2016-04-09 70 views
1

我正在做一個有監督學習的任務。我有兩組數據 - 訓練和測試。Scikit-learn(SVC估計器)始終給出相同的預測值

我的訓練數據集大約有2000條記錄。我的測試數據有10條記錄。
當我運行以下代碼時,預測函數給出與輸出相同的值。

我不知道我做錯了......我試圖改變γ和C.仍然沒有運氣的價值..

我想知道如果這樣的:

  1. 必須做與數據(訓練集大小)或
  2. 我只是使用錯誤估計器或
  3. 我的代碼是亂了?

下面是完整的Python代碼:

import pandas as pd 

    training_data = pd.read_csv("Train_wo_Header.csv") #I read my training data set 
    data = training_data.ix[:,[0,1,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31]] #picking up all rows expect index 2, which is my output 
    target = training_data.ix[:,[2]] 


    from sklearn import svm #Code from the URL above 
    clf = svm.SVC(gamma=0.001, C=100.) 
    clf.fit(data,target) 

    test_data = pd.read_csv("test_wo_Header.csv") #this is my test data 

    clf.predict(test_data[-10:]) #predicting the last 10 values 

這裏是輸出:

array([7734, 7734, 7734, 7734, 7734, 7734, 7734, 7734, 7734, 7734], dtype=int64) 

我甚至使用LinearSVC嘗試。仍然沒有運氣。唯一的區別是,預測輸出爲不同的值(9240),但在整個一樣的...

+1

1.重新設置您的數據(StandardScaler)2.增加C到1e5,檢查其他伽瑪值 – lejlot

+0

我dd 2和3.現在它給了我一個不同的值(接近我的最終結果),但問題仍然存在停留:我得到相同的輸出..你認爲這是因爲沒有做step.1? –

+1

是的,第1步是必不可少的。如果您的數據未縮放,則合理行爲所需的C和G值可能會超出浮動範圍 – lejlot

回答

2

總是給相同的輸出可以有2個原因:

  • 您的模型過度擬合(不平衡數據集? )
  • 你沒有給予正確的數據模型

您似乎沒有您的熊貓數據幀轉換爲numpy的陣列,嘗試

clf = svm.SVC()  
X = data.values 
Y = target.values 
assert len(X) == len(Y) 

clf.fit(X,Y) 
print clf.score(X,Y) 

對您的測試數據做同樣的事情,並嘗試至少打印數據的形狀和陣列的一個元素。

相關問題