https://www.leiphone.com/yidian/OgYAOyBEEMN1PQC2.html?&yidian_docid=0FbWxkXu&yidian_s=
[TOC]
五個鮮為人知,但又不可不知的機器學習開源項目

借著人工智能的熱潮,各種機器學習項目也迎來了一個爆發期。其中有一些因為背后的巨頭支持或者穩定可靠的性能而廣為人知,例如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的版本更新活躍,也是一個非常值得關注的開源項目。
主頁:https://github.com/paulgb/sklearn-pandas
來源:kdnuggets,雷鋒網編譯
- 15張圖閱盡人工智能現狀
- LeCun臺大演講:AI最大缺陷是缺乏常識,無監督學習突破困境
- Google首席科學家談Google是怎么做深度學習的
- 為你的深度學習任務挑選性價比最高GPU
- 史上最全面的深度學習硬件指南
- 機器學習
- 普通程序員如何向人工智能靠攏?
- 從機器學習談起
- 普通程序員如何轉向AI方向
- 機器學習6大算法,優勢劣勢全解析
- 除了 Python ,這些語言寫的機器學習項目也很牛(二)
- 五個鮮為人知,但又不可不知的機器學習開源項目
- 機器學習入門算法:從線性模型到神經網絡
- 機器學習常見算法分類匯總
- 最實用的機器學習算法Top5
- NLP
- Lucene的原理和應用
- 理解和使用自然語言處理之終極指南(Python編碼)(經典收藏版12k字,附數據簡化籌技術人員)
- 神經網絡
- 曾經歷過兩次低谷的人工神經網絡,還會迎來下一個低谷么?
- 人工神經網絡——維基
- 深度學習——維基
- A Neural Network in 11 lines of Python (Part 1)
- 深度學習
- 基于深度學習的機器翻譯
- 谷歌研究員2萬字批駁上海交大用深度學習推斷犯罪分子
- 理解這25個概念,你的「深度學習」才算入門!
- Deep Learning(深度學習)學習筆記整理系列
- 概述、背景、人腦視覺機理
- 特征
- Deep Learning
- Deep Learning 訓練
- Deep Learning(中文)
- 第1章 引言
- 深度學習如何入門?——知乎
- 文章收錄
- 神經系統