Machine learning 如何将sklearn.naive_bayes与(多个)分类功能结合使用?
我想学习一个朴素的贝叶斯模型来解决一个问题,其中类是布尔型的(采用两个值中的一个)。其中一些功能是布尔型的,但其他功能是分类的,可以使用少量值(~5) 如果我所有的特性都是布尔型的,那么我想使用Machine learning 如何将sklearn.naive_bayes与(多个)分类功能结合使用?,machine-learning,statistics,scikit-learn,naivebayes,Machine Learning,Statistics,Scikit Learn,Naivebayes,我想学习一个朴素的贝叶斯模型来解决一个问题,其中类是布尔型的(采用两个值中的一个)。其中一些功能是布尔型的,但其他功能是分类的,可以使用少量值(~5) 如果我所有的特性都是布尔型的,那么我想使用sklearn.naive\u bayes.BernoulliNB。显然,sklearn.naiver_bayes.MultinomialNB不是我想要的 一种解决方案是将我的分类特征拆分为布尔特征。例如,如果变量“X”的值为“red”、“green”、“blue”,那么我可以有三个变量:“X是红色的”、
sklearn.naive\u bayes.BernoulliNB
。显然,sklearn.naiver_bayes.MultinomialNB
不是我想要的
一种解决方案是将我的分类特征拆分为布尔特征。例如,如果变量“X”的值为“red”、“green”、“blue”,那么我可以有三个变量:“X是红色的”、“X是绿色的”、“X是蓝色的”。这违反了给定类的变量的条件独立性假设,因此它似乎完全不合适
另一种可能是将变量编码为实值变量,其中0.0表示红色,1.0表示绿色,2.0表示蓝色。这似乎也完全不适合使用GaussianNB(出于明显的原因)
我试图做的事情看起来并不奇怪,但我不知道如何将其应用到sklearn给我的朴素贝叶斯模型中。我自己编写代码很容易,但出于明显的原因(大多数:为了避免bug),如果可能的话,我更喜欢使用sklearn
[编辑以解释为什么我不认为多项式NB是我想要的]:
我的理解是,在多项式NB中,特征向量由在k
iid样本中观察到标记的次数组成
我的理解是,这是一个适合分类的文档,其中有一个底层文档类,然后假设文档中的每个单词都是从特定于该类的分类分布中提取的。文档将具有k
标记,特征向量的长度将等于词汇表大小,特征计数的总和将为k
在我的例子中,我有很多贝努利变量,加上一些分类变量。但这里并没有“计数”的概念
班级是指喜欢或不喜欢数学的人。预测因素是大学专业(分类)和他们是否上过研究生院(布尔值)
我不认为这符合多项式,因为这里没有计数
其中一些功能是布尔型的,但其他功能是分类的,可以使用少量值(~5)
这是一个有趣的问题,但它实际上不仅仅是一个问题:
sklearn
中执行此操作首先考虑一个单一的分类特征。NB假设/简化了特征是独立的。您将其转换为几个二进制变量的想法正是。显然,这些虚拟变量不是独立的。然后对结果运行Bernoulli NB的想法隐含地假设了独立性。虽然众所周知,在实践中,面对因变量时,NB不一定会破裂,但没有理由尝试将问题转化为NB的最差配置,特别是因为多项式NB是一个非常容易的选择 相反,假设使用虚拟变量将单个分类变量转换为多列数据集后,使用多项式NB。多项式NB的理论: 对于多项式事件模型,样本(特征向量)表示多项式事件生成的特定事件的频率。。。式中,pi是事件i发生的概率。特征向量。。。然后是一个直方图,其中xi{\displaystyle x{i}}x{i}计算在特定实例中观察到事件i的次数。这是通常用于文档分类的事件模型,事件表示单个文档中某个单词的出现(请参见单词袋假设) 因此,在这里,单个分类变量的每个实例都是一个“长度为1的段落”,并且分布是多项式的。具体来说,每一行在一个位置上有1个,在所有其他位置上有0个,因为长度为1的段落必须正好有一个单词,因此这些就是频率 请注意,从
sklearn
的多项式NB的角度来看,数据集是5列的事实现在并不意味着独立性假设
现在考虑这样一种情况,即您有一个由几个特性组成的数据集:
sklearn
的贝努利NB只是几个单一特征贝努利NB的快捷方式CategoricalNB
是要添加到naive_bayes模块中的一个新类。它是夜间建造的从mixed_naive_bayes导入MixedNB
X=[[0,0],
[1, 1],
[2, 1],
[1, 1],
[0, 2]]
y=[0,0,1,1,0]
clf=MixedNB(分类特征='all')
clf.配合(X,y)
clf.predict(X)
请看我在类似问题中的回答。您能详细说明原因吗