Python粉都應該知道的開源機器學習框架:Scikit-learn入門指南

2021-01-08 雷鋒網

對Python語言有所了解的科研人員可能都知道SciPy——一個開源的基於Python的科學計算工具包。基於SciPy,目前開發者們針對不同的應用領域已經發展出了為數眾多的分支版本,它們被統一稱為Scikits,即SciPy工具包的意思。而在這些分支版本中,最有名,也是專門面向機器學習的一個就是Scikit-learn。

Scikit-learn項目最早由數據科學家 David Cournapeau 在 2007 年發起,需要NumPy和SciPy等其他包的支持,是Python語言中專門針對機器學習應用而發展起來的一款開源框架。

和其他眾多的開源項目一樣,Scikit-learn目前主要由社區成員自發進行維護。可能是由於維護成本的限制,Scikit-learn相比其他項目要顯得更為保守。這主要體現在兩個方面:一是Scikit-learn從來不做除機器學習領域之外的其他擴展,二是Scikit-learn從來不採用未經廣泛驗證的算法。

本文將簡單介紹Scikit-learn框架的六大功能,安裝和運行Scikit-learn的大概步驟,同時為後續各更深入地學習Scikit-learn提供參考。原文來自infoworld網站的特約撰稿人Martin Heller,他曾在1986-2010年間做過長達20多年的資料庫、通用軟體和網頁開發,具有豐富的開發經驗。

Scikit-learn的六大功能

Scikit-learn的基本功能主要被分為六大部分:分類,回歸,聚類,數據降維,模型選擇和數據預處理。

分類是指識別給定對象的所屬類別,屬於監督學習的範疇,最常見的應用場景包括垃圾郵件檢測和圖像識別等。目前Scikit-learn已經實現的算法包括:支持向量機(SVM),最近鄰,邏輯回歸,隨機森林,決策樹以及多層感知器(MLP)神經網絡等等。

需要指出的是,由於Scikit-learn本身不支持深度學習,也不支持GPU加速,因此這裡對於MLP的實現並不適合於處理大規模問題。有相關需求的讀者可以查看同樣對Python有良好支持的Keras和Theano等框架。

回歸是指預測與給定對象相關聯的連續值屬性,最常見的應用場景包括預測藥物反應和預測股票價格等。目前Scikit-learn已經實現的算法包括:支持向量回歸(SVR),脊回歸,Lasso回歸,彈性網絡(Elastic Net),最小角回歸(LARS ),貝葉斯回歸,以及各種不同的魯棒回歸算法等。可以看到,這裡實現的回歸算法幾乎涵蓋了所有開發者的需求範圍,而且更重要的是,Scikit-learn還針對每種算法都提供了簡單明了的用例參考。

聚類是指自動識別具有相似屬性的給定對象,並將其分組為集合,屬於無監督學習的範疇,最常見的應用場景包括顧客細分和試驗結果分組。目前Scikit-learn已經實現的算法包括:K-均值聚類,譜聚類,均值偏移,分層聚類,DBSCAN聚類等。

數據降維是指使用主成分分析(PCA)、非負矩陣分解(NMF)或特徵選擇等降維技術來減少要考慮的隨機變量的個數,其主要應用場景包括可視化處理和效率提升。

模型選擇是指對於給定參數和模型的比較、驗證和選擇,其主要目的是通過參數調整來提升精度。目前Scikit-learn實現的模塊包括:格點搜索,交叉驗證和各種針對預測誤差評估的度量函數。

數據預處理是指數據的特徵提取和歸一化,是機器學習過程中的第一個也是最重要的一個環節。這裡歸一化是指將輸入數據轉換為具有零均值和單位權方差的新變量,但因為大多數時候都做不到精確等於零,因此會設置一個可接受的範圍,一般都要求落在0-1之間。而特徵提取是指將文本或圖像數據轉換為可用於機器學習的數字變量。

需要特別注意的是,這裡的特徵提取與上文在數據降維中提到的特徵選擇非常不同。特徵選擇是指通過去除不變、協變或其他統計上不重要的特徵量來改進機器學習的一種方法。

總結來說,Scikit-learn實現了一整套用於數據降維,模型選擇,特徵提取和歸一化的完整算法/模塊,雖然缺少按步驟操作的參考教程,但Scikit-learn針對每個算法和模塊都提供了豐富的參考樣例和詳細的說明文檔。

安裝和運行Scikit-learn

