我正在使用scikit-learn机器学习库(Python)进行机器学习项目.我正在使用的算法之一是高斯朴素贝叶斯实现. GaussianNB()函数的一个属性如下:
class_prior_ : array, shape (n_classes,)
我想先手动更改类,因为我使用的数据非常偏斜,其中一个类的调用非常重要.通过为该类分配较高的先验概率,召回应该增加.
但是,我无法弄清楚如何正确设置属性.我已经阅读了以下主题,但他们的答案对我不起作用.
How can the prior probabilities manually set for the Naive Bayes clf in scikit-learn?
How do I know what prior’s I’m giving to sci-kit learn? (Naive-bayes classifiers.)
这是我的代码:
gnb = GaussianNB()
gnb.class_prior_ = [0.1, 0.9]
gnb.fit(data.XTrain, yTrain)
yPredicted = gnb.predict(data.XTest)
我认为这是正确的语法,我可以通过播放值找出哪个类属于数组中的哪个位置,但结果保持不变.也没有给出任何错误.
从scikit-learn库设置GaussianNB算法属性的正确方法是什么?
Link to the scikit documentation of GaussianNB
解决方法:
在scikit-learn中实现的GaussianNB()不允许您先设置类.如果您阅读在线文档,您会看到.class_prior_是一个属性而不是参数.一旦适合GaussianNB(),就可以访问class_prior_属性.它的计算方法是简单计算训练样本中不同标签的数量.
from sklearn.datasets import make_classification
from sklearn.naive_bayes import GaussianNB
# simulate data with unbalanced weights
X, y = make_classification(n_samples=1000, weights=[0.1, 0.9])
# your GNB estimator
gnb = GaussianNB()
gnb.fit(X, y)
gnb.class_prior_
Out[168]: array([ 0.105, 0.895])
gnb.get_params()
Out[169]: {}
您看到估算器足够聪明,可以考虑不平衡的重量问题.因此您不必手动指定先验.