我正在尝试使用sci kit learn在python中的一系列示例上运行多项式朴素贝叶斯。我坚持将所有示例归类为负面。训练集有点偏向负 P(负) ~.75。我浏览了文档,找不到偏向积极因素的方法。
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)))
设置先验是一种糟糕的处理方式,会导致负面情况被归类为真正不应该的正数。 您的数据有 .25/.75 的拆分,所以之前的 .5/.5 是一个非常糟糕的选择。
相反,可以用谐波平均值平均精度和召回率,以产生 F 分数,该分数试图正确处理有偏见的数据,如下所示:
from sklearn.metrics import f1_score
然后,可以使用 F1 分数来评估模型的质量。 然后,您可以进行一些模型调整和交叉验证,以找到更好地对数据进行分类的模型,即最大化 F1 分数的模型。
另一种选择是随机修剪数据中的负事例,以便使用 .5/.5 数据训练分类器。 然后,预测步骤应提供更合适的分类。