藉着人工智能的熱潮,各類機器學習項目也迎來了一個爆發期。其中有一些由於背後的巨頭支持或者穩定可靠的性能而廣爲人知,例如Tensorflow、Caffe和Theano等。但實際上,有爲數更多的項目卻並不爲人所知。在這些相對小衆的項目中,是否隱藏着一些版本迭代積極,且具備必定參考價值的項目?答案顯然是確定的。html
本文將介紹的這五個小衆項目來自不一樣的生態系統和編程語言,而且版本更新活躍,具備必定的參考價值。或許你會以爲了解這些小衆的項目並無太多實際意義,但本文的原做者Matthew Mayo,一位資深的數據科學家和無監督學習領域的大牛認爲,仔細學習這些項目的實現細節和編碼方式,將幫助開發者對他們本身的項目產生一些具備積極意義的想法,所以仍然是大有裨益的。git
原文來自KDnuggets,如下項目排名不分前後,雷鋒網(公衆號:雷鋒網)編譯。github
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/iphone
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接近,甚至有可能超越後者。
N++一樣基於C++環境,相對其餘項目而言,它是一個很是小巧易用的神經網絡實現庫。這一點主要體如今,N++並不須要複雜的安裝過程,使用時只須要在C++代碼中經過#include語句對所需的庫文件作一個聲明就能夠了。
其官網稱:N++是一個簡短、自包含(self-contained)、易於使用的基於C++環境的神經網絡工具包。它實現了包括神經網絡和基本線性代數運算在內的一些矩陣類。該項目的主要目的是爲了相互學習和交流,但基於MNIST數據庫的一些初步測試結果卻代表N++在某些實際應用項目中的表現一樣出色。
N++的配套文檔並很少,但它卻對矩陣類的相關用法進行了詳細解釋。另外,N++官方還公佈了一些對神經網絡進行設置和查詢的代碼片斷,並且因爲這些代碼相對其餘實現都很是簡短,所以N++特別適合於那些想要了解簡單的神經網絡實現或者剛從其餘編程語言轉到C++環境的開發者。
主頁:https://github.com/stagadish/NNplusplus
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
與前面的幾個項目不一樣,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,雷鋒網編譯