2017-06-13 66 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循环扫描这个系列。这应该是相对即时的。

相关问题