0

这可能是关于可能的分类算法的新手问题,所以请多多包涵。我有一个包含名义属性和数字属性的数据集,可能看起来像下面的示例(不是实际数据集)。哪种算法最适合断言类并获得准确性(最好在 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', '类型2','类型3']。数值用于表示属性的可能性。例如 [0-1],值越接近 1,越有可能评估为真。

4

2 回答 2

0

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

需要考虑的一些事项:

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

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

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

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

机器学习算法的潜在选择世界非常庞大,没有什么能完美运行,也没有什么能在所有情况下都同样有效。 这个wiki 页面不是很好,但它是寻找算法的一个不错的开始。

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

于 2013-07-02T00:52:57.423 回答
0

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

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

于 2013-06-14T10:40:06.340 回答