如何将额外的列车数据整合到朴素贝叶斯?

时间:2016-01-11 14:16:18

标签: python text scikit-learn classification naivebayes

我做了一个关于使用Naive Bayes库(Python)进行Web分类的示例,并且完美地工作(很好的分类网页)。

其实我有2个问题。首先,

我只使用网页内容(文章方面)。这没问题但是,我希望将标题与双重加权效果整合到输出中。我可以检索变量列表名称为titles []的页面标题。这就是我的代码:

x_train = vectorizer.fit_transform(temizdata)
classifer.fit(x_train, y_train) 

我可以为文章文字添加标题,但这次文章文章和标题具有相同的权重。

在代码中,temizdata是我的列表,用于保存网页的文章文本。而y_train是课程。如何将title []与双重加权分类?

我使用了Countvectorizer进行矢量化,使用Naive Bayes MultinominalNB分类器。

from sklearn.feature_extraction.text import CountVectorizer
from sklearn.naive_bayes import MultinomialNB
vectorizer = CountVectorizer()
classifer = MultinomialNB(alpha=.01)

1 个答案:

答案 0 :(得分:1)

如果我正确理解您的问题,您希望使用从文本和标题派生的字数统计功能。标题的功能应该是文本功能的两倍。我不认为在这种情况下为功能分配先前的权重是有意义的(如果可能的话)。毕竟,你进行机器学习是因为你希望计算机找出哪些特征更重要。

我建议您尝试两种替代方法:

  1. 功能合并会从文本正文中生成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)
    

    确保为文本和标题使用两个单独的矢量化器,以便分类器了解文本功能和标题功能之间的区别。如果任何特征更重要,分类器应该可以解决这个问题。

  2. hierarchical classification:在文本上训练一个分类器,就像你已经做过的那样。在标题上训练另一个分类器。最后,在前两个分类器的输出上训练第三个分类器。

  3. 修改

    1. 如果确实希望标题的重要性是文本的两倍,则可以训练两个单独的分类器(如分层分类)并获取其输出的加权平均值(如果输出为类概率)。