2015-12-27 28 views
3

我想在我的數據集上使用OneCsRestClassifier。我提取了要訓練模型的特徵,並在其上安裝了Linear SVC。模型擬合後,當我嘗試預測模型擬合的相同數據時,我得到全零。是因爲某些實現問題還是因爲我的特徵提取不夠好。我想,因爲我預測的是我的模型所用的相同數據,所以我應該獲得100%的準確性。但是,我的模型預測所有的零。這裏是我的代碼 -使用OneVsRestClassifier時全爲零

#arrFinal contains all the features and the labels. Last 16 columns are labels and features are from 1 to 521. 17th column from the last is not taken 
X=np.array(arrFinal[:,1:-17]) 
X=X.astype(float) 
Xtest=np.array(X) 

Y=np.array(arrFinal[:,522:]).astype(float) 
clf = OneVsRestClassifier(SVC(kernel='linear')) 
clf.fit(X, Y) 
ans=clf.predict(Xtest) 
print(ans) 
print("\n\n\n") 

難道有什麼錯我的執行OneVsRestClassifier的?

+1

嘗試參數調整。看看'SVC(內核='線性',C = 10000)'給你不同的結果。請參閱http://stackoverflow.com/questions/34475245/sklearn-svm-svr-and-svc-getting-the-same-prediction-for-every-input/34475451#34475451 –

+0

仍爲全零。 – Joker

+0

這真的很奇怪。在C足夠高的情況下,它應該產生完全相同的結果,除非這些特徵完全相同或者確實存在0相關性。我覺得我們錯過了一些東西。你能提供這些數據嗎? –

回答

1

查看您的數據後,它顯示的值可能對於C值來說太小。嘗試使用sklearn.preprocessing.StandardScaler

X=np.array(arrFinal[:,1:-17]) 
X=X.astype(float) 
scaler = StandardScaler() 
X = scaler.fit_transform(X) 
Xtest=np.array(X) 

Y=np.array(arrFinal[:,522:]).astype(float) 
clf = OneVsRestClassifier(SVC(kernel='linear', C=100)) 
clf.fit(X, Y) 
ans=clf.predict(Xtest) 
print(ans) 
print("\n\n\n") 

從這裏,你應該看看參數整定在C使用交叉驗證。無論是學習曲線還是使用網格搜索。

相關問題