摘要:使用該數(shù)據(jù)集,我們將構(gòu)建機(jī)器學(xué)習(xí)模型以使用腫瘤信息來預(yù)測(cè)腫瘤是惡性的還是良性的。我們將使用函數(shù)來確定機(jī)器學(xué)習(xí)分類器的準(zhǔn)確性。您已成功構(gòu)建了第一臺(tái)機(jī)器學(xué)習(xí)分類器?,F(xiàn)在,您可以使用在中加載數(shù)據(jù)組織數(shù)據(jù)訓(xùn)練預(yù)測(cè)和評(píng)估機(jī)器學(xué)習(xí)分類器。
歡迎大家前往騰訊云+社區(qū),獲取更多騰訊海量技術(shù)實(shí)踐干貨哦~
本文由信姜緣 發(fā)表于云+社區(qū)專欄介紹
機(jī)器學(xué)習(xí)是計(jì)算機(jī)科學(xué)、人工智能和統(tǒng)計(jì)學(xué)的研究領(lǐng)域。機(jī)器學(xué)習(xí)的重點(diǎn)是訓(xùn)練算法以學(xué)習(xí)模式并根據(jù)數(shù)據(jù)進(jìn)行預(yù)測(cè)。機(jī)器學(xué)習(xí)特別有價(jià)值,因?yàn)樗屛覀兛梢允褂糜?jì)算機(jī)來自動(dòng)化決策過程。
在本教程中,您將使用Scikit-learn(Python的機(jī)器學(xué)習(xí)工具)在Python中實(shí)現(xiàn)一個(gè)簡(jiǎn)單的機(jī)器學(xué)習(xí)算法。您將使用Naive Bayes(NB)分類器,結(jié)合乳腺癌腫瘤信息數(shù)據(jù)庫(kù),預(yù)測(cè)腫瘤是惡性還是良性。
在本教程結(jié)束時(shí),您將了解如何使用Python構(gòu)建自己的機(jī)器學(xué)習(xí)模型。關(guān)于Python的語(yǔ)法詳見騰訊云開發(fā)者手冊(cè)Python中文開發(fā)文檔。
準(zhǔn)備要完成本教程,您需要:
Python 3 本地編程環(huán)境
在virtualenv中安裝Jupyter Notebook。Jupyter Notebooks在運(yùn)行機(jī)器學(xué)習(xí)實(shí)驗(yàn)時(shí)非常有用。您可以運(yùn)行短代碼塊并快速查看結(jié)果,從而輕松測(cè)試和調(diào)試代碼。
第一步 - 導(dǎo)入Scikit-learn讓我們首先安裝Python模塊Scikit-learn,這是Python 最好、文檔記錄最多的機(jī)器學(xué)習(xí)庫(kù)之一。
要開始我們的編碼項(xiàng)目,先要激活我們的Python 3編程環(huán)境。確保您位于環(huán)境所在的目錄中,然后運(yùn)行以下命令:
$ . my_env/bin/activate
激活我們的編程環(huán)境后,檢查是否已安裝Sckikit-learn模塊:
(my_env) $ python -c "import sklearn"
如果sklearn已安裝,則此命令將完成且沒有錯(cuò)誤。如果未安裝,您將看到以下錯(cuò)誤消息:
Traceback (most recent call last): File "", line 1, in ImportError: No module named "sklearn"
錯(cuò)誤消息表明sklearn未安裝,因此請(qǐng)使用pip下載庫(kù):
(my_env) $ pip install scikit-learn[alldeps]
安裝完成后,啟動(dòng)Jupyter Notebook:
(my_env) $ jupyter notebook
在Jupyter中,創(chuàng)建一個(gè)名為ML Tutorial的新Python Notebook。在Notebook的第一個(gè)單元格,輸入sklearn模塊:
ML Tutorial
import sklearn
您的 Notebook應(yīng)如下圖所示:
Notebook
現(xiàn)在我們已經(jīng)在 Notebook中導(dǎo)入了sklearn,我們可以開始使用機(jī)器學(xué)習(xí)模型的數(shù)據(jù)集。
第二步 - 導(dǎo)入Scikit-learn的數(shù)據(jù)集我們將在本教程中使用的數(shù)據(jù)集是乳腺癌威斯康星診斷數(shù)據(jù)庫(kù)。該數(shù)據(jù)集包括關(guān)于乳腺癌腫瘤的各種信息,以及惡性或良性的分類標(biāo)簽。該數(shù)據(jù)集在569個(gè)腫瘤上具有569個(gè)實(shí)例或數(shù)據(jù),并且包括關(guān)于30個(gè)屬性或特征的信息,例如腫瘤的半徑,紋理,平滑度和面積。
使用該數(shù)據(jù)集,我們將構(gòu)建機(jī)器學(xué)習(xí)模型以使用腫瘤信息來預(yù)測(cè)腫瘤是惡性的還是良性的。
Scikit-learn安裝了各種數(shù)據(jù)集,我們可以將其加載到Python中,并包含我們想要的數(shù)據(jù)集。導(dǎo)入并加載數(shù)據(jù)集:
ML Tutorial
... from sklearn.datasets import load_breast_cancer # Load dataset data = load_breast_cancer()
該data變量表示一個(gè)像字典一樣工作的Python對(duì)象。字典的關(guān)鍵是分類標(biāo)簽名稱(target_names),實(shí)際標(biāo)簽(target),屬性/特征名稱(feature_names)和屬性(data)。
屬性是任何分類器的關(guān)鍵部分。屬性捕獲有關(guān)數(shù)據(jù)性質(zhì)的重要特征。鑒于我們?cè)噲D預(yù)測(cè)的標(biāo)簽是惡性腫瘤與良性腫瘤,可能的有用屬性有腫瘤的大小,半徑和質(zhì)地。
為每個(gè)重要信息集創(chuàng)建新變量并分配數(shù)據(jù):
ML Tutorial
... # Organize our data label_names = data["target_names"] labels = data["target"] feature_names = data["feature_names"] features = data["data"]
我們現(xiàn)在有了每組信息的列表。為了更好地理解我們的數(shù)據(jù)集,讓我們通過輸出我們的類標(biāo)簽、第一個(gè)數(shù)據(jù)實(shí)例的標(biāo)簽、我們的功能名稱以及第一個(gè)數(shù)據(jù)實(shí)例的功能值來查看我們的數(shù)據(jù):
ML Tutorial
... # Look at our data print(label_names) print(labels[0]) print(feature_names[0]) print(features[0])
如果運(yùn)行代碼,您將看到以下結(jié)果:
輸出結(jié)果
如圖所示,我們的類名是惡性和良性,然后將其映射到二進(jìn)制值0和1,其中0代表惡性腫瘤1代表良性腫瘤。因此,我們的第一個(gè)數(shù)據(jù)實(shí)例是惡性腫瘤,其平均半徑為1.79900000e+01。
現(xiàn)在我們已經(jīng)加載了數(shù)據(jù),我們可以使用我們的數(shù)據(jù)來構(gòu)建我們的機(jī)器學(xué)習(xí)分類器。
第三步 - 將數(shù)據(jù)組織到集合中要評(píng)估分類器的性能,您應(yīng)該始終在看不見的數(shù)據(jù)上測(cè)試模型。因此,在構(gòu)建模型之前,將數(shù)據(jù)拆分為兩部分:訓(xùn)練集和測(cè)試集。
您可以使用訓(xùn)練集在開發(fā)階段訓(xùn)練和評(píng)估模型。然后,您使用訓(xùn)練的模型對(duì)看不見的測(cè)試集進(jìn)行預(yù)測(cè)。這種方法讓您了解模型的性能和穩(wěn)健性。
幸運(yùn)的是,sklearn有一個(gè)名為train_test_split()的函數(shù),它將您的數(shù)據(jù)劃分為這些集合。導(dǎo)入該函數(shù),然后使用它來拆分?jǐn)?shù)據(jù):
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)
該函數(shù)使用test_size參數(shù)隨機(jī)分割數(shù)據(jù)。在這個(gè)例子中,我們現(xiàn)在有一個(gè)測(cè)試集(test)代表原始數(shù)據(jù)集的33%。然后剩下的數(shù)據(jù)(train)組成訓(xùn)練數(shù)據(jù)。我們還有列車/測(cè)試變量的相應(yīng)標(biāo)簽,即train_labels和test_labels。
我們現(xiàn)在可以繼續(xù)培訓(xùn)我們的第一個(gè)模型。
第四步 - 構(gòu)建和評(píng)估模型機(jī)器學(xué)習(xí)有很多模型,每種模型都有自己的優(yōu)點(diǎn)和缺點(diǎn)。在本教程中,我們將重點(diǎn)介紹一種通常在二進(jìn)制分類任務(wù)中表現(xiàn)良好的簡(jiǎn)單算法,即Naive Bayes (NB)。
首先,導(dǎo)入GaussianNB模塊。然后使用GaussianNB()函數(shù)初始化模型,然后通過使用gnb.fit()將模型擬合到數(shù)據(jù)來訓(xùn)練模型:
ML Tutorial
... from sklearn.naive_bayes import GaussianNB # Initialize our classifier gnb = GaussianNB() # Train our classifier model = gnb.fit(train, train_labels)
在我們訓(xùn)練模型之后,我們可以使用訓(xùn)練的模型對(duì)我們的測(cè)試集進(jìn)行預(yù)測(cè),這里,我們使用predict()函數(shù)。該predict()函數(shù)返回測(cè)試集中每個(gè)數(shù)據(jù)實(shí)例的預(yù)測(cè)數(shù)組。然后我們可以輸出我們的預(yù)測(cè),以了解模型確定的內(nèi)容。
使用帶有test的predict()函數(shù)輸出結(jié)果:
ML Tutorial
... # Make predictions preds = gnb.predict(test) print(preds)
運(yùn)行代碼,您將看到以下結(jié)果:
預(yù)測(cè)輸出結(jié)果
正如您在Jupyter Notebook輸出中看到的,該predict()函數(shù)返回了一個(gè)0s和1s 數(shù)組,它們代表了我們對(duì)腫瘤類的預(yù)測(cè)值(惡性與良性)。
現(xiàn)在我們有了預(yù)測(cè),讓我們?cè)u(píng)估分類器的表現(xiàn)。
第五步 - 評(píng)估模型的準(zhǔn)確性使用真實(shí)類標(biāo)簽數(shù)組,我們可以通過比較兩個(gè)數(shù)組(test_labelsvs.preds)來評(píng)估模型預(yù)測(cè)值的準(zhǔn)確性。我們將使用sklearn函數(shù)accuracy_score()來確定機(jī)器學(xué)習(xí)分類器的準(zhǔn)確性。
ML Tutorial
... from sklearn.metrics import accuracy_score # Evaluate accuracy print(accuracy_score(test_labels, preds))
您將看到以下結(jié)果:
準(zhǔn)確性結(jié)果
正如您在輸出中看到的那樣,NB分類器準(zhǔn)確率為94.15%。這意味著分類器有94.15%的時(shí)間能夠正確預(yù)測(cè)腫瘤是惡性還是良性。這些結(jié)果表明我們的30個(gè)屬性的特征集是腫瘤類別的良好指標(biāo)。
您已成功構(gòu)建了第一臺(tái)機(jī)器學(xué)習(xí)分類器。讓我們通過將所有import語(yǔ)句放在Notebook或腳本的頂部來重新組織代碼。代碼的最終版本應(yīng)如下所示:
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))
現(xiàn)在,您可以繼續(xù)使用代碼來查看是否可以使分類器的性能更佳。您可以嘗試不同的功能子集,甚至嘗試完全不同的算法。
結(jié)論在本教程中,您學(xué)習(xí)了如何在Python中構(gòu)建機(jī)器學(xué)習(xí)分類器?,F(xiàn)在,您可以使用Scikit-learn在Python中加載數(shù)據(jù)、組織數(shù)據(jù)、訓(xùn)練、預(yù)測(cè)和評(píng)估機(jī)器學(xué)習(xí)分類器。本教程中的步驟可以幫助您簡(jiǎn)化在Python中使用自己的數(shù)據(jù)的過程,更多機(jī)器學(xué)習(xí)和人工智能的相關(guān)教程可以訪問騰訊云社區(qū)。
參考文獻(xiàn):《How To Build a Machine Learning Classifier in Python with Scikit-learn》
問答機(jī)器學(xué)習(xí)入門需要哪些數(shù)學(xué)基礎(chǔ)?
相關(guān)閱讀安全報(bào)告 | 2018上半年互聯(lián)網(wǎng)惡意爬蟲分析:從全景視角看爬蟲與反爬蟲
安全報(bào)告 | SSH 暴力破解趨勢(shì):從云平臺(tái)向物聯(lián)網(wǎng)設(shè)備遷移
給你的CVM安裝一個(gè)面板吧!
此文已由作者授權(quán)騰訊云+社區(qū)發(fā)布,原文鏈接:https://cloud.tencent.com/dev...
歡迎大家前往騰訊云+社區(qū)或關(guān)注云加社區(qū)微信公眾號(hào)(QcloudCommunity),第一時(shí)間獲取更多海量技術(shù)實(shí)踐干貨哦~
海量技術(shù)實(shí)踐經(jīng)驗(yàn),盡在云加社區(qū)!
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/42103.html
摘要:貢獻(xiàn)者飛龍版本最近總是有人問我,把這些資料看完一遍要用多長(zhǎng)時(shí)間,如果你一本書一本書看的話,的確要用很長(zhǎng)時(shí)間。為了方便大家,我就把每本書的章節(jié)拆開,再按照知識(shí)點(diǎn)合并,手動(dòng)整理了這個(gè)知識(shí)樹。 Special Sponsors showImg(https://segmentfault.com/img/remote/1460000018907426?w=1760&h=200); 貢獻(xiàn)者:飛龍版...
摘要:翻譯自昨天收到推送了一篇介紹隨機(jī)森林算法的郵件,感覺作為介紹和入門不錯(cuò),就順手把它翻譯一下。隨機(jī)森林引入的隨機(jī)森林算法將自動(dòng)創(chuàng)建隨機(jī)決策樹群?;貧w隨機(jī)森林也可以用于回歸問題。結(jié)語(yǔ)隨機(jī)森林相當(dāng)起來非常容易。 翻譯自:http://blog.yhat.com/posts/python-random-forest.html 昨天收到y(tǒng)hat推送了一篇介紹隨機(jī)森林算法的郵件,感覺作為介紹和入門...
閱讀 2664·2019-08-30 15:53
閱讀 2880·2019-08-29 16:20
閱讀 1087·2019-08-29 15:10
閱讀 1028·2019-08-26 10:58
閱讀 2198·2019-08-26 10:49
閱讀 640·2019-08-26 10:21
閱讀 708·2019-08-23 18:30
閱讀 1640·2019-08-23 15:58