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


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

本文由信姜緣 發表於雲+社區專欄

介紹

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

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

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

准備

要完成本教程,您需要:

  • Python 3 本地編程環境
  • 在virtualenv中安裝Jupyter Notebook。Jupyter Notebooks在運行機器學習實驗時非常有用。您可以運行短代碼塊並快速查看結果,從而輕松測試和調試代碼。

第一步 - 導入Scikit-learn

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

要開始我們的編碼項目,先要激活我們的Python 3編程環境。確保您位於環境所在的目錄中,然后運行以下命令:

$ . my_env/bin/activate

激活我們的編程環境后,檢查是否已安裝Sckikit-learn模塊:

(my_env) $ python -c "import sklearn"

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

Traceback (most recent call last): File "<string>", line 1, in <module> ImportError: No module named 'sklearn'

錯誤消息表明sklearn未安裝,因此請使用pip下載庫:

(my_env) $ pip install scikit-learn[alldeps]

安裝完成后,啟動Jupyter Notebook:

(my_env) $ jupyter notebook

在Jupyter中,創建一個名為ML Tutorial的新Python Notebook。在Notebook的第一個單元格,輸入sklearn模塊:

ML Tutorial

import sklearn

您的 Notebook應如下圖所示:

imgNotebook

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

第二步 - 導入Scikit-learn的數據集

我們將在本教程中使用的數據集是乳腺癌威斯康星診斷數據庫。該數據集包括關於乳腺癌腫瘤的各種信息,以及惡性良性的分類標簽。該數據集在569個腫瘤上具有569個實例或數據,並且包括關於30個屬性或特征的信息,例如腫瘤的半徑,紋理,平滑度和面積。

使用該數據集,我們將構建機器學習模型以使用腫瘤信息來預測腫瘤是惡性的還是良性的。

Scikit-learn安裝了各種數據集,我們可以將其加載到Python中,並包含我們想要的數據集。導入並加載數據集:

ML Tutorial

...

from sklearn.datasets import load_breast_cancer

# Load dataset
data = load_breast_cancer()

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

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

為每個重要信息集創建新變量並分配數據:

ML Tutorial

...

# Organize our data
label_names = data['target_names']
labels = data['target']
feature_names = data['feature_names']
features = data['data']

我們現在有了每組信息的列表。為了更好地理解我們的數據集,讓我們通過輸出我們的類標簽、第一個數據實例的標簽、我們的功能名稱以及第一個數據實例的功能值來查看我們的數據:

ML Tutorial

...

# Look at our data
print(label_names)
print(labels[0])
print(feature_names[0])
print(features[0])

如果運行代碼,您將看到以下結果:

img輸出結果

如圖所示,我們的類名是惡性良性,然后將其映射到二進制值0和1,其中0代表惡性腫瘤1代表良性腫瘤。因此,我們的第一個數據實例是惡性腫瘤,其平均半徑為1.79900000e+01。

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

第三步 - 將數據組織到集合中

要評估分類器的性能,您應該始終在看不見的數據上測試模型。因此,在構建模型之前,將數據拆分為兩部分:訓練集測試集

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

幸運的是,sklearn有一個名為train_test_split()的函數,它將您的數據划分為這些集合。導入該函數,然后使用它來拆分數據:

ML Tutorial

...

from sklearn.model_selection import train_test_split

# Split our data
train, test, train_labels, test_labels = train_test_split(features,
                                                          labels,
                                                          test_size=0.33,
                                                          random_state=42)

該函數使用test_size參數隨機分割數據。在這個例子中,我們現在有一個測試集(test)代表原始數據集的33%。然后剩下的數據(train)組成訓練數據。我們還有列車/測試變量的相應標簽,即train_labelstest_labels

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

第四步 - 構建和評估模型

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

首先,導入GaussianNB模塊。然后使用GaussianNB()函數初始化模型,然后通過使用gnb.fit()將模型擬合到數據來訓練模型:

ML Tutorial

...

from sklearn.naive_bayes import GaussianNB

# Initialize our classifier
gnb = GaussianNB()

# Train our classifier
model = gnb.fit(train, train_labels)

在我們訓練模型之后,我們可以使用訓練的模型對我們的測試集進行預測,這里,我們使用predict()函數。該predict()函數返回測試集中每個數據實例的預測數組。然后我們可以輸出我們的預測,以了解模型確定的內容。

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

ML Tutorial

...

# Make predictions
preds = gnb.predict(test)
print(preds)

運行代碼,您將看到以下結果:

img預測輸出結果

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

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

第五步 - 評估模型的准確性

使用真實類標簽數組,我們可以通過比較兩個數組(test_labelsvs.preds)來評估模型預測值的准確性。我們將使用sklearn函數accuracy_score()來確定機器學習分類器的准確性。

ML Tutorial

...

from sklearn.metrics import accuracy_score

# Evaluate accuracy
print(accuracy_score(test_labels, preds))

您將看到以下結果:

img准確性結果

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

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

ML教程

from sklearn.datasets import load_breast_cancer
from sklearn.model_selection import train_test_split
from sklearn.naive_bayes import GaussianNB
from sklearn.metrics import accuracy_score

# Load dataset
data = load_breast_cancer()

# Organize our data
label_names = data['target_names']
labels = data['target']
feature_names = data['feature_names']
features = data['data']

# Look at our data
print(label_names)
print('Class label = ', labels[0])
print(feature_names)
print(features[0])

# Split our data
train, test, train_labels, test_labels = train_test_split(features,
                                                          labels,
                                                          test_size=0.33,
                                                          random_state=42)

# Initialize our classifier
gnb = GaussianNB()

# Train our classifier
model = gnb.fit(train, train_labels)

# Make predictions
preds = gnb.predict(test)
print(preds)

# Evaluate accuracy
print(accuracy_score(test_labels, preds))

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

結論

在本教程中,您學習了如何在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),第一時間獲取更多海量技術實踐干貨哦~

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


免責聲明!

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



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