gpt4 book ai didi

python - sklearn MultinomialNB 仅预测类先验

转载 作者:行者123 更新时间:2023-11-30 09:18:20 25 4
gpt4 key购买 nike

我目前正在尝试为分类特征推出我自己的朴素贝叶斯分类器,以确保我理解它们。现在我想将它们与 sklearns MultinomialNB 进行比较。但由于某种原因,我无法让 skearn 版本正确运行。我认为最容易比较的是 kaggle Titanic 数据集。所以它这样做了(这相当简单,对吧?):

import numpy as np
import pandas as pd
from sklearn.naive_bayes import MultinomialNB

train = pd.read_csv('data/in/train.csv')

X = np.asarray(train[['Pclass']])
y = np.asarray(train['Survived'])

clf = MultinomialNB()
clf.fit(X, y)
clf.predict_proba(X)

但它实际上预测(或没有,在这种情况下......)是泰坦尼克号上的每个人都会死亡。或者换句话说,当要预测的类标签为 [0, 1] 时,它预测 0。最奇怪的是,它显然只是给出了每个预测的类先验 P(y) 的概率(我用我的自制算法进行了检查;))。所以它显然不会将其与可能性 P(X|y) 相乘。

有人遇到过这种情况吗?我在这里犯了一些明显的错误吗?

编辑:

我想我现在明白了。如果我将输入数据集转换为列联表,并对输入特征进行单热编码,它会给出相同的预测概率。我使用了 alpha=0 的平滑与我自己的算法进行比较:

import numpy as np
import pandas as pd
from sklearn.naive_bayes import MultinomialNB

train = pd.read_csv('data/in/train.csv')

X_test = np.asarray(pd.get_dummies(train['Pclass']))

X = np.array(pd.crosstab(train[y_column], train['Pclass']))
y = np.array([0,1])

clf = MultinomialNB(alpha=0.0000000001, class_prior=np.array(class_prior))
clf.fit(X, y)
clf.predict_proba(X_test)

不过,我想知道的一件事是,为什么我现在必须手动指定类。如果我不这样做,sklearn 现在使用不知情的先验,[0.5, 0.5] ...

最佳答案

多项式朴素贝叶斯模型的工作原理与给定单个特征的预期工作原理完全一样。如果你看一下formula for P(X|y) ,当特征数量n=1时,它等于1。这就是原因。

朴素贝叶斯模型因对条件分布 P(X | y) 所做的假设而彼此不同。多项式朴素贝叶斯假设这是一个多项式分布。多项分布对滚动(可能有偏差的)k 面骰子 n 次的计数概率进行建模。

例如,假设给您一组由两家公司生产的骰子:FairDice 和 Crooks&Co。 FairDice 以生产公平的骰子而闻名,而 Crooks&Co 生产的加载骰子绝大多数都是 6 在上面。您需要学习通过多次 throw 骰子并查看结果来预测骰子的生产者。您将每个骰子 throw 数次,并将结果记录在具有 6 个特征的数据集中。每个特征代表 throw 骰子时相应值出现的次数。

count_1 count_2 count_3 count_4 count_5 count_6 fair_dice
5 6 4 7 6 5 1
3 2 1 2 1 13 0

现在这是用于训练多项式朴素贝叶斯分类器的合适数据集。

在单个特征上训练多项式朴素贝叶斯分类器相当于尝试对顶部具有相同数字的单面骰子进行分类。

A one-sided die. They are real!单面死。它们存在!

例如如果你的特征值为[3,2,1],这意味着你扔了第一个骰子三次,每次都得到1,扔第二个骰子两次,每次都得到1,扔第三个骰子一次,得到1。没有为您提供有关骰子生产者的信息,因此您可以预测的最好结果是先验类别,这正是算法的作用。

关于python - sklearn MultinomialNB 仅预测类先验,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49619152/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com