借着人工智能的热潮,各种机器学习项目也迎来了一个爆发期。其中有一些因为背后的巨头支持或者稳定可靠的性能而广为人知,例如 Tensorflow、Caffe 和 Theano 等。但实际上,有为数更多的项目却并不为人所知。在这些相对小众的项目中,是否隐藏着一些版本迭代积极,且具有一定参考价值的项目?答案显然是肯定的。
本文将介绍的这五个小众项目来自不同的生态系统和编程语言,并且版本更新活跃,具有一定的参考价值。或许你会觉得了解这些小众的项目并没有太多实际意义,但本文的原作者 Matthew Mayo,一位资深的数据科学家和无监督学习领域的大牛认为,仔细学习这些项目的实现细节和编码方式,将帮助开发者对他们自己的项目产生一些具有积极意义的想法,因此仍然是大有裨益的。
原文来自 KDnuggets,以下项目排名不分先后,雷锋网编译。
1. Hyperopt-sklearn
Hyperopt-sklearn 是基于 scikit-learn 项目的一个子集,其全称是:Hyper-parameter optimization for scikit-learn,即针对 scikit-learn 项目的超级参数优化工具。由于 scikit-learn 是基于 Python 的机器学习开源框架,因此 Hyperopt-sklearn 也基于 Python 语言。
Hyperopt-sklearn 的文档称:对于开发者而言,针对不同的训练数据挑选一个合适的分类器(classifier)通常是困难的。而且即使选好了分类器,后面的参数调试过程也相当乏味和耗时。更严重的是,还有许多情况是开发者好不容易调试好了选定的分类器,却发现一开始的选择本身就是错误的,这本身就浪费了大量的精力和时间。针对该问题,Hyperopt-sklearn 提供了一种解决方案。
Hyperopt-sklearn 支持各种不同的搜索算法(包括随机搜索、Tree of Parzen Estimators、Annealing 等),可以搜索所有支持的分类器(KNeightborsClassifier、KNeightborsClassifier、SGDClassifier 等)或者在给定的分类器下搜索所有可能的参数配置,并评估最优选择。并且 Hyperopt-sklearn 还支持多种预处理流程,包括 TfidfVectorizer,Normalzier 和 OneHotEncoder 等。
那么 Hyperopt-sklearn 的实际效果究竟如何?下表分别展示了使用 scikit-learn 默认参数和 Hyperopt-sklearn 优化参数运行的分类器的F-score 分数,数据源来自 20 个不同的新闻组稿件。可以看到,经过优化的分类器的平均得分都要高于默认参数的情况。
另外,Hyperopt-sklearn 的编码量也很小,并且维护团队还提供了丰富的参考样例。
主页:http://hyperopt.github.io/hyperopt-sklearn/
2. Dlib
Dlib 的目标用户并没有 Hyperopt-sklearn 细分,它是一个基于 C++ 语言的通用的机器学习和数据分析库。值得一提的是,虽然 Dlib 的确是由 C++ 实现的,但它却提供了针对 Python 语言的 API。
Dlib 的官网称:Dlib 是一个现代的 C++ 工具包,实现了大量机器学习的相关算法和工具,可用于在 C++ 环境下创建复杂的软件来解决现实问题。目前,Dlib 在工业界和学术界都得到了广泛的应用,包括机器人,嵌入式设备,移动电话和大规模的高性能计算环境等。
Dlib 的帮助文档非常规范,针对每个 API 接口的解释也相当全面,而且 Dlib 还提供了非常详细的入门参考。更为难能可贵的是,Dlib 的博客更新也非常频繁,官方人员经常通过博客分享基于 Dlib 实现的有趣的应用项目。实际上,Dlib 也并非随着近两年的人工智能热潮才发起的项目,相对而言,它的历史非常悠久,早在 2002 年,Dlib 的维护团队就已经开始着手开发了。
鉴于 Dlib 包含了为数众多的算法实现,因此原文作者认为 Dlib 的运行效率应该与 scikit-learn 接近,甚至有可能超越后者。
主页:http://dlib.net/
3. N++
N++同样基于 C++ 环境,相对其他项目而言,它是一个非常小巧易用的神经网络实现库。这一点主要体现在,N++并不需要复杂的安装过程,使用时只需要在 C++ 代码中通过#include 语句对所需的库文件做一个声明就可以了。
其官网称:N++是一个简短、自包含(self-contained)、易于使用的基于 C++ 环境的神经网络工具包。它实现了包括神经网络和基本线性代数运算在内的一些矩阵类。该项目的主要目的是为了相互学习和交流,但基于 MNIST 数据库的一些初步测试结果却表明N++在某些实际应用项目中的表现同样出色。
N++的配套文档并不多,但它却对矩阵类的相关用法进行了详细解释。另外,N++官方还公布了一些对神经网络进行设置和查询的代码片段,而且由于这些代码相对其他实现都非常简短,因此N++特别适合于那些想要了解简单的神经网络实现或者刚从其他编程语言转到 C++ 环境的开发者。
主页:https://github.com/stagadish/NNplusplus
4. LightGBM
LightGBM 是基于微软 DMTK(Microsoft Distributed Machine Learning Toolkit)开源项目的一个子集,它的全称是:Light Gradient Boosting Machine,专注于各种梯度提升(Gradient Boosting)算法的实现,包括 GBDT,GBRT,GBM 和 MART 等。
官网描述称:基于公开数据集的测试结果表明,LightGBM 无论在模型训练的速度、准确性还是内存消耗等各方面都要优于其他的梯度提升算法实现。此外,LightGBM 还可以通过在特定设置中使用多台机器进行并行训练的方式来实现线性加速(linear speed-up)。
LightGBM 本身由 C++ 和 Python 两种语言实现,微软为开发者提供了完整的帮助文档和入门参考。背靠科技巨头微软的鼎力支持,LightGBM 自然也是一个非常值得关注的项目。
主页:https://github.com/Microsoft/LightGBM
5. Sklearn-pandas
与前面的几个项目不同,Sklearn-pandas 既可以视为一个通用型的机器学习工具包,也可是视为一些特定算法的实现。它在具体的机器学习任务中主要充当支持者的角色。
这里所谓支持者的角色,按照其官网的解释即是说:Sklearn-pandas 在 Scikit-Learn 和 pandas 之间提供了一个互通的桥梁(这一点从项目的名称也能看出)。Scikit-Learn 上文已经提过,这里 pandas 是指一个开源的基于 Python 实现的数据分析工具。
具体的说,Sklearn-pandas 的桥梁作用主要体现在以下两个方面:
1) 提供将 DataFrame 列映射到 transformations 的方法,这些列此后还可以重新组合成特征(features);
2) 以 pandas DataFrame 为输入,为 scikit-learn 旧版本的管道交叉验证(cross-validate a pipeline)提供兼容性支持。
Sklearn-pandas 的版本更新活跃,也是一个非常值得关注的开源项目。
CIO之家 www.ciozj.com 公众号:imciow