gpt4 book ai didi

machine-learning - 如何将sklearn.naive_bayes与(多个)分类功能一起使用?

转载 作者:行者123 更新时间:2023-11-30 08:21:33 25 4
gpt4 key购买 nike

我想学习一个朴素的贝叶斯模型来解决类为 bool(boolean) 值(采用两个值之一)的问题。一些功能是 bool(boolean) 型的,但其他功能是分类的,可以采用少量值(〜5)。

如果我所有的功能都是 bool(boolean) 值,那么我想使用sklearn.naive_bayes.BernoulliNB。显然,sklearn.naive_bayes.MultinomialNB不是我想要的。

一种解决方案是将我的分类特征拆分为 bool(boolean) 特征。例如,如果变量“X”具有值“red”,“green”,“blue”,则我可以具有三个变量:“X是红色”,“X是绿色”,“X是蓝色”。这违反了给定类的变量的条件独立性的假设,因此似乎完全不合适。

另一种可能性是将变量编码为实值变量,其中0.0表示红色,1.0表示绿色,而2.0表示蓝色。使用GaussianNB似乎也完全不合适(出于明显的原因)。

我正在尝试做的事情似乎并不奇怪,但是我不明白如何将其适合sklearn给我的Naive Bayes模型。自己编写代码很容易,但是出于明显的原因,我更愿意使用sklearn(大多数是:避免错误)。

[编辑以解释为什么我不想要多项式NB是我想要的]:

我的理解是,在多项式NB中,特征 vector 由k iid样本中观察到 token 的次数组成。

我的理解是,这适用于存在基础文档类别的分类文档,然后假定文档中的每个单词均来自该类别特定的分类分布。文档将具有k token ,特征 vector 的长度等于词汇量,特征计数之和为k

就我而言,我有许多bernoulli变量,以及几个分类变量。但是这里没有“计数”的概念。

例如:类(class)是喜欢或不喜欢数学的人。预测变量是大学专业(分类),是否进入研究生院( bool(boolean) 值)。

我认为这不适合多项式,因为这里没有计数。

最佳答案

Some of the features are boolean, but other features are categorical and can take on a small number of values (~5).



这是一个有趣的问题,但实际上不仅仅是一个问题:
  • 如何处理NB中的分类功能。
  • 如何处理NB中的非均质特征(而且,正如我将在下文中指出的,甚至两个分类特征也是非均质的)。
  • 如何在sklearn中执行此操作。


  • 首先考虑单个分类特征。 NB假定/简化功能是独立的。您将其转换为几个二进制变量的想法正是 dummy variables的想法。显然,这些虚拟变量不是独立变量。然后对结果运行Bernoulli NB的想法隐含了独立性。虽然众所周知,实际上,NB在遇到因变量时不一定会损坏,但没有理由尝试将问题转换为NB的最差配置,尤其是因为多项式NB是一种非常容易的选择。

    相反,假设使用虚拟变量将单个类别变量转换为多列数据集后,您将使用多项式NB。多项式NB states的理论:

    With a multinomial event model, samples (feature vectors) represent the frequencies with which certain events have been generated by a multinomial ... where p i is the probability that event i occurs. A feature vector ... is then a histogram, with x i {\displaystyle x_{i}} x_{i} counting the number of times event i was observed in a particular instance. This is the event model typically used for document classification, with events representing the occurrence of a word in a single document (see bag of words assumption).



    因此,在这里,您的单个分类变量的每个实例都是一个“长度为1的段落”,并且分布恰好是多项式。具体来说,每一行在一个位置上具有1个位置,在其余所有位置上具有0个位置,因为长度为1的段落必须恰好具有一个单词,因此这些就是频率。

    请注意,从 sklearn的多项式NB的 Angular 来看,数据集是5列的事实,现在并不意味着独立。

    现在考虑您的数据集包含多个要素的情况:
  • 分类
  • 伯努利
  • 普通

  • 在使用NB的前提下,这些变量是独立的。因此,您可以执行以下操作:
  • 使用您的伪变量和多项式NB分别为每个分类数据构建NB分类器。
  • 一次为所有Bernoulli数据构建NB分类器-这是因为sklearn的Bernoulli NB只是几个单一功能Bernoulli NB的快捷方式。
  • 所有正常功能都与2相同。

  • 根据独立性的定义,实例的概率是这些分类器的实例概率的乘积。

    关于machine-learning - 如何将sklearn.naive_bayes与(多个)分类功能一起使用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38621053/

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