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

我问自己,大多数人通常是自己编写机器学习算法,还是更可能使用现有的解决方案,如Weka或R包。

当然,这取决于问题本身——但假设我想使用像神经网络这样的常见解决方案。还有理由自己编写吗?是为了更好地理解机制并进行调整?还是标准化解决方案的思想更为重要?


回答:

这不是一个适合Stackoverflow的问题。这是一个观点问题,而不是编程问题。

尽管如此,以下是我的看法:

这取决于你想做什么。

  • 如果你想找出哪种算法对你手头的数据问题最有效,可以尝试ELKI、Weka、R、Matlab、SciPy等。尽可能尝试所有你能找到的算法,并花更多时间预处理你的数据。

  • 如果你知道需要哪种算法并需要将其投入生产,这些工具中的许多可能无法提供足够好的性能或易于集成。相反,检查是否能找到像libSVM这样的低级库,这些库能提供你需要的功能。如果这些不存在,就自己编写优化代码。

  • 如果你想在这个领域进行研究,最好扩展现有工具。ELKI和Weka有你可以接入的API来提供扩展。R实际上没有API(CRAN真是一团糟…),但人们只是把代码放在某个地方(希望)加上使用手册。扩展这些框架可以节省你很多努力:你可以直接使用比较方法,并且可以重用很多他们的代码。例如,ELKI有很多索引结构来加速算法。大多数时候,编写索引加速比实际算法本身要难得多。所以如果你能重用现有的索引,这也会使你的算法更快(而且你还将从这些框架未来的改进中受益)。

  • 如果你想了解现有算法,最好自己实现它们。你会惊讶地发现,优化某些算法比课堂上教的要复杂得多。例如,APRIORI。基本思想相当简单。但要正确处理所有修剪细节,我认为20个学生中只有1个能掌握这些细节。如果你实现了APRIORI,然后将其与已知的优秀实现进行基准测试,并试图理解为什么你的实现速度慢得多,那么你实际上会发现算法的微妙细节。不要惊讶于ELKI、R、Weka等之间的性能差异可能达到100倍——这仍然是同一个算法,只是实际使用的数据结构、内存布局等方面的实现效率不同。

Related Posts

L1-L2正则化的不同系数

我想对网络的权重同时应用L1和L2正则化。然而,我找不…

使用scikit-learn的无监督方法将列表分类成不同组别,有没有办法?

我有一系列实例,每个实例都有一份列表,代表它所遵循的不…

f1_score metric in lightgbm

我想使用自定义指标f1_score来训练一个lgb模型…

通过相关系数矩阵进行特征选择

我在测试不同的算法时,如逻辑回归、高斯朴素贝叶斯、随机…

可以将机器学习库用于流式输入和输出吗?

已关闭。此问题需要更加聚焦。目前不接受回答。 想要改进…

在TensorFlow中,queue.dequeue_up_to()方法的用途是什么?

我对这个方法感到非常困惑,特别是当我发现这个令人费解的…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注