如前所述,Scikit-learn需要NumPy和SciPy等其他包的支持,因此在安裝Scikit-learn之前需要提前安裝一些支持包,具體列表和教程可以查看Scikit-learn的官方文檔: http://scikit-learn.org/stable/install.html ,以下僅列出Python、NumPy和SciPy等三個必備包的安裝說明。

Python:https://www.python.org/about/gettingstarted/

NumPy:http://www.numpy.org/

SciPy:http://www.scipy.org/install.html

假定已經完整安裝了所有支持包,那麼利用安裝Scikit-learn只需要簡單的一條簡單的pip命令(也可以用conda命令,詳見官方文檔):

$ sudo pip install -U scikit-learn

這裡加上sudo是為了避免安裝過程中出現一些權限問題,如果用戶已經確保了管理員權限也可以省略。

當然,開發者也可以選擇自己到GitHub開源平臺上下載Scikit-learn的原始碼,解壓後在根目錄鍵入make自行編譯和連接可執行文件,效果是一樣的。另外,為了確保測試方便,高級用戶還可以選擇安裝針對Python的測試框架nose,安裝方法詳見其官方說明: http://nose.readthedocs.io/en/latest/  。

通過Jupyter Notebook工具運行Scikit-learn樣例的過程也很簡單,用戶只需要在官方給出的樣例庫: http://scikit-learn.org/stable/auto_examples/index.html#general-examples  選擇一個樣例,然後在頁面中下載其Python源碼和IPython notebook文件,借著通過Jupyter Notebook工具運行就可以了。假如選擇了交叉驗證預測的樣例,那麼其運行情況的截圖如下所示。

原作者在這裡表示,Scikit-learn是他測試過的最簡單易用的機器學習框架。他表示,Scikit-learn樣例的運行結果和文檔描述一模一樣,API接口的設計合理且一致性高,而且幾乎不存在「阻抗不匹配」的數據結構,使用這種功能完善且幾乎沒有Bug的開源框架進行機器學習研究,無疑是一件值得高興的事。

更深入地學習Scikit-learn

如前所述,Scikit-learn針對每個算法和模塊都提供了豐富的參考樣例和詳細的說明文檔,據官方的統計大約有200多個。而且為了清晰明白,絕大多數樣例都至少給出了一張由Matplotlib繪製的數據圖表。這些都是官方提供的學習Scikit-learn框架最直接有效的學習材料。

針對科學數據處理的應用場景,官方還給出了一個更為詳細和全面的參考教程:A tutorial on statistical-learning for scientific data processing,其中包括統計學習、監督學習、模型選擇和無監督學習等若干部分,內容覆蓋全面,講解細緻,並且使用了真實的數據、代碼和圖表。

另外,教程中還調用了與文本相關的樣例,例如下圖所示的四個不同SVM分類器的比較。

這裡需要指出的是,雖然運行Scikit-learn官方給出的樣例後通常都能得到一致的結果,但大多數情況下系統都會拋出警告信息。作者認為拋出警告信息的原因來自兩個方面:一是蘋果vecLib框架本身對Scikit-learn支持不好(作者用的是MacOS),二是樣例中使用的Python版本可能是早期的版本,而實際運行中是最新的版本。例如下圖中是使用Python 2.7.10版本拋出的警告信息,而Scikit-learn官方頁面上並沒有出現。

總體上來說,作為專門面向機器學習的Python開源框架,Scikit-learn可以在一定範圍內為開發者提供非常好的幫助。它內部實現了各種各樣成熟的算法,容易安裝和使用,樣例豐富,而且教程和文檔也非常詳細。

另一方面,Scikit-learn也有缺點。例如它不支持深度學習和強化學習,這在今天已經是應用非常廣泛的技術,例如準確的圖像分類和可靠的實時語音識別和語義理解等。此外,它也不支持圖模型和序列預測,不支持Python之外的語言,不支持PyPy,也不支持GPU加速。

看到這裡可能會有人擔心Scikit-learn的性能表現,這裡需要指出的是:如果不考慮多層神經網絡的相關應用,Scikit-learn的性能表現是非常不錯的。究其原因,一方面是因為其內部算法的實現十分高效,另一方面或許可以歸功於Cython編譯器:通過Cython在Scikit-learn框架內部生成C語言代碼的運行方式,Scikit-learn消除了大部分的性能瓶頸。

