sklearn:Python語言開發的通用機器學習庫

2021-02-20 博文視點Broadview

小編說:深入理解機器學習並完全看懂sklearn文檔,需要較深厚的理論基礎。但是,要將sklearn應用於實際的項目中,只需要對機器學習理論有一個基本的掌握,就可以直接調用其API來完成各種機器學習問題。

本文選自《全棧數據之門》,將向你介紹通過三個步驟來解決具體的機器學習問題。了解本書詳情請點擊閱讀原文

scikit-learn是Python語言開發的機器學習庫,一般簡稱為sklearn,目前算是通用機器學習算法庫中實現得比較完善的庫了。其完善之處不僅在於實現的算法多,還包括大量詳盡的文檔和示例。其文檔寫得通俗易懂,完全可以當成機器學習的教程來學習。

如果要說sklearn文檔的重要性,個人覺得,應該可以與佛經中的《金剛經》相比。如果能將其當成《金剛經》一樣來閱讀,你的機器學習水平一定會有質的提升。

一般初閱佛經,肯定會被其中的一些名詞弄糊塗,就像初次閱讀sklearn的文檔一樣,會被諸如training data、testing data、model select、cross validation等這樣的詞彙弄糊塗。但實際上,只要肯用心讀,把這些基礎概念弄明白,後續學習就比較容易了。sklearn必須要結合機器學習的一些基礎理論來理解,就像佛經必須要結合一些佛法基礎理論來理解一樣。

既然是通用的機器學習庫,sklearn中包含了大量常用的算法。正如其介紹一樣,基本功能主要分為6個部分:分類、回歸、聚類、數據降維、模型選擇與數據預處理,如下圖所示。

要深入理解機器學習,並且完全看懂sklearn的文檔,需要較深厚的理論基礎。但是,要將sklearn應用於實際的項目中,卻並不需要特別多的理論知識,只需要對機器學習理論有一個基本的掌握,就可以直接調用其API來完成各種機器學習問題。

對於具體的機器學習問題,通常可以分為三個步驟:

下面就通過一個具體的示例來介紹這三個步驟。

在這個示例中,使用sklearn自帶的Iris數據來做演示,而算法使用kNN來進行分類,要了解kNN算法的詳細信息,請參考「近朱者赤,相親kNN」一節。

使用load_iris方法,加載Iris數據。Iris是一個非常有名的公共數據集,描述了鳶尾花的三種不同的子類別,共有4個特徵,分別為花萼的長度與寬度,花瓣的長度與寬度。可以不用關注具體分哪三類,只需要知道在數據中類標籤分別用0、1、2表示即可。

加載數據的代碼如下:

%pysparkfrom sklearn.datasets import load_irisfrom sklearn.cross_validation import train_test_split

iris = load_iris()data_X = iris.datadata_y = iris.target

print('data:', data_X.shape, data_y.shape)
print('features:', data_X[:3, :])
print('target:', data_y[:3])

train_X, test_X, train_y, test_y = train_test_split(data_X, data_y, test_size=0.2)

print('train:', train_X.shape, train_y.shape)
print('test: ', test_X.shape, test_y.shape)

將數據的特徵加載為data_X,將類別標籤加載為data_y,一般的命名習慣是,使用大寫的X表示特徵是多維的,而用小寫的y表示目標值為1維。不同的命名習慣,比較符合人類以貌取人的特點,程式設計師不僅是人,更是聰明的人,因此也有這樣的習慣。

加載完數據,使用sklearn自帶的train_test_split方法將數據按0.8與0.2的比例進行劃分,切分為訓練數據train與測試數據test,並將特徵與目標值分別命名為train_X、train_y與test_X、test_y。

其執行結果如下圖所示。

準備好數據後,就可以從neighbors近鄰類中導入kNN分類算法了,其代碼如下所示:

%pysparkfrom sklearn.neighbors import KNeighborsClassifier

knn = KNeighborsClassifier(n_neighbors=3, n_jobs=-1)

knn.fit(train_X, train_y)

preds = knn.predict(test_X)
print('knn model:', knn)
print('First 3 pred:',preds[:3])

