五個鮮為人知,但又不可不知的機器學習開源項目

jopen 7年前發布 | 28K 次閱讀

五個鮮為人知,但又不可不知的機器學習開源項目

借著人工智能的熱潮,各種機器學習項目也迎來了一個爆發期。其中有一些因為背后的巨頭支持或者穩定可靠的性能而廣為人知,例如 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

來自: 雷鋒網

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!