使用哪个机器学习库[关闭]
Posted
技术标签:
【中文标题】使用哪个机器学习库[关闭]【英文标题】:Which machine learning library to use [closed] 【发布时间】:2011-02-24 07:30:47 【问题描述】:我正在寻找一个理想情况下具有以下功能的库:
实现多维数据的层次聚类(理想情况下基于相似度或距离矩阵) 实现支持向量机 在 C++ 中 有点记录(这似乎是最难的)我希望它使用 C++,因为我最喜欢这种语言,但如果库值得,我也会使用任何其他语言。我用谷歌搜索并找到了一些,但我真的没有时间全部尝试,所以我想听听其他人的经验。请仅在您对推荐的库有一定经验的情况下回答。
P.S.:我还可以为集群和 SVM 使用不同的库。
【问题讨论】:
github.com/josephmisiti/awesome-machine-learning 【参考方案1】:通用机器学习库:
这两个类似于Weka。但是,他们考虑到了效率。
1.鲨鱼(LGPL)
https://github.com/Shark-ML/Shark/
2.华夫饼 (LGPL)
http://waffles.sourceforge.net/
SVM 和其他线性分类器:
1.LibSVM(BSD风格)
2.LibLinear(BSD风格)
http://www.csie.ntu.edu.tw/~cjlin/libsvm/
它们都在 C++ 中。
【讨论】:
【参考方案2】:另外几个可能的选择:
条件随机场 (CRF): http://www.chokkan.org/software/crfsuite/
隐马尔可夫模型 (HMM): http://www.cs.au.dk/~asand/?page_id=152
对于一般的 ML 库,请考虑 Torch(截至撰写本文时为第 7 版): https://github.com/andresy/torch
Orange 系统是用 C++ 实现的,可以用作库,但侧重于将其功能公开为 Python 包装器,用于灵活的脚本编写和可视化编程: http://orange.biolab.si/
【讨论】:
【参考方案3】:我只使用了几个 ML 库,因此我很乐意推荐它们; dlib ml 肯定是其中之一。
Sourceforge 下载here;和最前沿的退房:
hg clone http://hg.code.sf.net/p/dclib/code dclib-code
原始库创建者和当前维护者是 Davis King。
您的愿望清单与相关 dlib 功能:
良好的文档:针对相对较小的用户/开发人员群体的免费开源库,这可能是最好的;除了在 5 年开发历史中完善的常用文档外,还有一个经常更新的 Intro to dlib,一个(低流量)论坛;以及大量优秀的示例(包括至少一个用于 SVM)。
C++:据我所知,100% 使用 C++。
支持向量机算法:是的;事实上,SVM 模块一直是该库最近更新的重点。
层次聚类算法:不是开箱即用的;那里 然而,打包的代码是 k 均值聚类。显然,每种技术的结果都非常 不同,但计算 相似性度量和后续 递归/迭代分区步骤是 两者的核心——换句话说, 层次聚类的计算引擎就在那里。 要使现有的聚类模块适应 HC,将需要不止一个 几行代码,但它也是 考虑到这一点,这不是一项重大的努力 你几乎在 数据呈现级别。
dlib ml 有几点需要推荐。这是一个成熟的库(它现在是 17.x 版,我相信 1.x 版是在 2005 年末的某个时候发布的)但它也仍在积极开发中,正如 repo 日志所证明的那样(最后一次更新,17.27,是 17 2010 年 5 月)和最后一次提交(2010 年 5 月 23 日)。此外,它还包括相当少的其他 ML 技术(例如,贝叶斯网络、内核方法等)。第三,dllib ml 为矩阵计算和优化提供了出色的“支持”库——这两者都是许多机器学习技术的基本构建块。
在源代码中,我注意到 dlib ml 是在 BSL (Boost?) 下获得许可的,这是一个开源许可,尽管我对这种类型的许可一无所知.
【讨论】:
你可能还想看看MLPACK C++ library,里面有很多机器学习算法 @mtall - MLPACK 似乎没有在“mlpack 中的方法”部分列出 SVM。 mlpack.org/doxygen.php【参考方案4】:它不是 C++,但您考虑使用 R。特别是,请查看 the machine learning view on CRAN,其中显示了许多上述库,包括 Weka 和 libsvm。
【讨论】:
【参考方案5】:好的,为了完整起见,我将发布我最后的内容。我现在将scipy-cluster 用于集群部分。这是迄今为止我发现的最通用的实现。对于 SVM 部分,我想我会选择 libSVM(它现在有一个 Python 接口)。我选择 Python 是因为在 C++ 中确实找不到合适的层次聚类实现(C Clustering Library 专门用于微阵列,不支持多维数据)。
【讨论】:
【参考方案6】:WEKA (http://www.cs.waikato.ac.nz/ml/weka/) 是一个优秀的开源机器学习库,可以满足您的大部分需求,除了 C++ - 它是用 Java 编写的。它有很好的文档记录,实现了支持向量机和集群,我在这方面有很好的经验。
【讨论】:
weka 中的 svm 实现是由 libsvm 作者完成的,而不是 weka 团队。此外,weka 的设计完全没有效率。 Weka 仅适用于处理小型数据集。以上是关于使用哪个机器学习库[关闭]的主要内容,如果未能解决你的问题,请参考以下文章