通過使用兩個自定義參數n_neighbors(參考的近鄰數)與n_jobs(使用的CPU核數)來導入KNeighborsClassifier模型,這樣就生成了一個knn的模型。n_neighbors是knn中最重要的參數,可以通過交叉驗證來設置一個合理的值。而n_jobs是sklearn中所有支持並行的算法都會支持的參數,sklearn中有很多算法都可以將單臺機器的全部CPU進行並行運算,設置為-1即是使用機器的全部CPU核,也可以設置成具體的數字值。

接著使用fit方法在訓練數據上進行擬合,kNN是一個有監督的學習算法,因此在擬合數據的時候,需要將已知的類別標籤train_y與特徵train_X一起輸入到模型中進行數據擬合。

模型在訓練數據上完成了擬合,便可以對測試數據進行預測了,使用predict方法來對測試的特徵進行預測。因為是使用特徵來預測其類別,此處自然不能傳入測試數據的類別標籤數據test_y,這個數據是在後面對模型進行評估時使用的。列印knn模型,會輸出其用於構建的參數,也可以列印出預測的前三個值,如下圖所示。

在上面的建模與預測過程中,sklearn的這種簡潔API方式已經成為現代機器學習庫爭相模仿的對象,就連Spark的ML庫,也在學習這種簡潔的方式,可以說幾乎已經成為大眾接受的標準方式了。

評估一個模型的好壞是機器學習中非常重要的任務。否則,無法評價模型的好壞,也就無法更好地優化模型。歸根到底,所有的機器學習算法都是一堆數學運算,其預測的值與標準的值是可以進行數學上的對比的。在這一點上,與教育中所用的考試分數來評估一個人的能力不一樣,也與公司中所用的KPI來考核一個人對公司的貢獻是不一樣的。

在分類算法中,通常的評價指標有精確率、召回率與F1-Score等幾種。

前面構建的knn模型,本身也有一個score方法,可以對模型的好壞做一個初步評估,其使用的指標為F1-Score。當然,也可以使用sklearn中提供的更多的評價指標來評估模型。其代碼如下所示:

%pyspark

from pprint import pprint

print(knn.score(test_X, test_y))

from sklearn.metrics import precision_recall_fscore_support

scores = precision_recall_fscore_support(test_y, preds)pprint(scores)

對每個類別的數據都進行了精確率、召回率與F-beta Score的評估,其結果如下圖所示。

辛辛苦苦訓練好一個模型後,總希望後面可以直接使用,此時就必須要對模型進行持久化操作了。模型本身就是一個Python的對象,可以使用pickle的方式將模型轉儲到文件,但sklearn推薦使用其joblib接口,保存與加載模型都非常簡單:

import joblib

# 保存模型
joblib.dump(model, '/tmp/model.pkl')

# 加載模型
model = joblib.load('/tmp/model.pkl')

前面已經演示了一個完整的使用sklearn來解決實際問題的例子,可以發現,如果只是調用sklearn的API,確實不需要太複雜的理論知識。在學完上面的示例後,你或許都並不清楚kNN算法是如何工作的,但學習是分層次的。

也許有的人認為,只會調用API來實現,並不是真正會用機器學習了。確實,不理解kNN算法,就不清楚如何進行算法的參數調優。但個人認為,從sklearn入門機器學習是最好的途徑,儘管你以前完全沒有接觸過機器學習。

我所理解的,學習機器學習算法的三個層次如下所述。

調用:知道算法的基本思想,能應用現有的庫來做測試。簡單說,就是了解kNN是做什麼的,會調用sklearn中的kNN算法。

調參:知道算法的主要影響參數,能進行參數調節優化。

嚼透:理解算法的實現細節,並且能用代碼實現出來。

上面三個層次是不是很押韻呢,但不幸的是,有的人一上來就想達到第三個層次,於是剛開始就被如何實現kNN算法嚇到了,過不了三天就從入門到放棄了。

作為應用型的機器學習,能達到第三階段固然好,但在實際應用中,建議能調用現有的庫就直接調用好了。不理解的地方,能看懂源碼最好。不太建議自己從頭實現,除非能力確實夠了,否則寫出來的代碼並不能保證性能與準確性。

當然,從另外一個角度來說,尤其是在分布式環境下,機器學習還有另外三個層次,想知道的話,請見《全棧數據之門一書。


