scikit:这种情况的错误预测

时间:2015-05-26 08:38:47

标签: python machine-learning scikit-learn

我在下面写了一个示例代码

BLOB

对于上述结果,即使受过训练的数据与测试数据相同,我也会得到import numpy as np import pandas as pd import csv from sklearn.feature_extraction.text import CountVectorizer from sklearn.feature_extraction.text import TfidfTransformer from sklearn.naive_bayes import MultinomialNB text = ["this is dog" , "this is bull dog" , "this is jack"] countVector = CountVectorizer() countmatrix = countVector.fit_transform(text) print countVector.vocabulary_ print countmatrix.toarray() tfidf_transformer = TfidfTransformer() idfX = tfidf_transformer.fit_transform(countmatrix) #print tfidf_transformer.vocabulary_ print idfX.toarray() clf = MultinomialNB().fit( idfX, ["dog" , "dog" , "human"]) test = ["this is jack"] testCountMatrix = countVector.transform(test) testidfX = tfidf_transformer.transform(testCountMatrix) print testidfX.toarray() print clf.predict(testidfX) 作为预测。

我在哪里错了?

1 个答案:

答案 0 :(得分:2)

对于您编写的代码,这是预期的(或至少不是那么意外)行为:您有两个标记为dog的实例,其中您有术语this is,因此算法了解到this isdog相关。它可能不是你所追求的,但它是一个有效的关联(如果你不懂英语,你不会容易犯同样的错误吗?)。你的训练数据过于丰富了。默认SVC()也会产生相同的结果。

尝试制作最后一个培训实例this is jack jack,然后它会为human提供this is jack,因为单词jack将更具“强大”作为标识符human

另一种方法是在分类器中设置alpha参数:

clf = MultinomialNB(alpha=0.1).fit( idfX, ["dog" , "dog", "human"])

这将正确分类您自己的所有训练实例。

查看scikit的网格搜索,以优化预测变量的超参数。使用默认值几乎不是你能做的最好的事情。