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