我问自己一个问题,大多数人是否通常自己编写机器学习算法,或者他们是否可能使用现有的解决方案,如 Weka 或 R 包。
当然这取决于问题 - 但假设我想使用像神经网络这样的通用解决方案。还有理由自己编码吗?更好地理解机制并适应它?还是标准化解决方案的想法更重要?
我问自己一个问题,大多数人是否通常自己编写机器学习算法,或者他们是否可能使用现有的解决方案,如 Weka 或 R 包。
当然这取决于问题 - 但假设我想使用像神经网络这样的通用解决方案。还有理由自己编码吗?更好地理解机制并适应它?还是标准化解决方案的想法更重要?
这对 Stackoverflow 来说不是一个好问题。这是一个意见问题,而不是编程问题。
不过,这是我的看法:
这取决于你想做什么。
如果您想找到哪种算法最适合您手头的数据问题,请尝试 ELKI、Weka、R、Matlab、SciPy 等等。尝试所有你能找到的算法,并花更多的时间来预处理你的数据。
如果您知道您需要哪种算法并且需要将其投入生产,那么其中许多工具的性能将不够好或不够容易集成。相反,请检查您是否可以找到提供所需功能的低级库,例如 libSVM。如果这些不存在,请滚动您自己的优化代码。
如果你想在这个领域做研究,你最好扩展现有的工具。ELKI 和 Weka 具有 API,您可以插入这些 API 以提供扩展。R 并没有真正的 API(CRAN 它是一团糟......),但人们只是将他们的代码转储到某个地方并(希望)添加一个手册如何使用它。扩展这些框架可以为您节省大量精力:您可以使用比较方法,并且可以重用它们的大量代码。例如,ELKI 有很多索引结构来加速算法。大多数时候,索引加速比实际算法更难编写。因此,如果您可以重用现有索引,这也将使您的算法更快(并且您还将受益于这些框架的未来增强)。
如果您想了解现有算法,您最好自己实现它们。您会惊讶地发现,优化某些算法比课堂上教的要多得多。例如先验。基本思想非常简单。但是把所有的修剪细节都做好了,我说 20 个学生中有 1 个得到了这些细节。如果您实现 APRIORI,然后将其与已知的良好实现进行基准比较,并尝试了解为什么您的实现要慢得多,那么您实际上会发现算法的微妙细节。并且不要惊讶地看到 ELKI、R、Weka 等之间存在 100 倍的性能差异 - 它仍然可以是相同的算法,只是在实际使用的数据结构、内存布局等方面或多或少地有效实现。