Python中的人工智慧入門:在scikit-learn中的建模

2021-02-19 Numpy中文教程

  做好準備:在Seaborn中可視化數據  

鳶尾花數據集 (The Iris Flower dataset) 是目前仍在使用的最古老的機器學習數據集之一。它由Ronald Fisher在1936年發表,用於說明線性判別分析。問題是根據萼片和花瓣寬度和長度的測量結果對三種鳶尾花中的一種進行分類。

雖然這是一個非常簡單的問題,但基本工作流程如下:

加載數據集

可視化數據

對數據進行預處理和轉換

選擇要使用的模型

檢查模型的性能

解釋和理解模型(這個階段通常是可選的)

這是一個標準的流程模板,通常情況下,對於工業規模的問題,步驟1和2可能會比對於Kaggle競賽或UCI機器學習資源庫中的一個已經預處理過的數據集花費更長的時間(有時估計需要95%左右的時間)。我們將在後面的食譜和章節中深入探討這些步驟中每一個步驟的複雜性。

我們將假設你已經在前面安裝了這三個庫,並且你的Jupyter Notebook或Colab實例已經運行。此外,我們將使用seaborn和scikit-plot庫進行可視化,所以我們也將安裝它們。

!pip install seaborn scikit-plot

使用如此知名的數據集的方便之處在於,我們可以很容易地從很多包中加載數據集,例如,像這樣。

import seaborn as snsiris = sns.load_dataset('iris')

接下來我們直接從數據可視化開始。

在這個配方中,我們將通過數據探索的基本步驟。這對於了解問題的複雜性和數據的任何潛在問題通常很重要。

1. 繪製一個對偶圖。

%matplotlib inline# this^ is not necessary on Colabimport seaborn as snssns.set(style="ticks", color_codes=True)
g = sns.pairplot(iris, hue='species')

seaborn中的對偶圖可視化了數據集中的對偶關係。每個子圖顯示了一個變量與另一個變量的散點圖。對角線上的子圖顯示了變量的分布。顏色對應三個類。

從這個圖中,特別是如果你沿著對角線看,我們可以看到virginica和versicolor物種是不可(線性)分離的。這是我們要面對的問題,也是我們必須要克服的問題。

2. 讓我們快速看一下數據集。

因為花種是有順序的,一個一個列出來。

3. 把特徵和目標分開,準備進行訓練,如下:

classes = {'setosa': 0, 'versicolor': 1, 'virginica': 2}X = iris[['sepal_length', 'sepal_width', 'petal_length', 'petal_width']].valuesy = iris['species'].apply(lambda x: classes[x]).values

最後一行將三個類對應的三個字符串轉換為數字--這叫做序數編碼。多類機器學習算法可以處理這個問題。對於神經網絡,我們將使用另一種編碼,你將在後面看到。

在這些基本步驟之後,我們就可以開始開發預測模型了。這些模型是根據特徵預測花類的模型。我們將依次查看Python中三個最重要的機器學習庫。讓我們從scikit-learn開始。

Scikit-learn的建模

在這個方案中,我們將在scikit-learn中創建一個分類器,並檢查其性能。

Scikit-learn(又稱sklearn)是一個Python機器學習框架,自2007年開始開發。它也是目前最全面的框架之一,它可以與pandas、NumPy、SciPy和Matplotlib庫互操作。scikit-learn的大部分內容已經在Cython、C和C++中進行了速度和效率的優化。

請注意,不是所有的scikit-learn分類器都能做多類問題。所有的分類器都可以做二元分類,但不是所有的分類器都可以做兩個以上的類。幸運的是,隨機森林模型可以。隨機森林模型(有時也被稱為隨機決策森林)是一種可以應用於分類和回歸任務的算法,是決策樹的集合。其主要思想是我們可以通過在數據集的引導樣本上創建決策樹,並對這些樹進行平均,從而提高精度。

下面的一些代碼行對你來說應該是樣板文件,我們會反覆使用它們。

1. 將訓練和驗證分開

作為一個良好的實踐,我們應該總是在訓練中沒有使用的數據樣本上測試我們的模型的性能(被稱為保留集或驗證集),我們可以這樣做。

from sklearn.ensemble import RandomForestClassifierfrom sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split( X, y, test_size=0.33, random_state=0)

2. 定義一個模型

這裡我們定義我們的模型超參數,並使用這些超參數創建模型實例。在我們的案例中,具體操作如下。

超參數是指不屬於學習過程的參數,但卻控制著學習過程。在神經網絡的情況下,這包括學習率、模型架構和激活函數。

params = dict(    max_depth=20,    random_state=0,    n_estimators=100,)clf = RandomForestClassifier(**params)

