我正在使用Python的scikit-learn来开发一个分类算法,以预测特定客户的性别。其中,我想使用朴素贝叶斯分类器,但我的问题是我有混合了分类数据(例如:“在线注册”,“接受电子邮件通知”等)和连续数据(例如:“年龄”,“会员时长”等)。我之前没有使用过scikit,但我认为高斯朴素贝叶斯适用于连续数据,伯努利朴素贝叶斯可以用于分类数据。然而,由于我想在模型中有同时包含分类和连续数据,我不知道该如何处理。非常感谢任何想法!
我正在使用Python的scikit-learn来开发一个分类算法,以预测特定客户的性别。其中,我想使用朴素贝叶斯分类器,但我的问题是我有混合了分类数据(例如:“在线注册”,“接受电子邮件通知”等)和连续数据(例如:“年龄”,“会员时长”等)。我之前没有使用过scikit,但我认为高斯朴素贝叶斯适用于连续数据,伯努利朴素贝叶斯可以用于分类数据。然而,由于我想在模型中有同时包含分类和连续数据,我不知道该如何处理。非常感谢任何想法!
你至少有两个选择:
通过计算每个连续变量的百分位数,并使用这些百分位数作为分界点对连续变量进行分组,将所有数据转换为分类表示。例如,对于人的身高,创建以下组:"非常矮"、"矮"、"正常"、"高"、"非常高",确保每个组包含大约训练集人口的20%。我们在scikit-learn中没有自动执行此操作的实用程序,但自己做应该不太复杂。然后,在这些数据的分类表示上拟合一个唯一的多项式NB。
在数据的连续部分上独立地拟合高斯NB模型,在分类部分上拟合多项式NB模型。然后通过采用类别分配概率(使用predict_proba
方法)作为新特征来转换整个数据集:np.hstack((multinomial_probas,gaussian_probas))
,然后在新特征上重新拟合模型(例如新的高斯NB)。
P(age | gender)
和P(registration_type | gender)
。对于给定性别,年龄和注册类型之间的相关性将不会被捕捉到。 - SamGaussianNB
所假设的)在我的经验中并不能产生良好的结果。 - Himpredict_proba
是用于预测“测试”数据的概率。例如,我在训练数据上创建了2个单独的分类器,然后我可以使用它来预测我的剩余“测试”数据的概率。如果我然后从“测试”数据的predict_proba
结果中训练另一个高斯模型,那么我就没有什么可测试的了吗?我理解得对吗?干杯 - Chuck希望我不算太晚。我最近编写了一个名为Mixed Naive Bayes的库,使用NumPy编写。它可以假定在训练数据特征上有高斯分布和分类(multinoulli)分布的混合。
https://github.com/remykarem/mixed-naive-bayes
该库的API与scikit-learn类似。
在下面的示例中,假设前两个特征来自分类分布,后两个来自高斯分布。在fit()
方法中,只需指定categorical_features = [0,1]
,这表示列0和1将遵循分类分布。
from mixed_naive_bayes import MixedNB
X = [[0, 0, 180.9, 75.0],
[1, 1, 165.2, 61.5],
[2, 1, 166.3, 60.3],
[1, 1, 173.0, 68.2],
[0, 2, 178.4, 71.0]]
y = [0, 0, 1, 1, 0]
clf = MixedNB(categorical_features=[0,1])
clf.fit(X,y)
clf.predict(X)
可以通过pip install mixed-naive-bayes
来安装。有关用法的更多信息请参阅README.md文件。欢迎贡献代码 :)
predict-proba
函数并进行拟合?我很难弄清楚应该乘以什么...谢谢。 - Chuck@Yaron的方法需要额外的一步(第4步):
if self.gaussian_features.size != 0 and self.categorical_features.size != 0:
finals = t * p * self.priors
elif self.gaussian_features.size != 0:
finals = t * self.priors
elif self.categorical_features.size != 0:
finals = p * self.priors
normalised = finals.T/(np.sum(finals, axis=1) + 1e-6)
normalised = np.moveaxis(normalised, [0, 1], [1, 0])
return normalised
表示)在第269行(上面提取的第2行)相乘,然后像上面提取的底部第四行中的4.一样进行归一化,在第275行进行。
BernoulliNB
的predict_proba
方法)GaussianNB
的predict_proba
方法)BernoulliNB
或GaussianNB
的先验概率,因为它们相同) AND THEN