天天看點

《Python資料科學指南》——2.4 使用scikit-learn進行機器學習

本節書摘來自異步社群《python資料科學指南》一書中的第2章,第2.4節,作者[印度] gopi subramanian ,方延風 劉丹 譯,更多章節内容可以通路雲栖社群“異步社群”公衆号檢視。

scikit-learn是python中的一個全能的機器學習庫,我們在本書中會大量使用它。我們使用的版本為0.15.2。你可以在指令行裡調用_version_屬性來檢查版本,如圖2-17所示。

《Python資料科學指南》——2.4 使用scikit-learn進行機器學習

本節裡,我們會示範一些scikit-learn包的功能,學習它的一些api架構,為後續章節的學習打下基礎。

scikit-learn提供了一個内置資料集,我們看看如何通路和使用它。

我們來看看如何調用scikit-learn裡的這些機器學習函數。

為了使用内置的資料集,我們得先加載scikit-learn庫,庫的子產品裡包含着各種各樣的函數。

<code>from sklearn.datasets import load_iris,load_boston,make_classification</code>

第1個資料集是iris,請參見以下位址來擷取更多細節資訊。

這是一個由donald fisher先生引入的分類問題的經典資料集。

我們調用的load_iris函數傳回一個字典。使用合适的鍵,可以從這個字典對象中查詢擷取到自變器x、因變量y、因變量名、各個特征屬性名等資訊。

我們将這些資訊列印出來看看它們的值,結果如圖2-18所示。

《Python資料科學指南》——2.4 使用scikit-learn進行機器學習

如你所見,預測器裡有150個執行個體和4種屬性,因變量有150個執行個體,每個預測集合裡的記錄都有一個類别标簽。我們接着列印輸出屬性名:花瓣、花萼的寬度和長度,以及類别标簽。在後續章節裡,我們還會多次使用這個資料集。

我們接着要看的是另一個資料集:boston住房資料集,它屬于回歸問題。

這個資料集的加載過程和iris基本一樣,從字典的各個鍵也可以查詢到資料的各個組成部分,包括預測器和因變量。我們列印輸出這些變量來看一下,如圖2-19所示。

《Python資料科學指南》——2.4 使用scikit-learn進行機器學習

如你所見,預測器集合裡有506個執行個體和13種屬性,因變量有506個條目。最後,我們也列印輸出屬性名。

scikit-learn也給我們提供了一些函數來産生随機分類的資料集,并可以指定一些需要的屬性。

make_classification函數用來産生分類資料集。本例中,我們指定n_samples參數生成50個執行個體,n_features參數生成5個屬性,n_classes參數生成兩個類集合。請看這個函數的輸出,如圖2-20所示。

《Python資料科學指南》——2.4 使用scikit-learn進行機器學習

如你所見,預測器裡有150個執行個體和5種屬性,因變量有150個執行個體,每個預測集合裡的記錄都有一個類别标簽。

我們将預測器集合x裡的第2條記錄列印出來,你會看到這是一個五維的向量,與5個我們所需的特征相關聯。最後,我們把因變量y也列印出來。預測器裡的第2條記錄的類别标簽是1。

scikit-learn也給我們提供了一些函數來産生非線性關系。

你應該已經從前面的章節中了解了pyplot,現在通過它繪制的圖來幫助我們了解非線性關系。

如圖2-21所示,我們的分類結果産生了兩個同心圓。x是兩個變量的資料集,變量y是類标簽。這兩個同心圓說明了預測器裡兩個變量的關系是非線性的。

《Python資料科學指南》——2.4 使用scikit-learn進行機器學習

scikit-learn裡還有一個有趣的函數make_moons也能産生非線性關系。

我們看一下它生成的圖2-22來了解非線性關系。

《Python資料科學指南》——2.4 使用scikit-learn進行機器學習

新月圖形說明了預測器集合x裡的屬性之間的關系是非線性的。

接下來我們要來讨論scikit-learn的api架構,使用api架構的主要優勢在于它十分簡潔。所有源于baseestimator的資料模型必須嚴格實作fit和transform函數。我們将從一些示例中詳細了解。

我們先從scikit-learn的預處理子產品開始。

我們使用polynomialfeatures類來示範使用scikit-learn的sdk的友善快捷之處。要了解polynomialfeatures的更多資訊,請參見:

有時我們需要往預測器變量集合中增加新的變量,以判斷模型精度是否提高。我們可以将已有特征的多項式作為新特證,polynomialfeatures幫助我們實作這一目标。

首先,我們要建立一個資料集。本例中,資料集有兩個執行個體和兩個屬性。

<code>poly = polynomialfeatures(degree = 2)</code>

然後,我們将采用所需的多項式階數來執行個體化polynomialfeatures類。本例中,階數為2。

接着要介紹的是fit和transform函數。fit函數用來在資料轉換時做必需的計算。本例中它是多餘的,不過在本節後面部分我們會遇到一些如何使用它的示例。

transform函數接收輸入資料,并基于fit函數的計算結果将輸入資料進行轉換。

本例還有另外一種方式,在一個操作中調用fit和transform。我們來看看變量x初始和轉換之後的數值和形态,如圖2-23所示。

《Python資料科學指南》——2.4 使用scikit-learn進行機器學習

baseestimator要求用以實作的類提供fit和transform兩種方法,這樣才能保持api簡潔清晰。

我們再看另一個示例,從tree子產品中引入decision treeclassifier類,它實作了決策樹算法。

<code>from sklearn.tree import decisiontreeclassifier</code>

我們把這個類放到實踐操作中。

我們使用iris資料集來看來怎樣使用樹算法。先把iris資料集加載到變量x和y中,然後把decisiontreeclassifier執行個體化,接着調用fit函數,傳遞預測器x和因變量y來建立模型。這樣就建立了一個樹模型,我們現在可以用它來進行預測。我們用predict函數對給定的輸入預測其類标簽。如你所見,和在polynomialfeatures裡一樣,我們也使用了相同的fit和predict方法。還有另外兩個方法:predict_proba和predict_log_proba。前者給出預測的機率,後者給出預測機率的對數。

現在來看另一個有趣的功能pipe lining,使用這個功能,不同的機器學習方法可以被連結在一起。

我們從執行個體化polynomialfeatures和decisiontreeclassifier資料處理規範開始。

<code>steps = [('poly',poly),('tree',tree_estimator)]</code>

我們先定義一個元組清單來标示我們的連結順序。運作多項式特征生成器之後,再執行決策樹。

我們通過steps變量聲明的清單将pipeline對象執行個體化。現在就能像以往那樣調用fit和predict方法了。

我們可以調用named_steps屬性來檢視模型在pipeline裡的不用階段的情況,如圖2-24所示。

《Python資料科學指南》——2.4 使用scikit-learn進行機器學習

scikit-learn裡還有更多的資料集生成函數,請參見:

在使用make_circle和make_moons函數的時候,我們曾經提到可以給資料集加入許多想要的屬性,如果包含了不正确的類标簽,資料可能會受到輕微的損壞。下面的連結列出了許多描述這些細微差别的選項,請參見:

第2章“python環境”中“繪圖技巧”的相關内容。

本文僅用于學習和交流目的,不代表異步社群觀點。非商業轉載請注明作譯者、出處,并保留本文的原始連結。