天天看點

入門系列之Scikit-learn在Python中建構機器學習分類器

歡迎大家前往騰訊雲+社群,擷取更多騰訊海量技術實踐幹貨哦~

本文由信姜緣 發表于雲+社群專欄

機器學習是計算機科學、人工智能和統計學的研究領域。機器學習的重點是訓練算法以學習模式并根據資料進行預測。機器學習特别有價值,因為它讓我們可以使用計算機來自動化決策過程。

在本教程中,您将使用Scikit-learn(Python的機器學習工具)在Python中實作一個簡單的機器學習算法。您将使用Naive Bayes(NB)分類器,結合乳腺癌惡性良性腫瘤資訊資料庫,預測惡性良性腫瘤是惡性還是良性。

在本教程結束時,您将了解如何使用Python建構自己的機器學習模型。關于Python的文法詳見騰訊雲開發者手冊Python中文開發文檔。

要完成本教程,您需要:

Python 3 本地程式設計環境

在virtualenv中安裝Jupyter Notebook。Jupyter Notebooks在運作機器學習實驗時非常有用。您可以運作短代碼塊并快速檢視結果,進而輕松測試和調試代碼。

讓我們首先安裝Python子產品Scikit-learn,這是Python 最好、文檔記錄最多的機器學習庫之一。

要開始我們的編碼項目,先要激活我們的Python 3程式設計環境。確定您位于環境所在的目錄中,然後運作以下指令:

激活我們的程式設計環境後,檢查是否已安裝Sckikit-learn子產品:

如果sklearn已安裝,則此指令将完成且沒有錯誤。如果未安裝,您将看到以下錯誤消息:

錯誤消息表明sklearn未安裝,是以請使用pip下載下傳庫:

安裝完成後,啟動Jupyter Notebook:

在Jupyter中,建立一個名為ML Tutorial的新Python Notebook。在Notebook的第一個單元格,輸入sklearn子產品:

ML Tutorial

您的 Notebook應如下圖所示:

入門系列之Scikit-learn在Python中建構機器學習分類器

Notebook

現在我們已經在 Notebook中導入了sklearn,我們可以開始使用機器學習模型的資料集。

我們将在本教程中使用的資料集是乳腺癌威斯康星診斷資料庫。該資料集包括關于乳腺癌惡性良性腫瘤的各種資訊,以及惡性或良性的分類标簽。該資料集在569個惡性良性腫瘤上具有569個執行個體或資料,并且包括關于30個屬性或特征的資訊,例如惡性良性腫瘤的半徑,紋理,平滑度和面積。

使用該資料集,我們将建構機器學習模型以使用惡性良性腫瘤資訊來預測惡性良性腫瘤是惡性的還是良性的。

Scikit-learn安裝了各種資料集,我們可以将其加載到Python中,并包含我們想要的資料集。導入并加載資料集:

該data變量表示一個像字典一樣工作的Python對象。字典的關鍵是分類标簽名稱(target_names),實際标簽(target),屬性/特征名稱(feature_names)和屬性(data)。

屬性是任何分類器的關鍵部分。屬性捕獲有關資料性質的重要特征。鑒于我們試圖預測的标簽是惡性惡性良性腫瘤與良性惡性良性腫瘤,可能的有用屬性有惡性良性腫瘤的大小,半徑和質地。

為每個重要資訊集建立新變量并配置設定資料:

我們現在有了每組資訊的清單。為了更好地了解我們的資料集,讓我們通過輸出我們的類标簽、第一個資料執行個體的标簽、我們的功能名稱以及第一個資料執行個體的功能值來檢視我們的資料:

如果運作代碼,您将看到以下結果:

入門系列之Scikit-learn在Python中建構機器學習分類器

輸出結果

如圖所示,我們的類名是惡性和良性,然後将其映射到二進制值0和1,其中0代表惡性惡性良性腫瘤1代表良性惡性良性腫瘤。是以,我們的第一個資料執行個體是惡性惡性良性腫瘤,其平均半徑為1.79900000e+01。

現在我們已經加載了資料,我們可以使用我們的資料來建構我們的機器學習分類器。

