我用朴素贝叶斯(Naive Bayes)库(Python)做了一个有关Web分类的示例,并且Thats运行得很好(很好地分类了Web页面)。
其实我有两个问题。首先,
我只使用网页的内容(文章一侧)。那没问题,但是,我希望将标题与双重加权效果集成到输出中。我可以检索变量列表名称为titles []的页面的标题。那就是我的classfy代码:
x_train = vectorizer.fit_transform(temizdata)
classifer.fit(x_train, y_train)
我可以在文章文字上添加标题,但是这次文章文字和标题具有相同的权重。
在代码中,
temizdata
是保留网页文章文本的我的列表。 y_train
是类。如何将title []集成到具有双重加权的分类中?我将Countvectorizer用于vectorize和朴素贝叶斯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)
确保对文本和标题使用两个单独的矢量化程序,以便分类器了解文本特征和标题特征之间的区别。如果有任何功能更重要,则分类器应将其解决。
做hierarchical classification:像以前一样在文本上训练一个分类器。在标题上训练另一个分类器。最后,在前两个分类器的输出上训练第三个分类器。
编辑:
如果您确实希望标题的重要性是文本的两倍,则可以训练两个单独的分类器(如分层分类中的分类器)并取其输出的加权平均值(如果输出是类概率)。