2017-05-24 88 views
0

這是我的數據的一個例子:如何name列與結果賽後分類scikit學習

filename,2,3,4,5,6,7,class  
a.txt,0,0,0,0,0,0,0  
b.txt,0,0,0,0,0,1,0  
c.txt,0,0,0,0,1,0,0  
d.txt,1,0,1,0,0,1,1 

當我訓練我的數據,我只是用列從2 - > 7作爲輸入,類作爲輸出。但是當我在訓練和保存後測試模型時,我需要知道哪些文件屬於哪個類。我的意思是如何知道d.txt是第一類。 我使用熊貓從.csv文件導入數據,我在兩個不同的csv文件中使用了訓練集和測試集。在列車階段,我使用2-7列作爲輸入,列列作爲目標,這些列是數字。文件名類只是文本。在測試階段,我需要知道預測類的文件名。但我不知道該怎麼做。

由於

P/S:我使用MLP,SVM,NB作爲分類器。

+0

用虛線隔開您的數據?每個破折號分隔一列?您可能需要檢查數據,因爲標題中的列數與文件的其餘部分不匹配。另外,假設我的分類器輸出** 0 **,你將如何與''a.txt「,'」b.txt「'和'」c.txt「'區分開來? – yellow01

+0

通常你會使用'svm.predict()'並傳入特徵向量,但是我不確定沒有看到你的代碼。 – Tony

+0

@ yellow01不,只是用逗號,我只是表示爲了更容易理解 –

回答

0

假設你的數據在.csv格式:

filename,2,3,4,5,6,7,class 
a.txt,0,0,0,0,0,0,0 
b.txt,0,0,0,0,0,1,0 
c.txt,0,0,0,0,1,0,0 
d.txt,1,0,1,0,0,1,1 

您可以輸出相應的文件名來預測類使用:

features=[1,0,1,0,0,1] #input 
output=clf.predict([features])[0] #predicted class 
print(df[df["class"]==output]["filename"]) #corresponding filename 

注意,在你的榜樣,你所面臨的問題,即特徵的數量大於示例的數量,因此分類器可能惡化。

希望你剛剛給了你的數據樣本。在這種情況下,你可能會很好。小心使用什麼分類器。

全碼:

import numpy as np 
import pandas as pd 
from sklearn import svm 

df=pd.read_csv('file.csv') 

X = df.iloc[:,1:7].values 
y = df.iloc[:,7:8].values 
clf = svm.SVC() #using SVM as classifier 
clf.fit(X, y) 

features=[1,0,1,0,0,1] 
output=clf.predict([features])[0] 
print(df[df["class"]==output]["filename"])