什么分类算法可以处理数字和名义数据

时间:2013-06-14 10:25:23

标签: python algorithm classification document-classification

这可能是关于可能的分类算法的新手问题,所以请耐心等待。我有一个包含名义和数字属性的数据集,可能看下面的例子(不是实际的数据集)。什么样的算法最好是预测类并获得准确性(最好用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']或[' Type1','Type2','Type3']。数值用于表示属性的可能性。例如[0-1],值越接近1,它就越有可能评估为真。

2 个答案:

答案 0 :(得分:0)

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

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

答案 1 :(得分:0)

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

需要考虑的一些事项:

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

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

话虽如此,这里有一些热门话题要开始抬头,以了解可能性:

  • 随机森林/ CART /决策树(不同的算法,但在概念上相似)
  • 朴素贝叶斯
  • SVM(可能对您的名义参数没有帮助)
  • 神经网络
  • 聚类
  • KNN,正如Inti建议
  • 更多......

机器学习算法中潜在选择的世界非常巨大,没有什么能够完美运行,并且在所有情况下都没有任何效果。 This维基页面不是很好,但是找到算法是一个不错的开始。

一旦你确定了你认为适用于你的案例的任何算法,那么用Python或Java或者你有什么来查找库/实现。使用SciPy和NumPy,您可以假设Python具有相当大的可能性库。我怀疑Java也有一个庞大的库,但我个人更了解Python。