实践中的机器学习:自己编写算法还是使用Weka?

3
我问自己,大多数人通常自己编写机器学习算法,还是他们更有可能使用像Weka或R包这样的现有解决方案。
当然,这取决于问题的具体情况 - 但假设我想使用像神经网络这样的常见解决方案。是否仍有必要自己编写代码?为了更好地理解机制并进行适应?还是标准化解决方案的想法更重要?

1
这个问题可能太偏题了,无法回答。我的建议是问问自己,你想要建立什么或者学到什么。如果更多的是后者,那么就自己写代码吧。 - DuckMaestro
@DuckMaestro2:我会在两件事情中学到一些东西。我将使用这两种技术来构建一些东西。当然,编写代码是两者都需要的,但是自己实现算法需要更多的编码工作。 关于哪个主题是不相关的? - Martin
1个回答

10

这不是一个适合在Stackoverflow上发布的好问题。这是一个主观性问题,而不是一个编程问题。

然而,以下是我的看法:

这取决于你想做什么。

  • 如果您想找到针对手头数据问题最有效的算法,请尝试使用ELKI,Weka,R,Matlab,SciPy等工具。尝试使用您能找到的所有算法,并花更多时间预处理您的数据。

  • 如果您知道需要哪种算法并需要将其投入生产,许多这些工具的性能不够好或者集成不够容易。相反,请检查是否可以找到低级别库(如libSVM)提供所需的功能。如果这些库不存在,请编写自己的优化代码。

  • 如果您想在此领域进行研究,则最好扩展现有工具。ELKI和Weka具有可插入API来提供扩展功能。R实际上没有API(CRAN很混乱...),但人们只会把他们的代码丢在某个地方并(希望)添加说明如何使用它。扩展这些框架可以节省您大量的精力:您已经准备好使用比较方法,并且可以重用其中的大量代码。例如,ELKI具有许多索引结构以加速算法。大多数情况下,索引加速比编写实际算法更难。因此,如果您可以重用现有的索引,这也将使您的算法运行得更快(并且您还将受益于对这些框架未来增强的好处)。

  • 如果你想了解现有算法,最好自己实现一下。你会惊讶地发现,优化某些算法的细节远比课堂上教授的要多得多。例如APRIORI算法,其基本思想相当简单。但要把所有剪枝细节都搞对,我认为只有20个学生中的1个人能够做到。如果你实现了APRIORI算法,并将其与已知的良好实现进行基准测试,尝试理解为什么你的实现速度要慢得多,那么你实际上会发现算法的微妙之处。而且不要感到惊讶,ELKI、R、Weka等工具之间可能会存在100倍的性能差异——这仍然可能是相同的算法,只是在实际数据结构、内存布局等方面实现得更或者更少有效率。


  • 感谢您指出这一点,尽管这并不是stackoverflow建立的100%目的。自己开始学习机器学习很困难,因此这对我非常有帮助。 - Martin
    在帮助部分中有一些关于好问题和坏问题的提示。总体而言,投票、闲聊和观点类问题并不适合QA网站,而应该去聊天或讨论论坛。通常情况下,涉及特定问题的小代码摘录的问题是好问题。 - Has QUIT--Anony-Mousse

    网页内容由stack overflow 提供, 点击上面的
    可以查看英文原文,
    原文链接