我正在尝试建立文本分类模型。我是新来的。我了解MNB的公式:
sklearn documentation似乎与公式匹配。文档指出,这是计算功能,即给定类别的单词的概率,类似于上面的公式。然后,我在关于TFIDF的文档中唯一可以找到的基本上是“它也应该起作用”的想法。但这让我me不解“怎么办?”
我已经花了大约1-2个小时在线阅读有关使用TFIDF作为MNB中的功能的数学运算的信息,但是我实际上还没有找到公式或有意义的解释。
通过思考理论和sklearn的实现,我们可以将其分为两个部分。
我的理论问题是,MNB明确声明其正在计算给定类别的单词的联合条件概率。这与使用TFIDF不同。它们是根本不同的东西。您如何修改方程式?它是什么样子的?例如,不是将某个单词的条件概率相乘,而是直接将TFIDF值相乘?对我而言没有意义的一个原因是sklearn在所有培训示例中都计算了TFIDF,而与课程无关。换句话说,尽管MNB公式计算出p(word | class),但无论类别如何,都将计算TFIDF。一个是特定于类的,另一个不是。就像我说过的那样,我是新手,对此我看不懂。
关于sklearn,如果运行以下命令:
count_vect = CountVectorizer()
X_train_counts = count_vect.fit_transform(x_train)
然后运行它来查看数组:
for i in X_train_counts:
print(list(i.A[0]))
基本上剩下的数组是这样的:
[3, 4...]
[4, 3...]
[2, 4...]
其中,行与x中的训练示例相对应,并且每个列表的长度为=(总vocab-删除的停用词)。整数是该训练示例中该词汇单词的计数。
如果您随后运行
clf = MultinomialNB()
clf.fit(X, y)
我的假设是,它实际上是在计算我上面发布的公式。如果我错了,请纠正我,但这就是我的理解。
如果要改为运行
X_train_tfidf = tfidf_transformer.fit_transform(X_train_counts)
您将获得与以前类似的数组,但是现在看起来像:
[0.196, 0.980...]
[0.970, 0.242...]
其中,行与x中的训练示例相对应,并且每个列表的长度为=(总vocab-删除的停用词)。小数是该单词的tfidf。
然后sklearn如何处理此数据?根据定义,您不能将这些值插入原始公式中,否则您不是在计算给定类别的单词的概率吗?
我对数学以及从这里发生的事情感到非常困惑。任何帮助都会很好。如果我错过了文档中的内容,对不起。谢谢