2016-08-05 62 views
0

我想選擇與具有更好的預測得分數據的CSV文件。 我嘗試使用下面的代碼,以確定交叉驗證得分:交叉驗證的預測成績相同的

from __future__ import division 
import os,csv 
from sklearn import cross_validation 
import numpy as np 
from sklearn import svm 
from sklearn import metrics 

files = [e for e in os.listdir('.') if e.endswith('.csv')] 

csvout = open('xval.csv','wb') 
csvwriter=csv.writer(csvout) 

for f in files: 

    X,Y=[],[] 
    feat=f[4:-4] 
    print feat 

    csvin = open(f,'rb') 
    csvread=csv.reader(csvin) 
    for row in csvread: 
     X.append([row[0]]) 
     Y.append(1 if row[1]=='True' else 0) 

    clf = svm.SVC(kernel='linear', C=1) 
    predicted = cross_validation.cross_val_predict(clf, X, Y, cv=3) 
    print metrics.accuracy_score(Y, predicted) 

csvout.close() 

兩個CSV報告如下,a.csv和b.csv:

0.8307059089237866,False 
0.07933411654760168,False 
0.07933411654760168,False 
0.07933411654760168,False 
0.07933411654760168,False 
0.8050114148789536,False 
0.7050883824823811,True 
0.07933411654760168,True 
0.07933411654760168,True 
0.07933411654760168,True 
0.07933411654760168,True 
0.07933411654760168,True 
0.07933411654760168,True 
0.07933411654760168,True 
0.07933411654760168,True 
0.6251499565651232,True 

0.3507377775833331,False 
0.2609619627153587,False 
0.24483806968609972,False 
0.7122564948467026,False 
0.7172548646226102,False 
0.1321163493448647,False 
0.023658678331543205,True 
0.5954080270729952,True 
0.632479304055982,True 
0.22412105580276065,True 
0.3431509885671966,True 
0.5954080270729952,True 
0.1137442754294842,True 
0.8312144672461341,True 
0.1137442754294842,True 

但是,我得到的確切相同的預測得分。這怎麼可能?

回答

1

當前的代碼將不能工作,因爲cross_val_predict()函數的變量CV(褶皺的數目)比的類0(假)的樣本的數目更大。如果將它降低到(或等於)6以下,它將起作用,並且a.csv和b.csv的準確度分別爲0.6和0.625。

+0

我使用一個更大的數據集實際。 'Y'部分總是相同的。這就是爲什麼值是相同的 –

+0

好的。不,這不是原因。如果_predicted_數組相同,分數將相同。這就是發生在你身上的事。 請先嚐試打印_predicted_數組。你可能會注意到它充滿了1,這是不好的。然後嘗試在您的數據集中使用相同數量的False和True,這肯定會更改準確性分數。 但是你想要做的是不是真的培訓相關,你的X數組必須有一個以上的功能。 – acknowledge

+0

謝謝。我現在注意到預測包含相同的值。我如何才能使其多樣化? –