33

我正在寻找一个理想情况下具有以下功能的库:

  • 实现多维数据的层次聚类(最好在相似度或距离矩阵上)
  • 实现支持向量机
  • 在 C++ 中
  • 有一些记录(这似乎是最难的)

我希望它使用 C++,因为我最喜欢这种语言,但如果库值得,我也会使用任何其他语言。我用谷歌搜索并找到了一些,但我真的没有时间全部尝试,所以我想听听其他人的经验。请仅在您对推荐的图书馆有一定经验的情况下回答。

PS:我还可以为集群和 SVM 使用不同的库。

4

6 回答 6

16

我只使用了几个 ML 库,因此我很乐意推荐它们;dlib ml当然是其中之一。

Sourceforge在这里下载;和最前沿的退房:

hg clone http://hg.code.sf.net/p/dclib/code dclib-code

最初的库创建者和当前维护者是 Davis King。

您的愿望清单与相关的 dlib 功能:

  • 良好的文档:针对相对较小的用户/开发人员群体的免费开源库,这可能是最好的;除了在五年开发历史中完善的常用文档外,还有一个经常更新的 dlib 简介,一个(低流量)论坛;和一大堆优秀的例子(包括至少一个支持向量机的例子)。

  • C++:据我所知,100% 使用 C++。

  • 支持向量机算法:是的;事实上,SVM 模块一直是该库最近更新的重点。

  • 层次聚类算法:不是开箱即用的;但是,有用于 k-means 聚类的打包代码。显然,每种技术的结果都非常不同,但相似性度量的计算和随后的递归/迭代分区步骤是两者的核心——换句话说,层次聚类的计算引擎就在那里。要为 HC 调整现有的集群模块,将需要几行以上的代码,但考虑到您几乎在数据表示级别工作,这也不是一项主要工作。

dlib ml 有一些额外的点来推荐它。这是一个成熟的库(它现在是 17.x 版,我相信 1.x 版是在 2005 年底的某个时候发布的)但它也仍在积极开发中,正如 repo 日志所证明的那样(最后一次更新,17.27,是 17 2010 年 5 月)和最后一次提交(2010 年 5 月 23 日)。此外,它还包括相当少的其他 ML 技术(例如,贝叶斯网络、内核方法等)。第三,dllib ml 为矩阵计算和优化提供了出色的“支持”库——这两者都是许多 ML 技术的基本构建块。

在源代码中,我注意到 dlib ml 是在BSL(Boost?)下获得许可的,这是一个开源许可,尽管我对这种类型的许可一无所知。

于 2010-05-27T02:27:22.003 回答
10

WEKA ( http://www.cs.waikato.ac.nz/ml/weka/ ) 是一个优秀的开源机器学习库,可以满足除 C++ 之外的大部分需求——它是用 Java 编写的。它有很好的文档,实现了支持向量机和集群,我在这方面有很好的经验。

于 2010-05-26T19:04:30.677 回答
10

通用机器学习库:

这两个类似于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++ 中。

于 2010-05-30T15:28:40.343 回答
5

好的,为了完整起见,我将发布我最后的内容。我现在将scipy-cluster用于集群部分。这是迄今为止我发现的最通用的实现。我想我会为 SVM 部分使用libSVM(它现在有一个 Python 接口)。我将使用 Python,因为在 C++ 中确实找不到合适的层次聚类实现(C 聚类库专门用于微阵列,不支持多维数据)。

于 2010-05-30T14:53:14.937 回答
4

它不是 C++,但您考虑使用 R。特别是,请查看 CRAN 上的机器学习视图,其中显示了上述许多库,包括 Weka 和 libsvm。

于 2010-06-22T13:40:34.553 回答
1

几个额外的可能选择:

条件随机场(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/

于 2013-08-01T18:50:46.993 回答