3. 訓練模型

在這裡,我們將訓練數據集傳遞給我們的模型。在訓練過程中,模型的參數正在被擬合,以使我們獲得更好的結果(其中更好由一個函數定義,稱為成本函數或損失函數)。

在訓練中,我們使用擬合方法,它適用於所有sklearn兼容的模型。

clf.fit(X_train, y_train)

4. 檢查模型的性能

雖然有一個模型內部的衡量標準(成本函數),但我們可能想看看其他的衡量標準。在建模的上下文中,這些被稱為度量。在scikit-learn中,我們有很多指標可以使用。對於分類,我們通常會看混淆矩陣,而且通常我們會想要繪製它。

from sklearn.metrics import plot_confusion_matrix
plot_confusion_matrix( clf, X_test, y_test, display_labels=['setosa', 'versicolor', 'virginica'], normalize='true')

混淆矩陣是比較直觀的,特別是當表現形式像sklearn的plot_confusion_matrix()一樣清晰時。基本上,我們可以看到我們的類預測與實際類的吻合程度。我們可以看到預測與實際標籤的對比,按類分組,因此每個條目對應於給定實際類B的情況下,類A被預測了多少次。

這是混淆矩陣:

由於這是一個歸一化的martix,所以對角線上的數字也被稱為命中率或真陽率。我們可以看到,setosa在100%的時間內被預測為setosa(1)。相反,versicolor有95%的時間(0.95)被預測為versicolor,而5%的時間(0.053)被預測為virginica。

然而,從命中率來看,表現非常好;正如預期的那樣,我們在區分versicolor和virginica時遇到了一個小問題。

接下來我們會介紹Keras的建模,敬請期待。

