选择分类算法对名义数据和数字数据的混合进行分类?

Posted

技术标签:

【中文标题】选择分类算法对名义数据和数字数据的混合进行分类?【英文标题】:Choosing classification algorithm to classify mix of nominal and numeric data? 【发布时间】:2012-12-25 20:02:20 【问题描述】:

我有一个包含大约 100,000 条关于客户购买模式的记录的数据集。数据集包含

年龄(从 2 到 120 的连续值),但我也计划按年龄范围分类。 性别(0 或 1) 地址(只能是六种,我也可以用1到6的数字表示) 偏好店铺(只能来自 7 家店铺),这是我的班级问题。

所以我的问题是根据客户的年龄、性别和位置对偏好商店进行分类和预测。我尝试过使用朴素树和决策树,但它们的分类准确率在下面有点低。

我也在考虑逻辑回归,但我不确定性别和地址等离散值。但是,我也假设 SVM 有一些内核技巧,但还没有尝试过。

那么您建议使用哪种机器学习算法来提高这些功能的准确性。

【问题讨论】:

你可能需要更多的功能,你试过random forests了吗? 你说得对,我缺乏特征,但我拥有的数据集没有太多特征可以帮助我。所以我只想根据这些功能提高准确性 如果没有至少一些进一步的信息,这是不可能回答的。特征如何区分特征空间中的类?班级分布如何?特征值的分布是什么?即使你发布了整个数据集,我们也只能做你自己能做的事情——试试看什么有效。 【参考方案1】:

问题是您在连续尺度上表示名义变量,当您使用机器学习方法时,这会在类之间强加一种(虚假的)序数关系。例如,如果您将地址编码为六个可能的整数之一,则地址 1 更接近地址 2,而不是地址 3、4、5、6。当您尝试学习任何东西时,这将导致问题。

相反,将您的 6 值分类变量转换为 6 个二进制变量,每个变量对应一个分类值。然后,您的原始功能将产生六个功能,其中只有一个会出现。此外,将年龄保持为整数值,因为将其设为分类会丢失信息。

至于方法,它不太可能产生很大的不同(至少在最初)。选择更容易实现的那个。但是,请确保在测试集上运行之前在开发集上运行某种交叉验证参数选择,因为所有算法都具有会显着影响学习准确性的参数。

【讨论】:

谢谢你的精彩解释! @本艾莉森。您说使用二进制值表示分类值。像(KNN)这样的计算对二进制表示的值有影响吗? 关于序数关系,还有一点要补充:如果内存是一个问题,您可以根据需要“处理”变量集。例如,您只能选择 4 个变量,并且 addr 1 --> (1,0,0,0); addr 2 --> (0,1,0,0) 等。但是使用 addr 5 --> (1,1,0,0) 和 addr 6 --> (0,1,0,1)。如果您允许交互,那么它们仍然与只有 1 值等于 1 的任何事物“正交”。不过,Ben 的建议可能就足够了。 :)【参考方案2】:

您确实需要查看数据并确定您的标签与您当前拥有的功能之间是否存在足够的差异。因为特征很少但数据很多,所以像 kNN 这样的东西可以很好地工作。

您可以调整协同过滤来解决您的问题,因为这也适用于类似的功能。

【讨论】:

以上是关于选择分类算法对名义数据和数字数据的混合进行分类?的主要内容,如果未能解决你的问题,请参考以下文章

使用混合数字和分类数据进行无监督异常检测

可理解的聚类

如何在 WEKA 中执行属性的名义到数值转换?

聚类算法和分类算法总结

对具有分类数字和文本的数据进行预测。

具有混合数据类型(文本、数字、分类)的 Python scikit-learn 分类