應該明確的一點是:雖然概括地說Scikit-learn並不適合深度學習問題,但對於某些特殊場景而言,使用Scikit-learn仍然是明智的選擇。例如要創建連接不同對象的預測函數時,或者在未標記的數據集中為了訓練模型對不同的對象進行分類時,面對這些場景Scikit-learn只通過普通的舊機器學習模型就能很好地解決,而並不需要建立數十層的複雜神經網絡。

就好像喜歡Scala語言的人會選擇Spark ML,喜歡繪製圖表和偶爾編寫少量Python/R語言代碼的人會選擇微軟Cortana和Azure一樣,對於那些Python語言的死忠粉而言,Scikit-learn可能是各種機器學習庫中的最好選擇。雷鋒網(公眾號:雷鋒網)雷鋒網

來源:infoworld,雷鋒網編譯

雷鋒網版權文章,未經授權禁止轉載。詳情見轉載須知。

相關焦點

  • 開源機器學習框架:Scikit-learn API簡介
    簡介對Python語言有所了解的科研人員可能都知道SciPy——一個開源的基於Python的科學計算工具包。
  • Scikit-learn玩得很熟了?這些功能你都知道嗎?
    不管是對機器學習的初學者還是經驗豐富的專業人士來說,Scikit-learn庫都是應該熟練掌握的優秀軟體包。然而,即使是有經驗的機器學習從業者可能也沒有意識到這個包中所隱藏的一些特性,這些特性可以輕鬆地幫助他們完成任務。接下來本文將列舉幾個scikit-learn庫中鮮為人知的方法或接口。
  • CDA承接的全球頂級機器學習Scikit-learn 中文社區上線啦!
    Scikit-learn作為機器學習的入門工具庫,深受初學者的喜愛。但是由於官方文檔是英文撰寫,限制了很多機器學習愛好者的學習過程。因此,專業、規範、實時的Scikit-learn中文學習社區,一直以來都是國內學習者所急需。
  • 如何在Apache Pyspark中運行Scikit-learn模型
    在本文中,我們將了解如何在Apache Pyspark中運行Scikit-learn模型,並討論有關每個步驟的細節。如果您已經準備好了機器學習模型,則可以直接跳到「 pyspark wrapper」部分,也可以通過以下步驟創建一個簡單的scikit learn機器學習模型。
  • 令人讚嘆的8個Python新手工具!
    每個語言都可以有自己的IDLE。它讓Python的入門變得簡單,對於沒什麼基礎的人寫就對了。它的主要功能包括Python shell 窗口(交互式解釋器)、跨平臺(Windows、Linux、UNIX、Mac OS X)、智能縮進、代碼著色、自動提示、可以實現斷點提示、單步執行等調試功能的基本集成調試器。IDLE 易於學習,因為它重量輕且易於使用。
  • 一文總結數據科學家常用的Python庫(下)
    /* Scikit-learn */就像用於數據操作的Pandas和用於可視化的matplotlib一樣,scikit-learn是構建模型的Python庫領導者。沒有什麼比得上它了。事實上,scikit-learn建立在NumPy,SciPy和matplotlib之上。它是開源的,每個人都可以訪問,並且可以在各種環境中重用。
  • 利用Spark 和 scikit-learn 將你的模型訓練加快 100 倍
    當我們使用 Spark 進行數據處理時,我們首選的機器學習框架是 scikit-learn。隨著計算機變得越來越便宜,機器學習解決方案的上市時間變得越來越關鍵,我們探索了加快模型訓練的各種方法。其中一個解決方案是將 Spark 和 scikit-learn 中的元素組合到我們自己的混合解決方案中。
  • Python機器學習5:使用scikit-learn實現三種集成學習Bagging算法
    如果你在解決一個問題時實現了多種模型,但是每個模型的效果都差不多,但是你想要進一步提升最後預測效果,那麼本文將強烈建議你使用集成學習算法來實現!集成學習算法指的是將已有的多種模型綜合起來,實現最終分類或者回歸。一般而言,集成學習可以提高原有算法模型的準確性。
  • 神經網絡初學者指南:基於Scikit-Learn的Python模塊
    編者按:這個帖子概述了使用 Scikit-learn| 神經網絡神經網絡是一個試圖模仿自然生物神經網絡的學習模式的機器學習框架。 生物神經網絡具有相互連接的神經元,神經元帶有接受輸入信號的樹突,然後基於這些輸入,它們通過軸突向另一個神經元產生輸出信號。 我們將嘗試通過使用人工神經網絡(ANN)來模擬這個過程,我們現在將其稱為神經網絡。 創建神經網絡的過程從最基本的形式單個感知器開始。
  • 數據工程師需要掌握的 18 個 Python 庫
    數據獲取ScrapyScrapy是Python開發的一個快速、高層次的屏幕抓取和web抓取框架,用於抓取web站點並從頁面中提取結構化的數據。其吸引人的地方在於任何人都可以根據需求方便的修改。它也提供了多種類型爬蟲的基類,如BaseSpider、sitemap爬蟲等,最新版本又提供了web2.0爬蟲的支持。
  • WePay機器學習反欺詐實踐:Python+scikit-learn+隨機森林
    WePay採用了流行的Python、scikit-learn開源學習機器學習工具以及隨機森林算法。以下是文章內容:什麼是shellselling?雖然欺詐幾乎涉及各種領域,但相對於傳統的買方或賣方僅僅擔心對方是否是騙子,支付平臺需要擔心的是交易雙方。
  • 乾貨| 請收下這份2018學習清單:150個最好的機器學習,NLP和Python...
    找到超過25個有關ML的「小抄」後,我寫一篇博文(https://unsupervisedmethods.com/cheat-sheet-of-machine-learning-and-python-and-math-cheat-sheets-a4afe4e791b6),裡面的資源都有超連結。
  • ...請收下這份2018學習清單:150個最好的機器學習,NLP和Python教程
    找到超過25個有關ML的「小抄」後,我寫一篇博文(https://unsupervisedmethods.com/cheat-sheet-of-machine-learning-and-python-and-math-cheat-sheets-a4afe4e791b6),裡面的資源都有超連結。
  • 乾貨 | 請收下這份2018學習清單:150個最好的機器學習,NLP和Python教程
    找到超過25個有關ML的「小抄」後,我寫一篇博文(https://unsupervisedmethods.com/cheat-sheet-of-machine-learning-and-python-and-math-cheat-sheets-a4afe4e791b6),裡面的資源都有超連結。
  • 掌握了這24個頂級Python庫,你就是大神!
    到目前為止,現有的庫都無法解決該問題。Spacy是一個非常有用且靈活的自然語言處理( NLP )庫和框架,用於清理創建模型的文本文檔。與類似用途的其他庫相比,SpaCy速度更快。Scikit-learn就像用於數據操作的Pandas和用於可視化的matplotlib一樣,scikit-learn是Python構建模型中的佼佼者。沒有什麼能與之媲美。事實上,scikit-learn建立在NumPy,SciPy和matplotlib之上。它是開放源碼的,每個人都可以訪問,並且可以在各種環境中重用。
  • 值得mark的11個開源機器學習項目
    機器學習庫的多樣性意味著無論你喜歡什麼語言或環境,都有可能是獲得你喜歡的。1. Scikit-learnScikit-learn通過在現有Python包上構建——NumPy SciPy和matplotlib——服務於數學和自然科學。生成的庫要麼可以使用交互式「工作檯」應用程式,要麼被嵌入到其他軟體和重用。工具箱可以在BSD許可下獲取,所以它是完全開放和可重用的。
  • Python模塊NumPy,Pandas,matplotlib的中文文檔
    今天比較忙所以不能寫長文了作為一名數據工程師需要熟練掌握python中的這些numpy,matplotlib,pandas,sklearn,seaborn,statsmodel.模塊但是由於這些模塊的文檔都是英文的可能一些英文不好的同學學起來會比較的困難,所以我從網上給大家找到一些中文的文檔
  • 一周AI最火論文 | 移動端的3D實時CNN正在成為現實,加速框架細節起底
    如果你關注推薦系統,那麼python版的LensKit推薦系統引擎庫(LKPY)可能會引起你的興趣。這是一個開源工具包,可用於構建、研究及學習推薦系統。2010年LensKit 的Java版本首次發布,目前該工具已經應用於各種研究的發表、小規模生產部署以及線上(MOOC)和線下(傳統教室)教育中。
  • python環境配置簡要流程
    __version__ 進行驗證是否安裝成功 8、安裝keras 驗證成功後,退出python,繼續在虛擬環境中進行 conda install keras=2.3.1(版本號) 通過進入python,進行
  • ImagePy——UI界面支持開放插件的Python開源圖像處理框架
    ImagePy 是一款基於 imagej 等插件的圖像處理框架,它可以與 scipy.ndimage、scikit-image、opencv、simpleitk、mayavi 以及任何基於 numpy 的庫進行組合使用,其地址為 http://imagepy.org。