Scikit入門指南


作者|Rebecca Vickery
編譯|VK
來源|Towards Datas Science

scikit-learn是2007年作為Googles Summer代碼項目開發的,現在被廣泛認為是最流行的機器學習Python庫。

為什么這個庫被認為是機器學習項目的最佳選擇之一,特別是在生產系統中,有許多原因。這些包括但不限於以下內容。

  • 它對庫的開發有很高的支持和嚴格的管理,這意味着它是一個非常健壯的工具。

  • 有一個清晰、一致的代碼風格,確保機器學習代碼易於理解和可復制,同時也大大降低了編寫機器學習模型的門檻。

  • 它受到第三方工具的廣泛支持,因此可以豐富功能以適應各種用例。

如果你正在學習機器學習,那么Scikit learn可能是開始學習的最佳庫。它的簡單性意味着它相當容易掌握,通過學習如何使用它,你還可以很好地掌握典型的機器學習工作流中的關鍵步驟。

下面這篇文章是對該工具的初學者友好的介紹,應該能讓你對開發一個簡單的機器學習模型有足夠的了解。


要安裝Scikit的最新版本,請運行以下命令。

pip install scikit-learn

本文中的代碼示例運行在可以直接從Scikit-learn api導入的經典wine數據集上。

from sklearn.datasets import load_wine

X,y = load_wine(return_X_y=True)

Estimators

Scitkit學習庫提供了大量的預構建算法來執行有監督和無監督的機器學習。它們通常被稱為Estimators。

你為你的項目選擇的Estimators將取決於你擁有的數據集和你試圖解決的問題。Scikit學習文檔提供了如下所示的圖表,幫助你確定哪種算法適合你的任務。

Scikit learn之所以能如此直接地使用,是因為無論你使用的模型或算法是什么,用於模型訓練和預測的代碼結構都是相同的。

為了說明這一點,讓我們通過一個例子。

假設你正在處理一個回歸問題,並希望訓練一個線性回歸算法,並使用得到的模型進行預測。使用Scikit learn的第一步是調用logistic回歸Estimator並將其另存為對象。下面的示例調用該算法並將其保存為一個名為lr的對象。

from sklearn.linear_model import LogisticRegression

lr = LogisticRegression()

下一步是根據一些訓練數據擬合模型。這是使用fit()方法執行的。我們在特征和目標數據調用lr.fit(),並將生成的模型另存為名為model的對象。在下面的例子中,我也用train方法將數據集分割成測試集。

from sklearn.model_selection import train_test_split

X_train, X_test, y_train, y_test = train_test_split(X, y, random_state=0)

model = lr.fit(X_train, y_train)

下一步,我們使用模型和predict()方法來預測以前看不到的數據。

predictions = model.predict(X_test)

如果我們現在要使用Scitkit learn執行不同的任務,比如說,我們想訓練一個隨機森林分類器。代碼看起來非常相似,並且具有相同的步驟數。

from sklearn.ensemble import RandomForestClassifier

rf = RandomForestClassifier()
rf_model = rf.fit(X_train, y_train)
rf_predictions = rf_model.predict(X_test)

這種一致的代碼結構使得開發機器學習模型非常直接,而且生成的代碼具有很高的可讀性和可重復性。


預處理

在大多數實際的機器學習項目中,你使用的數據不一定准備好訓練模型。你很可能首先需要執行一些數據預處理和轉換步驟,例如處理缺失值、將類別數據轉換為數值或應用特征縮放。

scikitlearn有內置的方法來執行這些預處理步驟。例如,SimpleImputer()使用你選擇的方法填充缺少的值。

from sklearn.impute import SimpleImputer

imputer = SimpleImputer(strategy='mean')
X_train_clean = imputer.fit(X_train)

Scikit學習文檔在這里列出了數據預處理的完整選項。


評估

一旦一個模型被訓練過,你需要衡量這個模型在預測新數據方面有多好。此步驟稱為模型評估,你選擇的度量將由你嘗試解決的任務確定。例如,通常在回歸問題中,你可以選擇RMSE,而對於分類,你可以選擇F1分數。

所有Estimator都包含一個score()方法,該方法返回與所執行的機器學習任務最相關的默認度量。

Scikit learn還提供了一組度量函數,這些函數為模型提供了更詳細的評估。例如,對於分類任務,庫有一個分類報告,它提供精度、召回率、F1分數和總體准確度。

分類報告代碼和輸出如下所示。

from sklearn.metrics import classification_report

print(classification_report(rf_predictions, y_test))


模型優化

Scikit學習庫中的所有Estimator都包含一系列參數,其中有多個選項。為特定算法選擇的值將影響最終模型的性能。例如,使用RandomForestClassifier,可以將樹的最大深度設置為可能的任何值,並且根據你的數據和任務,此參數的不同值將產生不同的結果。

這種嘗試不同參數組合以找到最佳組合的過程稱為超參數優化。

Scikit learn提供了兩個工具來自動執行此任務,GridSearchCV實現了一種稱為窮舉網格搜索的技術,RandomizedSearchCV執行隨機參數優化。

下面的示例使用GridSearchCV為RandomForestClassifier查找最佳參數。輸出顯示在代碼下面。

param_grid = { 
    'n_estimators': [200, 500],
    'max_features': ['auto', 'sqrt', 'log2'],
    'max_depth' : [4,5,6,7,8],
    'criterion' :['gini', 'entropy']
}
from sklearn.model_selection import GridSearchCV
CV = GridSearchCV(rf, param_grid, n_jobs= 1)
                  
CV.fit(X_train, y_train)  
print(CV.best_params_)    
print(CV.best_score_)


管道

Scikit-learn包以管道的形式提供了更方便的代碼封裝形式。此工具使所有預處理任務都可以與分類器步驟鏈接在一起,因此只需對單個管道對象調用fit()或predict()即可執行工作流中的所有步驟。

這使得代碼具有很高的可讀性,並減少了機器學習工作流中的重復步驟。

為了創建管道,我們首先在下面的代碼中定義我稱為pipe的對象中的步驟。然后我們可以簡單地調用這個對象的fit來訓練模型。管道對象還可以用於對新數據進行預測。

from sklearn.pipeline import Pipeline
pipe = Pipeline([('imputer', SimpleImputer()), ('rf', RandomForestClassifier())])
pipeline_model = pipe.fit(X_train, y_train)
pipeline_model.score(X_test, y_test)

原文鏈接:https://towardsdatascience.com/a-beginners-guide-to-scikit-learn-14b7e51d71a4

歡迎關注磐創AI博客站:
http://panchuang.net/

sklearn機器學習中文官方文檔:
http://sklearn123.com/

歡迎關注磐創博客資源匯總站:
http://docs.panchuang.net/


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM