提问者:小点点

朴素贝叶斯分类器中分类数据和连续数据的混合


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


共3个答案

匿名用户

你至少有两个选择:

>

在数据的连续部分独立拟合高斯NB模型,在类别部分独立拟合多项式NB模型。然后通过将类赋值概率(使用predict_proba方法)作为新特征来转换所有数据集:np.hstack((multinomial_probas,gaussian_probas)),然后在新的特点。

匿名用户

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

朴素贝叶斯基于应用贝叶斯定理和每对特征之间独立性的“朴素”假设——这意味着你计算依赖于特定特征的贝叶斯概率,而不持有其他特征——这意味着算法将一个特征的每个概率与概率相乘从第二个特征(我们完全忽略分母——因为它只是一个规范化器)。

因此,正确的答案是:

  1. 根据分类变量计算概率

匿名用户

希望我不会太迟。我最近写了一个名为混合朴素贝叶斯的库,用NumPy写的。它可以在训练数据特征上假设高斯分布和分类分布的混合。

https://github.com/remykarem/mixed-naive-bayes

该库的编写使得API类似于scikit learn。

在下面的示例中,让我们假设前2个特征来自分类分布,最后2个特征是高斯分布。在fi()方法中,只需指定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可通过Pip安装混合朴素贝叶斯安装。自述文件中提供了有关用法的更多信息。md文件。非常感谢拉取请求:)