【问题标题】:How do I use BernoulliNB?如何使用伯努利NB?
【发布时间】:2019-03-23 11:29:15
【问题描述】:

我正在尝试使用 BernoulliNB。使用相同的数据进行训练和测试,我得到了训练数据以外的预测和 1 以外的概率。请问这是为什么?

import pandas as pd
from sklearn.naive_bayes import BernoulliNB
BNB = BernoulliNB()

# Data
df_1 = pd.DataFrame({'O' : [1,2,3,1,1,3,1,2,2,1],
                     'I1': [1,0,0,1,0,0,1,1,0,1],
                     'I2': [0,0,1,0,0,1,0,0,1,0],
                     'I3': [1,0,0,0,0,0,1,0,0,0]})

df_I = df_1.iloc[:,1:4]
S_O  = df_1['O']

# Bernoulli Naive Bayes Classifier
A_F = BNB.fit(df_I, S_O)
A_P = BNB.predict(df_I)
A_R = BNB.predict_proba(df_I)

df_P = pd.DataFrame(A_P)
df_R = pd.DataFrame(A_R)

df_P.columns = ['Predicted A']
df_R.columns = ['Prob 1', 'Prob 2', 'Prob 3']

df_1 = df_1.join(df_P)
df_1 = df_1.join(df_R)

结果

O   I1  I2  I3  Predicted A Prob 1  Prob 2  Prob 3
1   1   0   1   1           .80     .15     .05
2   0   0   0   2           .59     .33     .08
3   0   1   0   3           .18     .39     .43
1   1   0   0   1           .59     .33     .08
1   0   0   0   2           .59     .33     .08
3   0   1   0   3           .18     .39     .43
1   1   0   1   1           .80     .15     .48
2   1   0   0   1           .59     .33     .08
2   0   1   0   3           .18     .39     .43
1   1   0   0   1           .59     .33     .08

我试图在这里描述我想要做的事情:

https://stats.stackexchange.com/questions/367829/how-probable-is-a-set

【问题讨论】:

    标签: python bernoulli-probability


    【解决方案1】:

    它工作正常,并且您正确使用它(代码方面)。 Predicted A 是预测的类标签。在您的情况下,可能的标签由 O 定义并且是 1,2,3Predicted A 将始终具有从该集合中提取的值。

    对于概率,不能保证它们会是=1,事实上它们几乎永远不会。

    我认为您的困惑源于您向其提供已知训练数据但输出不同的事实?我的猜测是您的训练数据在这里太小,所以它会稍微偏离。向它提供更多数据将提高它在这个已知训练集上的准确性。

    我会注意到,您真正想要的是为其提供一个已知的大型训练集,然后预测一个未知的测试数据集。我也许可以详细了解为什么会这样,但我建议阅读有关分类器的教程(scikit 文档还不错,但任何教程都应该涵盖这一点)。

    代码方面,我觉得一切都很好。

    【讨论】:

    • 我尝试改变数据并计算出 Prob 1 是 A=1 等的概率,因此 Predicted A 是概率列最高。
    • 没错:)。如果您深入研究源代码,您会发现他们基本上只是根据概率的argmax 分配标签。给定足够的训练数据,我认为您可以使 已知 数据的预测非常准确 - 真正的问题是它是否适用于测试数据。
    • 我正在努力让它在测试数据上工作:stackoverflow.com/questions/55187516/…
    猜你喜欢
    • 1970-01-01
    • 2016-02-19
    • 2020-12-17
    • 1970-01-01
    • 2019-10-05
    • 1970-01-01
    • 1970-01-01
    • 2020-05-03
    • 2018-04-11
    相关资源
    最近更新 更多