我正在使用Python中的scikit learn开发一个分类算法,以预测特定客户的性别。除其他外,我想使用Naive Bayes分类器,但我的问题是,我混合了分类数据(例如:“在线注册”、“接受电子邮件通知”等)和连续数据(例如:“年龄”、“会员长度”等)。我以前很少使用scikit,但我认为高斯朴素贝叶斯适合于连续数据,而伯努利朴素贝叶斯可以用于分类数据。然而,由于我希望在模型中同时包含分类数据和连续数据,所以我真的不知道如何处理这个问题。任何想法都将不胜感激!
你至少有两个选择:
>
在数据的连续部分独立拟合高斯NB模型,在类别部分独立拟合多项式NB模型。然后通过将类赋值概率(使用predict_proba
方法)作为新特征来转换所有数据集:np.hstack((multinomial_probas,gaussian_probas))
,然后在新的特点。
简单的答案是:乘以结果!!都一样。
朴素贝叶斯基于应用贝叶斯定理和每对特征之间独立性的“朴素”假设——这意味着你计算依赖于特定特征的贝叶斯概率,而不持有其他特征——这意味着算法将一个特征的每个概率与概率相乘从第二个特征(我们完全忽略分母——因为它只是一个规范化器)。
因此,正确的答案是:
希望我不会太迟。我最近写了一个名为混合朴素贝叶斯的库,用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文件。非常感谢拉取请求:)