19

我计划开发的Java程序,它将给诊断诊断程序。数据集分为两部分,一部分用于训练,另一部分用于测试。我的程序应该学习从训练数据中进行分类(BTW中包含每个新列30个问题的答案,每个新列中的记录最后一列将诊断为0或1,在数据诊断列的测试部分将为空 - 数据组包含约1000个记录),然后进行数据的测试部分预测:/机器学习的挑战:在Java/Groovy中(数据挖掘,机器学习)

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

我正在考虑Java Machine Learning图书馆或Java Data Mining Package但我不确定是否正确的方向......?我真不知道如何应对这种挑战?

请指教。

一切顺利!

+5

+1:以抵消downvote:这似乎是一个有趣的问题。 – 2009-12-03 00:59:59

+0

@ Jim Ferrans - 谢谢Jim! – 2009-12-03 22:16:26

+0

Diagonoising是什么?如果您试图在程序中诊断问题,您将遇到暂停问题。 – monksy 2011-03-18 16:41:52

回答

7

嗨,江恩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!我没有尝试过。

祝您的项目顺利,请随时告诉我是否需要进一步的投入。

+1

你如何明确地表明决策树是最好的算法是什么? – 2009-12-03 02:56:48

+3

我说,“我知道”,对吧? 你有什么建议吗? – 2009-12-03 03:03:58

+1

你说得对,对不起,我想我会先尝试通过SVM运行它, d很容易做到很快(例如,只需将数据以libsvm理解并运行的格式放入即可),并且通常会提供很好的性能相对于你为了让它工作而必须做的工作量。虽然你可以尝试提高,朴素的贝叶斯,(惩罚性)逻辑回归(检查“glmnet”w /相关阅读)......但我很难挑选一个“最好的”。 – 2009-12-03 03:21:47

6

有迹象表明,陷入“机器学习”的范畴各种算法,并为您的具体情况取决于您正在处理的数据的类型,是正确的。

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

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

如果你可以看到西班牙,墨西哥出版社Alfaomega也纷纷发表各种良好的AI相关的介绍在最近几年。

+1

@ Neil Coffey - 没有西班牙语的知识:(但是我会检查O'Reilly的书。谢谢。 – 2009-12-03 22:46:27

6

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

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

祝你好运!

更新:我同意其他评论者罗素和诺维格是一本很棒的AI书,讨论了一些这方面的内容。 Bishop的“模式识别和机器学习”深入讨论了分类问题,如果您对沮丧和肮脏的细节感兴趣。

+2

谢谢,我收到了这本书的副本,它确实很棒! – 2009-12-03 22:03:56

13

我强烈建议你使用Weka您的任务
它的机器学习算法与用户友好的前端收集有利于很多不同类型的功能和模式选择策略的
你可以做很多的真正复杂的东西使用这个,而不需要做任何编码或数学
制造商还发布了一个解释数据挖掘的实际方面的pretty good textbook
一旦你掌握了它,你可以使用它的API来集成任何它的分类器到你自己的java程序中

+0

谢谢,我会有一个 – 2009-12-03 22:14:23

+3

这个软件和教科书真的很适合让你的机器学习,我强烈推荐他们。 – gverdouw 2009-12-04 23:48:26

+5

+1对Weka。另一个好的工具包是* RapidMiner * – Amro 2009-12-13 20:08:43

3

您的任务对于神经网络来说是经典的,它首先打算解决精确的分类任务。神经网络在任何语言中都有相当简单的实现,它是“机器学习”的“主流”,比其他任何东西都更接近于人工智能。 你只是实现(或得到现有的实现)标准神经网络,例如多层网络,通过错误反向传播进行学习,并在循环中给它学习示例。经过一段时间的这种学习后,你会得到它真正的例子。 你可以阅读更多有关从这里开始的神经网络: http://en.wikipedia.org/wiki/Neural_network http://en.wikipedia.org/wiki/Artificial_neural_network 你也可以链接到这里很多现成的实现: http://en.wikipedia.org/wiki/Neural_network_software