要評估分類器的性能,您應該始終在看不見的資料上測試模型。是以,在構模組化型之前,将資料拆分為兩部分:訓練集和測試集。

您可以使用訓練集在開發階段訓練和評估模型。然後,您使用訓練的模型對看不見的測試集進行預測。這種方法讓您了解模型的性能和穩健性。

幸運的是,sklearn有一個名為<code>train_test_split()</code>的函數,它将您的資料劃分為這些集合。導入該函數,然後使用它來拆分資料:

該函數使用test_size參數随機分割資料。在這個例子中,我們現在有一個測試集(test)代表原始資料集的33%。然後剩下的資料(train)組成訓練資料。我們還有列車/測試變量的相應标簽,即<code>train_labels</code>和<code>test_labels</code>。

我們現在可以繼續教育訓練我們的第一個模型。

機器學習有很多模型,每種模型都有自己的優點和缺點。在本教程中,我們将重點介紹一種通常在二進制分類任務中表現良好的簡單算法,即Naive Bayes (NB)。

首先,導入GaussianNB子產品。然後使用<code>GaussianNB()</code>函數初始化模型,然後通過使用<code>gnb.fit()</code>将模型拟合到資料來訓練模型:

在我們訓練模型之後,我們可以使用訓練的模型對我們的測試集進行預測,這裡,我們使用<code>predict()</code>函數。該predict()函數傳回測試集中每個資料執行個體的預測數組。然後我們可以輸出我們的預測,以了解模型确定的内容。

使用帶有test的predict()函數輸出結果:

運作代碼,您将看到以下結果:

入門系列之Scikit-learn在Python中建構機器學習分類器

預測輸出結果

正如您在Jupyter Notebook輸出中看到的,該predict()函數傳回了一個0s和1s 數組,它們代表了我們對惡性良性腫瘤類的預測值(惡性與良性)。

現在我們有了預測,讓我們評估分類器的表現。

使用真實類标簽數組,我們可以通過比較兩個數組(<code>test_labelsvs.preds</code>)來評估模型預測值的準确性。我們将使用<code>sklearn</code>函數<code>accuracy_score()</code>來确定機器學習分類器的準确性。

您将看到以下結果:

入門系列之Scikit-learn在Python中建構機器學習分類器

準确性結果

正如您在輸出中看到的那樣,NB分類器準确率為94.15%。這意味着分類器有94.15%的時間能夠正确預測惡性良性腫瘤是惡性還是良性。這些結果表明我們的30個屬性的特征集是惡性良性腫瘤類别的良好名額。

您已成功建構了第一台機器學習分類器。讓我們通過将所有<code>import</code>語句放在Notebook或腳本的頂部來重新組織代碼。代碼的最終版本應如下所示:

ML教程

現在,您可以繼續使用代碼來檢視是否可以使分類器的性能更佳。您可以嘗試不同的功能子集,甚至嘗試完全不同的算法。

在本教程中,您學習了如何在Python中建構機器學習分類器。現在,您可以使用Scikit-learn在Python中加載資料、組織資料、訓練、預測和評估機器學習分類器。本教程中的步驟可以幫助您簡化在Python中使用自己的資料的過程,更多機器學習和人工智能的相關教程可以通路騰訊雲社群。

參考文獻:《How To Build a Machine Learning Classifier in Python with Scikit-learn》
機器學習入門需要哪些數學基礎? 安全報告 | 2018上半年網際網路惡意爬蟲分析:從全景視角看爬蟲與反爬蟲 安全報告 | SSH 暴力破解趨勢:從雲平台向物聯網裝置遷移 給你的CVM安裝一個面闆吧!

此文已由作者授權騰訊雲+社群釋出,原文連結:https://cloud.tencent.com/developer/article/1171081?fromSource=waitui

歡迎大家前往騰訊雲+社群或關注雲加社群微信公衆号(QcloudCommunity),第一時間擷取更多海量技術實踐幹貨哦~

海量技術實踐經驗,盡在雲加社群!

https://cloud.tencent.com/developer