【问题标题】:What classification algorithm can handle numeric and nominal data什么分类算法可以处理数字和名义数据
【发布时间】:2013-06-10 23:26:43
【问题描述】:

这可能是关于可能的分类算法的新手问题,所以请多多包涵。我有一个包含名义属性和数字属性的数据集,可能看起来像下面的示例(不是实际数据集)。什么样的算法最适合断言类并获得准确性(最好在 Python/Java 中)?

Classes: classA, classB, classC

attribute1: Recurrence <Yes, No>
attribute2: Subject <Math, Science, Geography>
attribute3: ProbabilityA <0.0 - 1.0>
atrribute4: ProbabilityB <0.0 - 1.0>
attribute5: ProbabilityC <0.0 - 1.0>

标称数据可以包含[1,-1]的数值,其中1代表存在,-1不存在,也可以是一组字符串值,例如['YES', 'NO']或['类型 1'、'类型 2'、'类型 3']。数值用于表示属性的可能性。例如 [0-1],值越接近 1,越有可能评估为真。

【问题讨论】:

    标签: python algorithm classification document-classification


    【解决方案1】:

    嗯,这绝不是一个“新手问题”,实际上相当复杂。虽然 Inti 的建议肯定是一个好的开始,但它确实取决于很多因素,因此没有简单的“正确答案”。

    需要考虑的一些事项:

    • 速度与准确性
    • 内存限制
    • 训练集(您可以使用多大的数据集来“学习”如何分类)
    • 测试数据集(您将“保留”多少数据集以验证/衡量算法的质量)
    • 实施:例如,这是否会以“批处理模式”运行,或者您是否需要以持续的方式对您希望分类的每个新观察进行分类。

    在知道更多这样的信息之前,很难给出非常精确的细节。 (一般来说,在这个论坛上,你对问题付出的努力越多,其他人对他们的回答也付出的努力越多。)

    话虽如此,这里有一些流行语可以开始查找,让您了解各种可能性:

    • 随机森林/CART/决策树(不同的算法,但概念相似)
    • 朴素贝叶斯
    • SVM(可能对您拥有的标称参数没有帮助)
    • 神经网络
    • 集群
    • KNN,正如 Inti 建议的那样
    • 还有更多...

    机器学习算法中的潜在选项非常庞大,没有任何东西可以完美运行,也没有任何东西在所有情况下都同样有效。 This wiki 页面不是很好,但它是寻找算法的一个不错的开始。

    一旦您决定了您认为适合您的情况的任何算法,然后查找 Python 或 Java 或您拥有的库/实现。使用 SciPy 和 NumPy,您可以假设 Python 具有相当大的可能性库。我怀疑 Java 也有一个庞大的库,但我个人对 Python 的了解要好得多。

    【讨论】:

      【解决方案2】:

      KNN(K 最近邻)。您可以看到工具 Weka(但它是在 java 中的)。其实算法很简单,效果也不错。唯一的问题是 Knn 是一个惰性分类器;因此,训练阶段很快(几乎是空的),分类阶段更慢。现在,这仅在您的训练集非常大的情况下才重要,因为算法是 O(N*M),其中 N 是训练实例的数量,M 是属性的数量。在最坏的情况下,您可以在数据中执行一些过滤。 Weka 有一些方法可以做到这一点。

      PS。在 Weka 中,算法有一个不同的名称,IBK

      【讨论】:

        猜你喜欢
        • 2012-12-25
        • 1970-01-01
        • 2019-09-30
        • 2018-10-22
        • 2018-06-01
        • 2020-12-24
        • 2013-02-20
        • 2016-02-02
        • 1970-01-01
        相关资源
        最近更新 更多