我用朴素贝叶斯库(Python(做了一个关于Web分类的例子,它工作得很好(classfy网页非常好(。
其实我有两个问题。首先
我只使用网页的内容(文章端(。没问题,但是,我希望输出具有双重加权效果的集成标题。我可以检索变量列表名称为标题[]的页面标题。这是我的classfy代码:
x_train = vectorizer.fit_transform(temizdata)
classifer.fit(x_train, y_train)
我可以为文章文本添加标题,但这次文章文本和标题具有相同的权重。
在代码中,temizdata
是我的列表,它保留了网页的文章文本。 y_train
是类。如何将标题[]集成到具有双重加权的分类中?
我使用Countvectorizer进行矢量化,并使用朴素贝叶斯MultinominalNB分类器。
from sklearn.feature_extraction.text import CountVectorizer
from sklearn.naive_bayes import MultinomialNB
vectorizer = CountVectorizer()
classifer = MultinomialNB(alpha=.01)
正确理解了您的问题,您希望使用从文本和标题派生的字数统计功能。标题中的要素的权重应是文本要素的两倍。我认为在这种情况下为特征分配先验权重是没有意义的(如果可能的话(。毕竟,你做机器学习是因为你想让计算机找出哪些特征更重要。
我建议您可以尝试两种替代方法:
要素合并会从文本正文生成
x_text_train
,从标题生成x_title_train
,并按如下所示进行合并:
确保对文本和标题x_text_train= text_vectorizer.fit_transform(temizdata) x_title_train= title_vectorizer.fit_transform(titledata) x_train = np.hstack(x_text_train, x_title_train)
使用两个单独的矢量化器,以便分类器了解文本特征和标题特征之间的区别。如果任何特征更重要,分类器应该解决这个问题。
进行分层分类:在文本上训练一个分类器,就像你已经做的那样。 在标题上训练另一个分类器。最后,在前两个分类器的输出上训练第三个分类器。
编辑:
- 如果你真的希望标题的重要性是文本的两倍,你可以训练两个单独的分类器(如分层分类(,并取它们输出的加权平均值(如果输出是类概率(。