【问题标题】:NaiveBayes classifier handling different data types in python在 python 中处理不同数据类型的 NaiveBayes 分类器
【发布时间】:2015-09-05 09:48:30
【问题描述】:

我正在尝试在 Python 中实现朴素贝叶斯分类器。我的属性是不同的数据类型:Strings、Int、float、Boolean、Ordinal

我可以使用高斯朴素贝叶斯分类器(Sklearn.naivebayes:Python 包),但我不知道如何处理不同的数据类型。分类器抛出错误,说明无法处理除 Int 或 float 以外的数据类型

我可能想到的一种方法是将字符串编码为数值。但我也怀疑,如果我这样做,分类器的性能会有多好。

【问题讨论】:

    标签: python scikit-learn gaussian naivebayes


    【解决方案1】:

    是的,您需要将字符串转换为数值 朴素贝叶斯分类器无法处理字符串,因为字符串无法进入数学方程。

    如果您的字符串有一些“标量值”,例如“大、中、小”,您可能希望将它们分类为“3,2,1”, 但是,如果您的字符串是没有顺序的东西,例如颜色或名称,您可以这样做或分配二进制变量,每个变量都引用颜色或名称,如果它们不多的话。

    例如,如果您要对汽车进行分类,它们可以是红色蓝色和绿色,您可以定义变量“红色”“蓝色”“绿色”,取值 0/1,具体取决于汽车的颜色。

    【讨论】:

    • 对于第一种情况,考虑使用 LabelEncoder。第二个你有几种方法可以使用 DictVectorizer 或 OneHotEncoder
    • 好吧,如果我使用Label Encoder/One Hot Encoder,然后我想在上面使用Gaussian Naive Bayes,会不会有问题。我们不能说编码值会遵循高斯分布,对吗?特别是二进制不会是高斯的。
    • 是的,您应该为此使用多项式或伯努利 NB。
    • @AndreasMueller :如果是这样,我有一组连续特征和分类特征。在做 python sklearn.naivebayes 时如何组合不同的分布?
    • bernoulli 会将它们离散化。也许只是使用不同的线性分类器?
    【解决方案2】:

    不要手动转换数据类型,而是使用字典向量化。

    http://scikit-learn.org/stable/modules/generated/sklearn.feature_extraction.DictVectorizer.html

    【讨论】:

      猜你喜欢
      • 2019-05-04
      • 2014-03-28
      • 2020-12-08
      • 2017-09-14
      • 2012-02-05
      • 2013-09-02
      • 1970-01-01
      • 2018-01-19
      • 2018-01-23
      相关资源
      最近更新 更多