使用scikit-learn在朴素贝叶斯分类器中混合分类数据和连续数据
classification
data-mining
machine-learning
python
7
0

我正在Python中使用scikit-learn开发分类算法,以预测某些客户的性别。除其他外,我想使用Naive Bayes分类器,但我的问题是我混合使用了分类数据(例如:“在线注册”,“接受电子邮件通知”等)和连续数据(例如:“年龄”,“长度”成员资格”等)。我以前没有使用过scikit,但我想高斯朴素贝叶斯适用于连续数据,而伯努利朴素贝叶斯可以用于分类数据。但是,由于我想在模型中同时包含分类数据和连续数据,所以我真的不知道该如何处理。任何想法将不胜感激!

参考资料:
Stack Overflow
收藏
评论
共 3 个回答
高赞 时间 活跃

希望我还不晚。我最近用NumPy编写了一个名为Mixed Naive Bayes的库。可以在训练数据特征上假设混合了高斯分布和分类(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安装pip install mixed-naive-bayes 。 README.md文件中有关用法的更多信息。拉取请求非常感谢:)

收藏
评论

简单的答案:乘以结果!!一样的。

朴素贝叶斯(Naive Bayes)基于贝叶斯定理和每对特征之间的独立性的“朴素”假设-意味着您可以根据特定特征计算贝叶斯概率而不保留其他特征-这意味着该算法将一个特征的每个概率乘以第二个特征的概率(我们完全忽略了分母-因为它只是一个归一化)。

所以正确的答案是:

  1. 根据分类变量计算概率。
  2. 从连续变量计算概率。
  3. 乘以1.和2。
收藏
评论

您至少有两个选择:

  • 通过为每个连续变量计算百分位数,然后使用百分位数作为bin边界对连续变量进行装箱,将所有数据转换为分类表示。例如,对于一个人的身高,请创建以下分类箱:“非常小”,“很小”,“常规”,“较大”,“非常大”,以确保每个分类箱包含约20%的训练集人口。我们没有任何实用程序可以在scikit-learn中自动执行此操作,但是您自己做起来应该不会太复杂。然后在数据的这些分类表示上拟合唯一的多项式NB。

  • 在数据的连续部分上独立拟合高斯NB模型,在分类部分上独立拟合多项式NB模型。然后通过将类分配概率(带有predict_proba方法)作为新功能来转换所有数据集: np.hstack((multinomial_probas, gaussian_probas)) ,然后在新功能上重新拟合新模型(例如新的高斯NB)。

收藏
评论
新手导航
  • 社区规范
  • 提出问题
  • 进行投票
  • 个人资料
  • 优化问题
  • 回答问题

关于我们

常见问题

内容许可

联系我们

@2020 AskGo
京ICP备20001863号