
教你用Python實(shí)現(xiàn)簡(jiǎn)單監(jiān)督學(xué)習(xí)算法
監(jiān)督學(xué)習(xí)作為運(yùn)用最廣泛的機(jī)器學(xué)習(xí)方法,一直以來(lái)都是從數(shù)據(jù)挖掘信息的重要手段。即便是在無(wú)監(jiān)督學(xué)習(xí)興起的近日,監(jiān)督學(xué)習(xí)也依舊是入門(mén)機(jī)器學(xué)習(xí)的鑰匙。
這篇監(jiān)督學(xué)習(xí)教程適用于剛?cè)腴T(mén)機(jī)器學(xué)習(xí)的小白。
當(dāng)然了,如果你已經(jīng)熟練掌握監(jiān)督學(xué)習(xí),也不妨快速瀏覽這篇教程,檢驗(yàn)一下自己的理解程度~
什么是監(jiān)督學(xué)習(xí)?
在監(jiān)督學(xué)習(xí)中,我們首先導(dǎo)入包含有訓(xùn)練屬性和目標(biāo)屬性的數(shù)據(jù)集。監(jiān)督學(xué)習(xí)算法會(huì)從數(shù)據(jù)集中學(xué)習(xí)得出訓(xùn)練樣本和其目標(biāo)變量之間的關(guān)系,然后將學(xué)習(xí)到的關(guān)系對(duì)新樣本(未被標(biāo)記的樣本)進(jìn)行分類(lèi)。
為了闡明監(jiān)督學(xué)習(xí)的工作原理,我們用根據(jù)學(xué)生學(xué)習(xí)時(shí)間預(yù)測(cè)其考試成績(jī)的例子來(lái)說(shuō)明。
用數(shù)學(xué)表示,即Y = f(X)+ C,其中
f表示學(xué)生學(xué)習(xí)時(shí)間和考試成績(jī)之間的關(guān)系
X表示輸入(學(xué)習(xí)小時(shí)數(shù))
Y表示輸出(考試分?jǐn)?shù))
C表示隨機(jī)誤差
監(jiān)督學(xué)習(xí)算法的終極目標(biāo)是給出新的輸入X,使得預(yù)測(cè)結(jié)果Y的準(zhǔn)確率最大。有很多方法可以實(shí)現(xiàn)有監(jiān)督學(xué)習(xí),我們將探討幾種最常用的方法。
根據(jù)給定的數(shù)據(jù)集,機(jī)器學(xué)習(xí)可以分為兩大類(lèi):分類(lèi)(Classification)和回歸(Regression)。如果給定的數(shù)據(jù)集的輸出值是類(lèi)別,那么待解決是分類(lèi)問(wèn)題。如果給定的數(shù)據(jù)集的輸出值是連續(xù)的,那么該問(wèn)題是回歸問(wèn)題。
舉兩個(gè)例子
分類(lèi):判斷是貓還是狗。
回歸:房子的售價(jià)是多少?
分類(lèi)
考慮這樣一個(gè)例子,醫(yī)學(xué)研究員想要分析乳腺癌數(shù)據(jù),用于預(yù)測(cè)患者使用三種治療方案中的哪一種。該數(shù)據(jù)分析問(wèn)題就屬于分類(lèi)問(wèn)題,通過(guò)建立分類(lèi)模型來(lái)預(yù)測(cè)類(lèi)別標(biāo)簽,例如“治療方案A”、“治療方案B”或者“治療方案C”。
分類(lèi)是一個(gè)預(yù)測(cè)類(lèi)別標(biāo)簽的預(yù)測(cè)問(wèn)題,這些類(lèi)別標(biāo)簽都是離散和無(wú)序的。分類(lèi)包含兩個(gè)步驟:學(xué)習(xí)步驟和分類(lèi)步驟。
分類(lèi)方法和選擇最優(yōu)方法
一些常見(jiàn)的分類(lèi)算法:
K近鄰
在學(xué)習(xí)步驟中,分類(lèi)模型通過(guò)分析訓(xùn)練集數(shù)據(jù)建立一個(gè)分類(lèi)器。在分類(lèi)步驟中,分類(lèi)器對(duì)給定的數(shù)據(jù)進(jìn)行分類(lèi)。用于分析的數(shù)據(jù)集(包含數(shù)據(jù)和其對(duì)應(yīng)的標(biāo)簽)被劃分為訓(xùn)練集和測(cè)試集。訓(xùn)練集從分析用的數(shù)據(jù)集中隨機(jī)抽取。剩下的數(shù)據(jù)集構(gòu)成測(cè)試集。測(cè)試集和訓(xùn)練集相互獨(dú)立,即測(cè)試集中的數(shù)據(jù)不會(huì)被構(gòu)建于分類(lèi)器。
測(cè)試集用于評(píng)價(jià)分類(lèi)器的預(yù)測(cè)精度。分類(lèi)器的精度用測(cè)試集中預(yù)測(cè)正確的百分比表示。為了獲得更高的精度,最好的方法是測(cè)試多個(gè)不同的算法,同時(shí),對(duì)每個(gè)算法嘗試不同的參數(shù)??梢酝ㄟ^(guò)交互檢驗(yàn)選擇最好的算法和參數(shù)。
對(duì)于給定問(wèn)題,在選取算法時(shí),算法的精度、訓(xùn)練時(shí)間、線(xiàn)性、參數(shù)數(shù)目以及特殊情況都要考慮在內(nèi)。
在IRIS數(shù)據(jù)集上實(shí)現(xiàn)sklearn中的KNN,并對(duì)給定的輸入進(jìn)行花卉類(lèi)型分類(lèi)。
首先,要應(yīng)用機(jī)器學(xué)習(xí)算法,我們需要了解給定數(shù)據(jù)集的組成。在這個(gè)例子中,我們使用內(nèi)置在sklearn包中的IRIS數(shù)據(jù)集。現(xiàn)在讓我們使用代碼查看IRIS數(shù)據(jù)集。
請(qǐng)確保你的電腦上成功安裝了Python。然后,通過(guò)PIP安裝下面這些python庫(kù):
pip install pandaspip install matplotlibpip install scikit-learn
在下面這段代碼中,我們使用pandas中的一些方法查看IRIS數(shù)據(jù)集的一些屬性。
from sklearn import datasetsimport pandas as pdimport matplotlib.pyplot as plt# Loading IRIS dataset from scikit-learn object into iris variable.iris = datasets.load_iris()# Prints the type/type object of irisprint(type(iris))# <class'sklearn.datasets.base.Bunch'># prints the dictionary keys of iris dataprint(iris.keys())# prints the type/type object of given attributesprint(type(iris.data), type(iris.target))# prints the no of rows and columns in the datasetprint(iris.data.shape)# prints the target set of the dataprint(iris.target_names)# Load iris training datasetX = iris.data# Load iris target setY = iris.target# Convert datasets' type into dataframedf = pd.DataFrame(X, columns=iris.feature_names)# Print the first five tuples of dataframe.print(df.head())
輸出:
<class ‘sklearn.datasets.base.Bunch’>dict_keys([‘data’, ‘target’, ‘target_names’, ‘DESCR’, ‘feature_names’])]<class ‘numpy.ndarray’> <class ‘numpy.ndarray’>(150, 4)[‘setosa’ ‘versicolor’ ‘virginica’]sepal length(cm) sepal width(cm) petal length(cm) petal width(cm)0 5.1 3.5 1.4 0.21 4.9 3.0 1.4 0.22 4.7 3.2 1.3 0.23 4.6 3.1 1.5 0.24 5.0 3.6 1.4 0.2
Sklearn中的K最近鄰算法
如果一個(gè)算法僅存儲(chǔ)訓(xùn)練集數(shù)據(jù),并等待測(cè)試集數(shù)據(jù)的給出,那么這個(gè)算法便可認(rèn)為是一個(gè)“懶惰學(xué)習(xí)法”。直到給定測(cè)試集數(shù)據(jù),它才會(huì)根據(jù)它與存儲(chǔ)的訓(xùn)練集樣本的相似性來(lái)對(duì)新樣本進(jìn)行分類(lèi)。
K近鄰分類(lèi)器就是一個(gè)懶惰學(xué)習(xí)法。
K近鄰基于類(lèi)比學(xué)習(xí),比較一個(gè)測(cè)試樣本和與之相似訓(xùn)練集數(shù)據(jù)。訓(xùn)練集有n個(gè)屬性表征。每個(gè)樣本由n維空間中的一個(gè)點(diǎn)表示。這樣,訓(xùn)練集中的所有樣本都儲(chǔ)存在n維模式空間中。當(dāng)給定一個(gè)未知的樣本,K近鄰分類(lèi)器在模式空間中搜尋和未知樣本最接近的k個(gè)訓(xùn)練樣本。這k個(gè)訓(xùn)練樣本就是未知樣本的k個(gè)近鄰。
“接近度”用距離來(lái)度量,例如歐幾里得距離。較好的K值可以通過(guò)實(shí)驗(yàn)確定。
在下面這段代碼中,我們導(dǎo)入KNN分類(lèi)器,將之應(yīng)用到我們的輸入數(shù)據(jù)中,然后對(duì)花卉進(jìn)行分類(lèi)。
from sklearn import datasetsfrom sklearn.neighbors import KNeighborsClassifier# Load iris dataset from sklearniris = datasets.load_iris()# Declare an of the KNN classifier class with the value with neighbors.knn = KNeighborsClassifier(n_neighbors=6)# Fit the model with training data and target valuesknn.fit(iris['data'], iris['target'])# Provide data whose class labels are to be predictedX = [ [5.9, 1.0, 5.1, 1.8], [3.4, 2.0, 1.1, 4.8],]# Prints the data providedprint(X)# Store predicted class labels of Xprediction = knn.predict(X)# Prints the predicted class labels of Xprint(prediction)
輸出:
[11]
其中,0,1,2分別代表不同的花。在該例子中,對(duì)于給定的輸入,KNN分類(lèi)器將它們都預(yù)測(cè)成為1這個(gè)類(lèi)別的花。
KNN對(duì)IRIS數(shù)據(jù)集分類(lèi)的直觀可視化
回歸
回歸通常被定義為確定兩個(gè)或多個(gè)變量之間的相關(guān)關(guān)系。例如,你要通過(guò)給定的數(shù)據(jù)X預(yù)測(cè)一個(gè)人的收入。這里,目標(biāo)變量是指該變量是我們關(guān)心以及想要預(yù)測(cè)的未知變量,而連續(xù)是指Y的取值沒(méi)有間隔。
預(yù)測(cè)收入是一個(gè)經(jīng)典的回歸問(wèn)題。你的輸入應(yīng)當(dāng)包含所有與收入相關(guān)的個(gè)人信息(比如特征),這些信息可以預(yù)測(cè)收入,例如工作時(shí)長(zhǎng)、教育經(jīng)歷、職稱(chēng)以及他的曾住地等。
回歸模型
一些常見(jiàn)的回歸模型有
多項(xiàng)式回歸
線(xiàn)性回歸通過(guò)擬合一條直線(xiàn)(回歸線(xiàn))來(lái)建立因變量(Y)與一個(gè)或多個(gè)自變量(X)之間關(guān)系。
用數(shù)學(xué)公示表示,即h(xi) = βo + β1 * xi + e,其中
βo是截距
β1是斜率
e是誤差項(xiàng)
用圖表示,即
邏輯回歸是一種預(yù)測(cè)類(lèi)別的算法,用于找出特征和特定輸出概率之間關(guān)系。
當(dāng)然了,我們也可以把邏輯回歸歸類(lèi)為分類(lèi)算法,但就像我們剛才所說(shuō),邏輯回歸的輸出其實(shí)是目標(biāo)對(duì)象屬于某一類(lèi)別的概率。既然概率是連續(xù)的,我們依舊把邏輯回歸算作回歸算法。
用數(shù)學(xué)公式表示:p(X) = βo + β1 * X,其中p(x) = p(y = 1 | x)
圖形表示為
多項(xiàng)式回歸是一種將自變量x與因變量y的關(guān)系擬合為x的n階多項(xiàng)式的回歸算法。
解決線(xiàn)性回歸問(wèn)題
我們有數(shù)據(jù)集X,以及對(duì)應(yīng)的目標(biāo)值Y,我們使用普通最小二乘法通過(guò)最小化預(yù)測(cè)誤差來(lái)擬合線(xiàn)性模型
給定的數(shù)據(jù)集同樣劃分為訓(xùn)練集和測(cè)試集。訓(xùn)練集由已知標(biāo)簽的樣本組成,因此算法能夠通過(guò)這些已知標(biāo)簽的樣本來(lái)學(xué)習(xí)。測(cè)試集樣本不包含標(biāo)簽,你并不知道你試圖預(yù)測(cè)樣本的標(biāo)簽值。
我們將選擇一個(gè)需要訓(xùn)練的特征,應(yīng)用線(xiàn)性回歸方法擬合訓(xùn)練數(shù)據(jù),然后預(yù)測(cè)測(cè)試集的輸出。
用Sklearn實(shí)現(xiàn)線(xiàn)性回歸
from sklearn import datasets, linear_modelimport matplotlib.pyplot as pltimport numpy as np# Load the diabetes datasetdiabetes = datasets.load_diabetes()# Use only one feature for trainingdiabetes_X = diabetes.data[:, np.newaxis, 2]# Split the data into training/testing setsdiabetes_X_train = diabetes_X[:-20]diabetes_X_test = diabetes_X[-20:]# Split the targets into training/testing setsdiabetes_y_train = diabetes.target[:-20]diabetes_y_test = diabetes.target[-20:]# Create linear regression objectregr = linear_model.LinearRegression()# Train the model using the training setsregr.fit(diabetes_X_train, diabetes_y_train)# Input dataprint('Input Values')print(diabetes_X_test)# Make predictions using the testing setdiabetes_y_pred = regr.predict(diabetes_X_test)# Predicted Dataprint("Predicted Output Values")print(diabetes_y_pred)# Plot outputsplt.scatter(diabetes_X_test, diabetes_y_test, color='black')plt.plot(diabetes_X_test, diabetes_y_pred, color='red', linewidth=1)plt.show()
輸入
輸入值:
[ [ 0.07786339] [-0.03961813] [ 0.01103904] [-0.04069594] [-0.03422907] [ 0.00564998] [ 0.08864151] [-0.03315126] [-0.05686312] [-0.03099563] [ 0.05522933] [-0.06009656] [ 0.00133873] [-0.02345095] [-0.07410811] [ 0.01966154] [-0.01590626] [-0.01590626] [ 0.03906215] [-0.0730303 ] ]
預(yù)測(cè)的輸出值:
[ 225.9732401115.74763374163.27610621114.73638965 120.80385422158.21988574236.08568105121.8150983299.56772822123.83758651204.7371141196.53399594154.17490936130.9162951783.3878227171.36605897137.99500384137.99500384189.5684526884.3990668 ]
結(jié)語(yǔ)
提一下常用的監(jiān)督學(xué)習(xí)的python庫(kù)
Scikit-Learn
Tensorflow
Pytorch
數(shù)據(jù)分析咨詢(xún)請(qǐng)掃描二維碼
若不方便掃碼,搜微信號(hào):CDAshujufenxi
LSTM 模型輸入長(zhǎng)度選擇技巧:提升序列建模效能的關(guān)鍵? 在循環(huán)神經(jīng)網(wǎng)絡(luò)(RNN)家族中,長(zhǎng)短期記憶網(wǎng)絡(luò)(LSTM)憑借其解決長(zhǎng)序列 ...
2025-07-11CDA 數(shù)據(jù)分析師報(bào)考條件詳解與準(zhǔn)備指南? ? 在數(shù)據(jù)驅(qū)動(dòng)決策的時(shí)代浪潮下,CDA 數(shù)據(jù)分析師認(rèn)證愈發(fā)受到矚目,成為眾多有志投身數(shù) ...
2025-07-11數(shù)據(jù)透視表中兩列相乘合計(jì)的實(shí)用指南? 在數(shù)據(jù)分析的日常工作中,數(shù)據(jù)透視表憑借其強(qiáng)大的數(shù)據(jù)匯總和分析功能,成為了 Excel 用戶(hù) ...
2025-07-11尊敬的考生: 您好! 我們誠(chéng)摯通知您,CDA Level I和 Level II考試大綱將于 2025年7月25日 實(shí)施重大更新。 此次更新旨在確保認(rèn) ...
2025-07-10BI 大數(shù)據(jù)分析師:連接數(shù)據(jù)與業(yè)務(wù)的價(jià)值轉(zhuǎn)化者? ? 在大數(shù)據(jù)與商業(yè)智能(Business Intelligence,簡(jiǎn)稱(chēng) BI)深度融合的時(shí)代,BI ...
2025-07-10SQL 在預(yù)測(cè)分析中的應(yīng)用:從數(shù)據(jù)查詢(xún)到趨勢(shì)預(yù)判? ? 在數(shù)據(jù)驅(qū)動(dòng)決策的時(shí)代,預(yù)測(cè)分析作為挖掘數(shù)據(jù)潛在價(jià)值的核心手段,正被廣泛 ...
2025-07-10數(shù)據(jù)查詢(xún)結(jié)束后:分析師的收尾工作與價(jià)值深化? ? 在數(shù)據(jù)分析的全流程中,“query end”(查詢(xún)結(jié)束)并非工作的終點(diǎn),而是將數(shù) ...
2025-07-10CDA 數(shù)據(jù)分析師考試:從報(bào)考到取證的全攻略? 在數(shù)字經(jīng)濟(jì)蓬勃發(fā)展的今天,數(shù)據(jù)分析師已成為各行業(yè)爭(zhēng)搶的核心人才,而 CDA(Certi ...
2025-07-09【CDA干貨】單樣本趨勢(shì)性檢驗(yàn):捕捉數(shù)據(jù)背后的時(shí)間軌跡? 在數(shù)據(jù)分析的版圖中,單樣本趨勢(shì)性檢驗(yàn)如同一位耐心的偵探,專(zhuān)注于從單 ...
2025-07-09year_month數(shù)據(jù)類(lèi)型:時(shí)間維度的精準(zhǔn)切片? ? 在數(shù)據(jù)的世界里,時(shí)間是最不可或缺的維度之一,而year_month數(shù)據(jù)類(lèi)型就像一把精準(zhǔn) ...
2025-07-09CDA 備考干貨:Python 在數(shù)據(jù)分析中的核心應(yīng)用與實(shí)戰(zhàn)技巧? ? 在 CDA 數(shù)據(jù)分析師認(rèn)證考試中,Python 作為數(shù)據(jù)處理與分析的核心 ...
2025-07-08SPSS 中的 Mann-Kendall 檢驗(yàn):數(shù)據(jù)趨勢(shì)與突變分析的有力工具? ? ? 在數(shù)據(jù)分析的廣袤領(lǐng)域中,準(zhǔn)確捕捉數(shù)據(jù)的趨勢(shì)變化以及識(shí)別 ...
2025-07-08備戰(zhàn) CDA 數(shù)據(jù)分析師考試:需要多久?如何規(guī)劃? CDA(Certified Data Analyst)數(shù)據(jù)分析師認(rèn)證作為國(guó)內(nèi)權(quán)威的數(shù)據(jù)分析能力認(rèn)證 ...
2025-07-08LSTM 輸出不確定的成因、影響與應(yīng)對(duì)策略? 長(zhǎng)短期記憶網(wǎng)絡(luò)(LSTM)作為循環(huán)神經(jīng)網(wǎng)絡(luò)(RNN)的一種變體,憑借獨(dú)特的門(mén)控機(jī)制,在 ...
2025-07-07統(tǒng)計(jì)學(xué)方法在市場(chǎng)調(diào)研數(shù)據(jù)中的深度應(yīng)用? 市場(chǎng)調(diào)研是企業(yè)洞察市場(chǎng)動(dòng)態(tài)、了解消費(fèi)者需求的重要途徑,而統(tǒng)計(jì)學(xué)方法則是市場(chǎng)調(diào)研數(shù) ...
2025-07-07CDA數(shù)據(jù)分析師證書(shū)考試全攻略? 在數(shù)字化浪潮席卷全球的當(dāng)下,數(shù)據(jù)已成為企業(yè)決策、行業(yè)發(fā)展的核心驅(qū)動(dòng)力,數(shù)據(jù)分析師也因此成為 ...
2025-07-07剖析 CDA 數(shù)據(jù)分析師考試題型:解鎖高效備考與答題策略? CDA(Certified Data Analyst)數(shù)據(jù)分析師考試作為衡量數(shù)據(jù)專(zhuān)業(yè)能力的 ...
2025-07-04SQL Server 字符串截取轉(zhuǎn)日期:解鎖數(shù)據(jù)處理的關(guān)鍵技能? 在數(shù)據(jù)處理與分析工作中,數(shù)據(jù)格式的規(guī)范性是保證后續(xù)分析準(zhǔn)確性的基礎(chǔ) ...
2025-07-04CDA 數(shù)據(jù)分析師視角:從數(shù)據(jù)迷霧中探尋商業(yè)真相? 在數(shù)字化浪潮席卷全球的今天,數(shù)據(jù)已成為企業(yè)決策的核心驅(qū)動(dòng)力,CDA(Certifie ...
2025-07-04CDA 數(shù)據(jù)分析師:開(kāi)啟數(shù)據(jù)職業(yè)發(fā)展新征程? ? 在數(shù)據(jù)成為核心生產(chǎn)要素的今天,數(shù)據(jù)分析師的職業(yè)價(jià)值愈發(fā)凸顯。CDA(Certified D ...
2025-07-03