我如何使用BernoulliNB?

时间:2018-10-18 15:36:06

标签: python bernoulli-probability

我正在尝试使用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

1 个答案:

答案 0 :(得分:1)

它工作正常,您正在正确使用它(按代码进行操作)。 Predicted A是预测的类标签。对于您而言,可能的标签由O定义,分别为1,2,3Predicted A始终从该集合中提取值。

对于概率,不能保证它们将是=1,实际上几乎不可能。

我认为您的困惑源于您正在向其提供已知的训练数据,但输出却不同吗?我的猜测是您的培训数据在这里太小了,所以结果有点不对劲。在已知的训练集上提供更多数据将提高其准确性。

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

从代码角度看,一切对我来说都很不错。