3
本文作者: 恒亮 | 2017-02-09 14:14 |
借著人工智能的熱潮,各種機器學習項目也迎來了一個爆發(fā)期。其中有一些因為背后的巨頭支持或者穩(wěn)定可靠的性能而廣為人知,例如Tensorflow、Caffe和Theano等。但實際上,有為數(shù)更多的項目卻并不為人所知。在這些相對小眾的項目中,是否隱藏著一些版本迭代積極,且具有一定參考價值的項目?答案顯然是肯定的。
本文將介紹的這五個小眾項目來自不同的生態(tài)系統(tǒng)和編程語言,并且版本更新活躍,具有一定的參考價值?;蛟S你會覺得了解這些小眾的項目并沒有太多實際意義,但本文的原作者Matthew Mayo,一位資深的數(shù)據(jù)科學家和無監(jiān)督學習領域的大牛認為,仔細學習這些項目的實現(xiàn)細節(jié)和編碼方式,將幫助開發(fā)者對他們自己的項目產生一些具有積極意義的想法,因此仍然是大有裨益的。
原文來自KDnuggets,以下項目排名不分先后,雷鋒網(wǎng)編譯。
Hyperopt-sklearn是基于scikit-learn項目的一個子集,其全稱是:Hyper-parameter optimization for scikit-learn,即針對scikit-learn項目的超級參數(shù)優(yōu)化工具。由于scikit-learn是基于Python的機器學習開源框架,因此Hyperopt-sklearn也基于Python語言。
Hyperopt-sklearn的文檔稱:對于開發(fā)者而言,針對不同的訓練數(shù)據(jù)挑選一個合適的分類器(classifier)通常是困難的。而且即使選好了分類器,后面的參數(shù)調試過程也相當乏味和耗時。更嚴重的是,還有許多情況是開發(fā)者好不容易調試好了選定的分類器,卻發(fā)現(xiàn)一開始的選擇本身就是錯誤的,這本身就浪費了大量的精力和時間。針對該問題,Hyperopt-sklearn提供了一種解決方案。
Hyperopt-sklearn支持各種不同的搜索算法(包括隨機搜索、Tree of Parzen Estimators、Annealing等),可以搜索所有支持的分類器(KNeightborsClassifier、KNeightborsClassifier、SGDClassifier等)或者在給定的分類器下搜索所有可能的參數(shù)配置,并評估最優(yōu)選擇。并且Hyperopt-sklearn還支持多種預處理流程,包括TfidfVectorizer,Normalzier和OneHotEncoder等。
那么Hyperopt-sklearn的實際效果究竟如何?下表分別展示了使用scikit-learn默認參數(shù)和Hyperopt-sklearn優(yōu)化參數(shù)運行的分類器的F-score分數(shù),數(shù)據(jù)源來自20個不同的新聞組稿件??梢钥吹剑?jīng)過優(yōu)化的分類器的平均得分都要高于默認參數(shù)的情況。
另外,Hyperopt-sklearn的編碼量也很小,并且維護團隊還提供了豐富的參考樣例。
主頁:http://hyperopt.github.io/hyperopt-sklearn/
Dlib的目標用戶并沒有Hyperopt-sklearn細分,它是一個基于C++語言的通用的機器學習和數(shù)據(jù)分析庫。值得一提的是,雖然Dlib的確是由C++實現(xiàn)的,但它卻提供了針對Python語言的API。
Dlib的官網(wǎng)稱:Dlib是一個現(xiàn)代的C++工具包,實現(xiàn)了大量機器學習的相關算法和工具,可用于在C++環(huán)境下創(chuàng)建復雜的軟件來解決現(xiàn)實問題。目前,Dlib在工業(yè)界和學術界都得到了廣泛的應用,包括機器人,嵌入式設備,移動電話和大規(guī)模的高性能計算環(huán)境等。
Dlib的幫助文檔非常規(guī)范,針對每個API接口的解釋也相當全面,而且Dlib還提供了非常詳細的入門參考。更為難能可貴的是,Dlib的博客更新也非常頻繁,官方人員經(jīng)常通過博客分享基于Dlib實現(xiàn)的有趣的應用項目。實際上,Dlib也并非隨著近兩年的人工智能熱潮才發(fā)起的項目,相對而言,它的歷史非常悠久,早在2002年,Dlib的維護團隊就已經(jīng)開始著手開發(fā)了。
鑒于Dlib包含了為數(shù)眾多的算法實現(xiàn),因此原文作者認為Dlib的運行效率應該與scikit-learn接近,甚至有可能超越后者。
N++同樣基于C++環(huán)境,相對其他項目而言,它是一個非常小巧易用的神經(jīng)網(wǎng)絡實現(xiàn)庫。這一點主要體現(xiàn)在,N++并不需要復雜的安裝過程,使用時只需要在C++代碼中通過#include語句對所需的庫文件做一個聲明就可以了。
其官網(wǎng)稱:N++是一個簡短、自包含(self-contained)、易于使用的基于C++環(huán)境的神經(jīng)網(wǎng)絡工具包。它實現(xiàn)了包括神經(jīng)網(wǎng)絡和基本線性代數(shù)運算在內的一些矩陣類。該項目的主要目的是為了相互學習和交流,但基于MNIST數(shù)據(jù)庫的一些初步測試結果卻表明N++在某些實際應用項目中的表現(xiàn)同樣出色。
N++的配套文檔并不多,但它卻對矩陣類的相關用法進行了詳細解釋。另外,N++官方還公布了一些對神經(jīng)網(wǎng)絡進行設置和查詢的代碼片段,而且由于這些代碼相對其他實現(xiàn)都非常簡短,因此N++特別適合于那些想要了解簡單的神經(jīng)網(wǎng)絡實現(xiàn)或者剛從其他編程語言轉到C++環(huán)境的開發(fā)者。
主頁:https://github.com/stagadish/NNplusplus
LightGBM是基于微軟DMTK(Microsoft Distributed Machine Learning Toolkit)開源項目的一個子集,它的全稱是:Light Gradient Boosting Machine,專注于各種梯度提升(Gradient Boosting)算法的實現(xiàn),包括GBDT,GBRT,GBM和MART等。
官網(wǎng)描述稱:基于公開數(shù)據(jù)集的測試結果表明,LightGBM無論在模型訓練的速度、準確性還是內存消耗等各方面都要優(yōu)于其他的梯度提升算法實現(xiàn)。此外,LightGBM還可以通過在特定設置中使用多臺機器進行并行訓練的方式來實現(xiàn)線性加速(linear speed-up)。
LightGBM本身由C++和Python兩種語言實現(xiàn),微軟為開發(fā)者提供了完整的幫助文檔和入門參考。背靠科技巨頭微軟的鼎力支持,LightGBM自然也是一個非常值得關注的項目。
主頁:https://github.com/Microsoft/LightGBM
與前面的幾個項目不同,Sklearn-pandas既可以視為一個通用型的機器學習工具包,也可是視為一些特定算法的實現(xiàn)。它在具體的機器學習任務中主要充當支持者的角色。
這里所謂支持者的角色,按照其官網(wǎng)的解釋即是說:Sklearn-pandas在Scikit-Learn和pandas之間提供了一個互通的橋梁(這一點從項目的名稱也能看出)。Scikit-Learn上文已經(jīng)提過,這里pandas是指一個開源的基于Python實現(xiàn)的數(shù)據(jù)分析工具。
具體的說,Sklearn-pandas的橋梁作用主要體現(xiàn)在以下兩個方面:
1) 提供將DataFrame列映射到transformations的方法,這些列此后還可以重新組合成特征(features);
2) 以pandas DataFrame為輸入,為scikit-learn舊版本的管道交叉驗證(cross-validate a pipeline)提供兼容性支持。
Sklearn-pandas的版本更新活躍,也是一個非常值得關注的開源項目。
主頁:https://github.com/paulgb/sklearn-pandas
來源:kdnuggets,雷鋒網(wǎng)編譯
雷鋒網(wǎng)相關文章:
Python粉都應該知道的開源機器學習框架:Scikit-learn入門指南
機器學習年度 20 大開源項目花落誰家?(Python 版)
雷峰網(wǎng)版權文章,未經(jīng)授權禁止轉載。詳情見轉載須知。