相關焦點

  • 極簡Scikit-Learn入門
    今天繼續偷個懶,寫個短小精悍的入門級文章。Scikit-Learn高清全景圖傳送:http://scikit-learn.org/stable/tutorial/machine_learning_map/index.html在機器學習和數據挖掘的應用中
  • Python + Scikit-learn 完美入門機器學習指南 ​
    這時,scikit-learn 來了。Scikit-learn 是一個非常流行的機器學習工具,它幾乎集成了所有經典的機器學習算法,你只需要幾行代碼,通過簡單的方法類調用,就可以實現原本複雜的機器學習模型。
  • 【下載】Scikit-learn作者新書《Python機器學習導論》, 教程+代碼手把手帶你實踐機器學習算法
    您將學習使用Python和scikit-learn庫創建一個成功的機器學習應用程式所需的步驟。作者Andreas Muller和Sarah Guido將重點關注機器學習算法的實踐方法,而不是背後繁雜的數學。對NumPy和matplotlib庫的熟悉將幫助您從本書中獲得更多。
  • python機器學習之使用scikit-learn庫
    引言數據分析由一連串的步驟組成,對於其中預測模型的創建和驗證這一步,我們使用scikit-learn這個功能強大的庫來完成。scikit-learning庫python庫scikit-learn整合了多種機器學習算法。
  • 直答理工:機器學習——scikit-learn入門
    接下來將從具體介紹機器學習的基本概念及其在scikit-learn中實際操作。訓練組和測試組機器學習運用已有數據組的一些性質去預測新的數據。這就是為什麼一般機器學習中要將數據裂分為兩組,即訓練組和測試組,前者用於學習,後者則用於測試預測性質的準確性。
  • 首發:適合初學者入門人工智慧的路線及資料下載
    >scikit-learn基礎 7.machine-learning機器學習入門 8.deep-learning深度學習入門 9.feature-engineering 特徵工程入門第二、三個是今年剛翻譯的CS229的線性代數和概率論,這部分是斯坦福所有人工智慧有關的課程的數學基礎複習材料,非常實用。
  • 用Python (scikit-learn) 做PCA分析
    然而,即使在本教程的這一部分中使用的Iris數據集也是四維的。你可以使用主成分分析將四維數據減少到2維或3維這樣你就能更好地繪製並理解數據。Iris數據集是scikit-learn附帶的數據集之一,不需要從外部網站下載任何文件。下面的代碼將加載iris數據集。
  • Scikit-learn估計器分類
    Scikit-learn實現了一系列數據挖掘算法,提供通用編程接口、標準化的測試和調參公局,便於用戶嘗試不同算法對其進行充分測試和查找最優參數值。本次講解數據挖掘通用框架的搭建方法。有了這樣一個框架,後續章節就可以把講解重點放到數據挖掘應用和技術上面。為幫助用戶實現大量分類算法,scikit-learn把相關功能封裝成估計器。估計器用於分類任務,它主要包括兩個函數。
  • Scikit-Learn機器學習實踐:垃圾簡訊識別
    感謝關注天善智能,走好數據之路↑↑↑歡迎關注天善智能,我們是專注於商業智能BI,人工智慧AI,大數據分析與挖掘領域的垂直社區,學習,問答、求職一站式搞定!機器學習與垃圾簡訊識別前不久,我們使用NLTK的貝葉斯分類模型垃圾對簡訊數據進行機器學習的垃圾簡訊識別。
  • 一遍就懂的Scikit-Learn機器學習分類過程
    為了對鳶尾花進行分類,我們將執行以下步驟:加載鳶尾花數據集將數據拆分為訓練集和測試集在訓練集上訓練模型計算模型精度對外部輸入數據執行預測為了執行所有這些步驟,我們將使用scikit-learn python庫:https://scikit-learn.orgscikit-learn
  • Python粉都應該知道的開源機器學習框架:Scikit-learn入門指南
    而在這些分支版本中,最有名,也是專門面向機器學習的一個就是Scikit-learn。Scikit-learn項目最早由數據科學家 David Cournapeau 在 2007 年發起,需要NumPy和SciPy等其他包的支持,是Python語言中專門針對機器學習應用而發展起來的一款開源框架。
  • scikit-learn中的自動模型選擇和複合特徵空間
    使用scikit-learn管道自動組合文本和數字數據有時,機器學習模型的可能配置即使沒有上千種,也有數百種,這使得手工找到最佳配置的可能性變得不可能,因此自動化是必不可少的。在處理複合特徵空間時尤其如此,在複合特徵空間中,我們希望對數據集中的不同特徵應用不同的轉換。
  • 資料| 連廣場大媽都聽得懂的「機器學習入門」scikit-learn -17頁...
    from=leiphonecolumn_res0604pmScikit-learn 是基於 Python 的開源機器學習庫,它基於 NumPy 和 SciPy 等科學計算庫,並支持支持向量機、隨即森林、梯度提升樹、K 均值聚類等學習算法。Scikit-learn 目前主要由社區成員自發進行維護,且專注於構建機器學習領域內經廣泛驗證的成熟算法。
  • scikit-learn機器學習簡介
    在本節中,我們將介紹在scikit-learn中所使用的機器學習的基礎知識點,並且給出一個簡單的代碼示例。
  • 技術乾貨:人工智慧和機器學習領域中有趣的開源項目
    GraphLab提供了一個完整的平臺,讓機構可以使用可擴展的機器學習系統建立大數據以分析產品,該公司客戶包括Zillow、Adobe、Zynga、Pandora、Bosch、ExxonMobil等,它們從別的應用程式或者服務中抓取數據,通過推薦系統、欺詐監測系統、情感及社交網絡分析系統等系統模式將大數據理念轉換為生產環境下可以使用的預測應用程式。
  • WePay機器學習反欺詐實踐:Python+scikit-learn+隨機森林
    【編者按】將機器學習算法用於金融領域的一個很好的突破口是反欺詐,在這篇博文中,WePay介紹了支付行業構建機器學習模型應對很難發現的shell selling欺詐的實踐心得。WePay採用了流行的Python、scikit-learn開源學習機器學習工具以及隨機森林算法。以下是文章內容:什麼是shellselling?
  • Scikit-Learn決策樹算法類庫使用小結
    scikit-learn決策樹算法類庫內部實現是使用了調優過的CART樹算法,既可以做分類,又可以做回歸。
  • 用 Scikit-learn Pipeline 創建機器學習流程
    -4ac0d974bdcf使用 Scikit-learn Pipeline 可以很容易地將機器學習中的步驟串聯起來,簡化流程大幅度減少代碼冗餘,方便結果復現。在今天的教程中,我們將使用 Analytics Vidhya 上的 loan prediction 數據集( https://datahack.analyticsvidhya.com/contest/practice-problem-loan-prediction-iii/ ),嘗試將數據預處理和機器學習建模組織在一起形成一個典型的機器學習工作流程。
  • 適合 Python 入門的 8 款強大工具!
    它可以降低Python入門的門檻。它的主要功能包括Python Shell窗口(交互式解釋器)、自動補齊、高亮顯示語法以及基本的集成調試器。IDLE輕巧易用,方便學習。但是,它不適用於大型項目。許多程式設計師都將其作為最佳的Python工具。
  • 數據科學中一些不常用但很有用的Python庫
    導讀提到數據科學的python包,大家想到的估計是numpy,pandas,scikit-learn之類的,這裡給大家介紹一些不常用,但是非常有用的python包,就像是痒痒撓,雖然大部分時間用不上,但是真要用起來,還是挺爽的。