2017-06-13 37 views
1

我已經構建了一個分類器,在標記的數據上進行了訓練和測試。現在我想通過對數據集進行預測而不使用標籤來進一步測試它。我自己已經知道這些標籤,但是我想將它們移除以用於測試,並且使用0預測值打印出值,以便我可以比較自己的準確度。我使用下面的代碼遍歷我的數據集,並對DataFrame中的每一行進行預測;在新的DataFrame上使用受過訓練的分類器

malware = set() 

for index, row in dataset.iterrows(): 
    res = clf.predict([row]) 
    if res == 0: 
     malware.add(index) 

print(malware) 
f.write(str(malware) + "\n") 

它似乎在工作,但它不是一個快速的過程,有沒有更好的方法或任何我可以做的加快它?

+2

你使用scikit學習?如果是這樣,您可以傳入整個數據框,結果將是一組標籤。 – Ding

+0

@Ding。我是耶,但是當我嘗試在整個數據集上使用.predict時,我似乎無法打印出索引值,我得到的只是一組預測值。 –

+2

假設你想獲得預測標籤爲0的所有索引,使用'dataset.index [clf.predict(dataset)== 0]' – Ding

回答

0

經過一番努力,我把丁的評論變成了一個可行的答案,這個答案要快得多。我的新代碼是;

from collections import OrderedDict 

malware = [] 

malware.append(OrderedDict.fromkeys(dataset.index[clf.predict(dataset) == 0])) 

print (malware) 

非常感謝丁!

0

使用for循環遍歷數據集中的元素通常速度很慢。你想要做的是將你的函數應用到列中的每個元素,並根據結果生成一系列標籤。 (順便提一下,假設你使用Pandas作爲數據幀)

labels=dataset.apply(clf.predict) 

然後你可以用for循環掃描這個系列。這應該是相對即時的。