机器学习挑战:在java / groovy中诊断程序(数据挖掘,机器学习)

时间:2009-12-03 00:20:32

标签: java groovy artificial-intelligence machine-learning data-mining

我打算用Java开发程序来提供诊断。数据集分为两部分,一部分用于培训,另一部分用于测试。我的程序应该学习从训练数据中分类(BTW其中包含30个问题的答案,每个新栏目,新行中的每个记录最后一栏将被诊断为0或1,在数据诊断栏的测试部分将为空 - 数据集包含大约1000条记录),然后在测试部分数据时进行预测:/

我从未做过类似的事情,所以我会感谢任何有关解决类似问题的建议或信息。

我在考虑Java Machine Learning图书馆或Java Data Mining Package,但我不确定这是不是正确的方向......?我仍然不确定如何应对这一挑战......

请告知。

一切顺利!

5 个答案:

答案 0 :(得分:13)

我强烈建议您使用Weka来完成任务 它是一系列机器学习算法,具有用户友好的前端,可以实现许多不同类型的功能和模型选择策略 使用它可以做很多非常复杂的事情,而不需要做任何编码或数学 制作人还发表了pretty good textbook,解释了数据挖掘的实际方面 一旦掌握了它,就可以使用它的API将任何分类器集成到你自己的java程序中

答案 1 :(得分:7)

Hi As 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 Engine,它遍历树的每个节点,要求用户提供输入(文本/无线电/列表)并将值用作输入到下一个可能的节点谓词。

PMML标准可以在这里找到:http://www.dmg.org/这里只需要TreeModel。 NetBeans XML Plugin是一个很好的模式识别编辑器,用于PMML创作。 Altova XML可以做得更好,但成本为$$。

也可以使用RDBMS存储数据集并自动创建PMML!我没试过。

祝你的项目好运,如果你需要进一步的投入,请随时告诉我。

答案 2 :(得分:6)

有各种算法属于“机器学习”类别,哪种算法适合您的情况取决于您正在处理的数据类型。

如果您的数据基本上包含一组问题到一组诊断的映射,每个诊断可以是是/否,那么我认为可能有效的方法包括神经网络和基于自动构建决策树的方法测试数据。

我看看一些标准文本,如Russel& Norvig(“人工智能:现代方法”)和其他AI /机器学习的介绍,看看你是否可以轻松地将他们提到的算法适应你的特定数据。另请参阅O'Reilly,“编程集体智慧”,了解一些可能适合您案例的算法的Python代码示例。

如果你能阅读西班牙语,墨西哥出版社Alfaomega近年来也发表了各种与人工智能相关的好文章。

答案 3 :(得分:6)

这是一个分类问题,而不是真正的数据挖掘。一般方法是从每个数据实例中提取特征,并让分类算法从特征和结果(对于您为0或1)中学习模型。大概你的30个问题中的每一个都是它自己的特征。

您可以使用许多分类技术。支持向量机很受欢迎,因为它是最大熵。我没有使用Java机器学习库,但是我一眼就看不到其中任何一个。 OpenNLP项目具有最大熵实现。 LibSVM有一个支持向量机实现。您几乎肯定必须将数据修改为库可以理解的内容。

祝你好运!

更新:我同意另一位评论者的观点,即Russel和Norvig是一本很棒的AI书,其中讨论了其中的一些内容。 Bishop的“模式识别和机器学习”如果您对肮脏和肮脏的细节感兴趣,则会深入讨论分类问题。

答案 4 :(得分:3)

您的任务对于神经网络来说是经典的,它首先用于解决确切的分类任务。神经网络在任何语言中都有相当简单的实现,它是“机器学习”的“主流”,更接近AI而不是其他任何语言。 您只需实现(或获得现有实现)标准神经网络,例如通过错误反向传播进行学习的多层网络,并在循环中为其提供学习示例。经过一段时间的学习,你会得到真正的例子。 您可以从这里开始阅读有关神经网络的更多信息: http://en.wikipedia.org/wiki/Neural_network http://en.wikipedia.org/wiki/Artificial_neural_network 您还可以在此处获得许多现成实现的链接: http://en.wikipedia.org/wiki/Neural_network_software