【问题标题】:Biasing Sklearn toward positives For MultinomialNB将 Sklearn 偏向 MultinomialNB 的积极因素
【发布时间】:2015-01-31 05:22:48
【问题描述】:

我正在尝试使用 sci kit learn 在 python 中的一系列示例上运行多项式朴素贝叶斯。我不断地将所有示例归类为负面。训练集有些偏向于负数 P(negative) ~.75。我查看了documentation,但找不到偏向正面的方法。

from sklearn.datasets import load_svmlight_file
from sklearn.naive_bayes import MultinomialNB
from sklearn.metrics import accuracy_score
from sklearn.metrics import recall_score
from sklearn.metrics import precision_score
X_train, y_train= load_svmlight_file("POS.train")
x_test, y_test = load_svmlight_file("POS.val")
clf = MultinomialNB()
clf.fit(X_train, y_train)
preds = clf.predict(x_test)
print('accuracy: ' + str(accuracy_score(y_test, preds)))
print('precision: ' + str(precision_score(y_test, preds)))
print('recall: ' + str(recall_score(y_test, preds)))

【问题讨论】:

    标签: python machine-learning scikit-learn


    【解决方案1】:

    设置先验是处理此问题的一种糟糕方法,并且会导致负面案例被归类为真正不应该归类的正面案例。您的数据有 .25/.75 的拆分,因此 .5/.5 先验是一个非常糟糕的选择。

    相反,可以使用调和平均值来平均精度和召回率,以产生一个 F 分数,该分数试图正确处理如下所示的有偏数据:

    from sklearn.metrics import f1_score
    

    然后可以使用 F1 分数来评估模型的质量。然后,您可以进行一些模型调整和交叉验证,以找到更好地分类您的数据的模型,即最大化 F1 分数的模型。

    另一种选择是随机删除数据中的否定案例,以便使用 .5/.5 数据训练分类器。然后,预测步骤应该给出更合适的分类。

    【讨论】:

    • 我会过度采样(复制)阳性病例,而不是丢弃阴性病例。
    猜你喜欢
    • 1970-01-01
    • 2018-11-04
    • 2018-09-12
    • 2021-01-12
    • 1970-01-01
    • 2019-10-20
    • 2018-10-04
    • 1970-01-01
    • 2020-10-10
    相关资源
    最近更新 更多