如何指定 scikit-learn 的朴素贝叶斯的先验概率
How to specify the prior probability for scikit-learn's Naive Bayes
我正在将 scikit-learn 机器学习库 (Python) 用于机器学习项目。我使用的算法之一是高斯朴素贝叶斯实现。 GaussianNB()函数的属性之一如下:
class_prior_ : array, shape (n_classes,)
我想手动更改 class 之前的数据,因为我使用的数据非常倾斜,并且回忆其中一个 classes 非常重要。通过为 class 分配高先验概率,召回率应该会增加。
但是,我不知道如何正确设置该属性。我已经阅读了以下主题,但他们的答案对我不起作用。
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)
我认为这是正确的语法,我可以通过使用值找出哪个 class 属于数组中的哪个位置,但结果保持不变。也没有报错。
从 scikit-learn 库中设置 GaussianNB 算法属性的正确方法是什么?
scikit-learn 中实现的 GaussianNB() 不允许您预先设置 class。如果您阅读在线文档,您会看到 .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]: {}
你看估算器足够聪明,可以考虑到不平衡的权重问题。所以你不必手动指定先验。
@李建勋:GaussianNB其实是有设置先验概率的方法的。它被称为 'priors' 并且可以作为参数使用。请参阅文档:
“参数:先验:类似数组,形状 (n_classes,)
类 的先验概率。如果指定,则不会根据数据调整先验。”
那么让我举个例子:
from sklearn.naive_bayes import GaussianNB
# minimal dataset
X = [[1, 0], [1, 0], [0, 1]]
y = [0, 0, 1]
# use empirical prior, learned from y
mn = GaussianNB()
print mn.fit(X,y).predict([1,1])
print mn.class_prior_
>>>[0]
>>>[ 0.66666667 0.33333333]
但是如果你改变先验概率,它会给出一个不同的答案,我相信这就是你正在寻找的。
# use custom prior to make 1 more likely
mn = GaussianNB(priors=[0.1, 0.9])
mn.fit(X,y).predict([1,1])
>>>>array([1])
我正在将 scikit-learn 机器学习库 (Python) 用于机器学习项目。我使用的算法之一是高斯朴素贝叶斯实现。 GaussianNB()函数的属性之一如下:
class_prior_ : array, shape (n_classes,)
我想手动更改 class 之前的数据,因为我使用的数据非常倾斜,并且回忆其中一个 classes 非常重要。通过为 class 分配高先验概率,召回率应该会增加。
但是,我不知道如何正确设置该属性。我已经阅读了以下主题,但他们的答案对我不起作用。
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)
我认为这是正确的语法,我可以通过使用值找出哪个 class 属于数组中的哪个位置,但结果保持不变。也没有报错。
从 scikit-learn 库中设置 GaussianNB 算法属性的正确方法是什么?
scikit-learn 中实现的 GaussianNB() 不允许您预先设置 class。如果您阅读在线文档,您会看到 .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]: {}
你看估算器足够聪明,可以考虑到不平衡的权重问题。所以你不必手动指定先验。
@李建勋:GaussianNB其实是有设置先验概率的方法的。它被称为 'priors' 并且可以作为参数使用。请参阅文档: “参数:先验:类似数组,形状 (n_classes,) 类 的先验概率。如果指定,则不会根据数据调整先验。” 那么让我举个例子:
from sklearn.naive_bayes import GaussianNB
# minimal dataset
X = [[1, 0], [1, 0], [0, 1]]
y = [0, 0, 1]
# use empirical prior, learned from y
mn = GaussianNB()
print mn.fit(X,y).predict([1,1])
print mn.class_prior_
>>>[0]
>>>[ 0.66666667 0.33333333]
但是如果你改变先验概率,它会给出一个不同的答案,我相信这就是你正在寻找的。
# use custom prior to make 1 more likely
mn = GaussianNB(priors=[0.1, 0.9])
mn.fit(X,y).predict([1,1])
>>>>array([1])