机器学习挑战:用 java/groovy 诊断程序(数据挖掘、机器学习)
Posted
技术标签:
【中文标题】机器学习挑战:用 java/groovy 诊断程序(数据挖掘、机器学习)【英文标题】:Machine learning challenge: diagnosing program in java/groovy (datamining, machine learning) 【发布时间】:2010-12-22 15:39:18 【问题描述】:我正计划用 Java 开发程序来提供诊断。数据集分为两部分,一是训练,二是测试。我的程序应该学习从训练数据中进行分类(顺便说一句,其中包含新列中每个问题的 30 个问题的答案,新行中的每条记录最后一列将是诊断 0 或 1,在数据诊断列的测试部分将为空 -数据集包含大约 1000 条记录),然后在测试部分数据中进行预测:/
我从来没有做过类似的事情,所以我会感谢任何关于解决类似问题的建议或信息。
我在考虑Java Machine Learning Library 或Java Data Mining Package,但我不确定这是否是正确的方向......?而且我仍然不确定如何应对这一挑战...
请指教。
一切顺利!
【问题讨论】:
+1:抵消反对票:这似乎是一个有趣的问题。 诊断什么?如果您尝试诊断程序中的问题,则会遇到停止问题。 【参考方案1】:您的任务是神经网络的经典任务,它首先旨在准确解决分类任务。神经网络在任何语言中的实现都比较简单,是“机器学习”的“主流”,比其他任何语言都更接近人工智能。 您只需实现(或获得现有实现)标准神经网络,例如通过错误反向传播学习的多层网络,并在循环中为其提供学习示例。经过一段时间的学习后,您将在实际示例中使用它。 您可以从这里开始阅读有关神经网络的更多信息: http://en.wikipedia.org/wiki/Neural_network http://en.wikipedia.org/wiki/Artificial_neural_network 您还可以在此处获得许多现成实现的链接: http://en.wikipedia.org/wiki/Neural_network_software
【讨论】:
【参考方案2】:我强烈建议您使用Weka 完成您的任务 它是一组机器学习算法,具有用户友好的前端,可促进许多不同类型的特征和模型选择策略 您可以使用它来做很多非常复杂的事情,而无需进行任何编码或数学运算 制造商还发布了pretty good textbook,解释了数据挖掘的实际方面 一旦你掌握了它的窍门,你就可以使用它的 API 将它的任何分类器集成到你自己的 java 程序中
【讨论】:
谢谢,我去Weka看看。 该软件和教科书非常适合让您深入了解机器学习,我强烈推荐它们。【参考方案3】:嗨,正如 Gann Bierner 所说,这是一个分类问题。我所知道的满足您需求的最佳分类算法是 Ross Quinlan 算法。它在概念上很容易理解。
对于分类算法的现成实现,最好的选择是 Weka。 http://www.cs.waikato.ac.nz/ml/weka/。我研究过 Weka 但没有使用,因为我发现它有点太晚了。
我使用了一个更简单的实现,称为 JadTi。它适用于较小的数据集,例如您的数据集。我已经用过很多次了,所以可以自信地说出来。 JadTi 可以在以下位置找到:
http://www.run.montefiore.ulg.ac.be/~francois/software/jaDTi/
说了这么多,您的挑战将是在网络上构建一个可用的界面。为此,数据集的使用将受到限制。数据集基本上是在您已经拥有训练集的前提下工作的,并且您只需一步输入新的测试数据集,您就会立即得到答案。
但我的应用程序,也可能是你的应用程序,是一步一步的用户发现,具有在决策树节点上来回切换的功能。
为了构建这样一个应用程序,我从我的训练集创建了一个 PMML 文档,并构建了一个 Java 引擎,它遍历树的每个节点,要求用户提供输入(文本/收音机/列表)并将值用作输入到下一个可能的节点谓词。
PMML 标准可以在这里找到:http://www.dmg.org/ 这里您只需要 TreeModel。 NetBeans XML Plugin 是用于 PMML 创作的优秀模式感知编辑器。 Altova XML 可以做得更好,但要花费 $$。
也可以使用 RDBMS 来存储您的数据集并自动创建 PMML!我没试过。
祝您的项目好运,如果您需要进一步的意见,请随时告诉我。
【讨论】:
你怎么能如此明确地说决策树是手头任务的最佳算法? 你是对的,对不起。我想我会首先尝试通过 SVM 运行它,因为它很容易快速完成(例如,只需将数据以 libsvm 理解并运行它的格式放置)并且通常相对于数量提供出色的性能你必须做的工作才能让它工作。你可以尝试提升、朴素贝叶斯、(惩罚)逻辑回归(查看带有相关阅读的“glmnet”)......不过,我很难选择一个作为“最好的”。 @srini.venigalla 感谢您的意见!【参考方案4】:这是一个分类问题,不是真正的数据挖掘。一般的方法是从每个数据实例中提取特征,让分类算法从特征和结果中学习模型(对你来说是 0 或 1)。大概你的 30 个问题中的每一个都有自己的特点。
您可以使用许多分类技术。支持向量机和最大熵一样流行。我没有使用过 Java 机器学习库,但乍一看我没有看到其中任何一个。 OpenNLP 项目具有最大熵实现。 LibSVM 有一个支持向量机实现。几乎可以肯定,您必须将数据修改为图书馆可以理解的内容。
祝你好运!
更新:我同意另一位评论者的观点,即 Russel 和 Norvig 是一本很棒的 AI 书籍,其中讨论了其中的一些内容。如果您对低俗和肮脏的细节感兴趣,Bishop 的“模式识别和机器学习”会深入讨论分类问题。
【讨论】:
谢谢,我有这本书的副本,真的很棒!【参考方案5】:有多种算法属于“机器学习”类别,哪种算法适合您的情况取决于您处理的数据类型。
如果您的数据基本上由一组问题与一组诊断的映射组成,每个诊断可以是是/否,那么我认为可能有效的方法包括神经网络和自动构建决策树的方法测试数据。
我会看一些标准文本,例如 Russel & Norvig(“人工智能:一种现代方法”)和其他对 AI/机器学习的介绍,看看您是否可以轻松地将他们提到的算法改编为您的特定数据。另请参阅 O'Reilly,“Programming Collective Intelligence”,了解可能适用于您的情况的一种或两种算法的一些示例 Python 代码。
如果你会看西班牙语,墨西哥出版社 Alfaomega 近年来也发表了各种不错的 AI 相关介绍。
【讨论】:
@Neil Coffey - 不懂西班牙语 :( 但我会查看 O'Reilly 的书。谢谢。以上是关于机器学习挑战:用 java/groovy 诊断程序(数据挖掘、机器学习)的主要内容,如果未能解决你的问题,请参考以下文章