喜歡請分享至朋友圈

了解更多本書詳情請點擊閱讀原文

長按二維碼輕鬆關注

點擊閱讀原文,即可快速抵達本書詳情頁!

相關焦點

  • 基於 Python 語言的機器學習工具Sklearn
    本篇介紹了Sklearn機器學習基礎,從Sklearn的簡介,模塊以及與tensorflow的優劣勢對比來了解基於Python語言的機器學習工具
  • 機器學習最主流的算法庫sklearn
    「 scikit-learn,簡稱sklearn,是用Python語言開發的機器學習模塊庫,其包含大量的機器學習算法和測試數據集
  • 2020年六大機器學習Python庫!
    外頭有許多類型的python庫可用,本文介紹了一些流行的機器學習庫。1. NumPy:NumPy是一種通用的數組處理軟體包。它提供高性能的多維數組對象和用於處理這些數組的工具。它是用於科學計算的基本Python軟體包。
  • 菜鳥學機器學習,Sklearn庫主要模塊功能簡介
    ,所以在差不多理清了各模塊功能後便相繼推出了各自教程(文末附連結);後來,當接觸了機器學習庫sklearn之後,才發現三劍客也不外如是,相比sklearn簡直是小巫見大巫;再後來,又開始了pyspark的學習之旅,發現無論是模塊體積還是功能細分,pyspark又都完爆sklearn;最近,逐漸入坑深度學習(TensorFlow框架),終於意識到python數據科學庫沒有最大,只有更大……
  • Python 機器學習庫 Top 10,你值得擁有!
    ,成為機器學習領域中最熱門最常用的程式語言之一。隨著人工智慧技術的發展與普及,Python 超越了許多其他程式語言,成為了機器學習領域中最熱門最常用的程式語言之一。PyTorch 是在 2017 年推出的,自成立以來,該庫越來越受歡迎並吸引了越來越多的機器學習開發人員。
  • Python語言下的機器學習庫
    我們的目的不是列出Python中所有機器學習庫(搜索「機器學習」時Python包索引(PyPI)返回了139個結果),而是列出我們所知的有用並且維護良好的那些。另外,儘管有些模塊可以用於多種機器學習任務,我們只列出主要焦點在機器學習的庫。比如,雖然Scipy包含一些聚類算法,但是它的主焦點不是機器學習而是全面的科學計算工具集。因此我們排除了Scipy(儘管我們也使用它!)。
  • 技術乾貨 | Sklearn機器學習基礎
    源 / 小鵝通一、 scikit-learn介紹與安裝介紹:自2007年發布以來,scikit-learn已經成為Python重要的機器學習庫了scikit-learn簡稱sklearn,支持包括分類、回歸、降維和聚類四大機器學習算法。還包含了特徵提取、數據處理和模型評估三大模塊。sklearn是Scipy的擴展,建立在NumPy和matplotlib庫的基礎上。利用這幾大模塊的優勢,可以大大提高機器學習的效率。
  • 十大開發必備的Python庫,讓機器學習更簡單
    如今,Python已是流行、且使用廣泛的程式語言之一,它已經取代了業界許多程式語言。Python備受開發人員歡迎的一項主要原因是,它能夠為用戶提供大量可供使用的庫集合。在本文中,我們將和您討論Python中的一些庫。開發人員可以使用它們來編寫、清理和表示數據,並且能夠在現有的各種應用程式中實現機器學習的效果。
  • Python機器學習·微教程
    Python目前是機器學習領域增長最快速的程式語言之一。該教程共分為11小節。
  • python機器學習:常用庫的介紹及安裝
    現在,隨著人工智慧的興起,機器學習越來越被各行業看重,從而使得人工智慧的需求會越來越大。今天,我們就從零基礎開始學習人工智慧的基礎篇——機器學習。工欲善其事必先利其器,所以,我們首先來看一下,我們要學習這些東西,需要準備些什麼!首先電腦一臺,這是必備的。下面我們來看一下需要安裝些什麼軟體到電腦上!
  • Python機器學習系列3:一個通用、強大的Python機器學習函數庫
    如果你對Python機器學習感興趣,正在尋找一個強大的Python機器學習庫,那麼本文將強烈推薦scikit-learn,它可以幫助你把機器學習輕鬆應用到生產環境中。本文將會介紹對scikit-learn庫進行基本介紹,並擴展介紹相關常用機器學習資源。
  • 2019 必知的 10 大頂級 python 庫
    在本文中,我們將討論一些 python 中的頂級庫,開發人員可以使用這些庫在現有的應用程式中應用、清洗和表示數據,並進行機器學習研究。python 在開發人員中流行的原因有很多。然而,最重要的一點是它有大量的庫供用戶使用。python 的簡單性吸引了許多開發人員為機器學習創建新的庫。由於有大量的庫,python 在機器學習專家中變得非常流行。所以,這裡要介紹的第一個庫是 TensorFlow。
  • 通過sklearn上手你的第一個機器學習實例
    因此,想要學好機器學習一定要有非常多的項目練習作為支撐,從實踐中探尋機器學習的技法。但一個機器學習項目的實施需要實踐者擁有豐富的機器學習理論並具有將理論知識實踐的能力,這讓很多機器學習小白望而卻步。本文將利用sklearn中自帶的數據集(鳶尾花數據集),並通過邏輯回歸算法實現對鳶尾花的分類。
  • Python與人工智慧的關係原來是這樣的...
    從上圖可以看出,人工智慧包含常用機器學習和深度學習兩個很重要的模塊,而右圖中python擁有matplotlib、Numpy、sklearn、keras等大量的庫,像pandas、sklearn、matplotlib這些庫都是做數據處理
  • 搞機器學習,Python 和 R 哪個更合適?
    這並不意味著必須把這兩個語言劃分到不同的領域 ——python也足以被用來作為數據分析的工具,R也具備充分的適應性可以完成機器學習中的重要工作。這兩種語言各自有大量的庫試圖去完成對方的功能。Python具有可以提升其顯著推斷能力的庫,R也有提升其預測精度的庫。
  • 2020年最流行的十個Python庫(上)
    Python是最著名的程式語言之一,由於它最簡單的語法結構而受到開發人員的青睞,更隨著近年來它在人工智慧和機器學習領域中正變得越來越重要。Python之所以強大,還因為它擁有大量的庫,這使得python滲透於任何類型的開發,藉助python可以進行網絡開發,腳本編寫,遊戲開發,數據科學等工作。
  • python推薦 | 面向地學領域的Python庫匯總
    Python中有很多處理模式輸出的庫,功能都比較完善。模式輸出處理•wrf-python:對於使用WRF模式的來說使用最為頻繁的模式輸出後處理工具之一。•salem:這個庫包含了數據處理和可視化幾乎所有功能,也提供了不少WRF模式後處理和前處理的函數。除此以外還是做掩膜的利器,之前的文章也有提到python繪圖 | salem一招解決所有可視化中的掩膜(Mask)問題。
  • 學習筆記,從NumPy到Scrapy,學習Python不能錯過這些庫
    在網絡上看到幾位前輩寫了關於python深度學習庫的文章,對於小小白來說,因為我剛開始學python,我得承認自己看完後依然覺得雲裡霧裡的,不知道這些庫到底對我有什麼用處。所以我到網絡上搜集補充關於這些庫的說明內容,感覺在這個整理資料的過程中,對於這些python程序庫了解了更多,以下是我整理的學習筆記。
  • 機器學習 | 四大常用機器學習Python庫介紹
    點擊下方公眾號,回復資料,收穫驚喜今天這篇我們介紹下Python中常用的機器學習庫(機器(機器學習、深度學習啥的,小編還是建議使用Python進行建模編寫哈),也算是本公號機器學習的第一篇推文,主要內容如下:深度學習常用四大Python庫這一部分我們簡單介紹下Python中的常用的機器學習庫,算是比較入門的介紹哈,具體包括Scikit-learn、Keras、TensorFlow和PyTorch,下面我們就一一簡單介紹:
  • 常用python機器學習庫總結
    眾所周知現在人工智慧非常的火熱,機器學習也算是人工智慧中的一個領域,在其中有一塊是對文本進行分析,對數據進行深入的挖掘提取一些特徵值,然後用一些算法去學習,訓練,分析,甚至還能預測,我們就來看看python有哪些機器學習庫吧!1.