天天看點

小白學資料:教你用Python實作簡單監督學習算法

監督學習作為運用最廣泛的機器學習方法,一直以來都是從資料挖掘資訊的重要手段。即便是在無監督學習興起的近日,監督學習也依舊是入門機器學習的鑰匙。

這篇監督學習教程适用于剛入門機器學習的小白。

當然了,如果你已經熟練掌握監督學習,也不妨快速浏覽這篇教程,檢驗一下自己的了解程度~

什麼是監督學習?

在監督學習中,我們首先導入包含有訓練屬性和目标屬性的資料集。監督學習算法會從資料集中學習得出訓練樣本和其目标變量之間的關系,然後将學習到的關系對新樣本(未被标記的樣本)進行分類。

為了闡明監督學習的工作原理,我們用根據學生學習時間預測其考試成績的例子來說明。

用數學表示,即Y = f(X)+ C,其中

f表示學生學習時間和考試成績之間的關系

X表示輸入(學習小時數)

Y表示輸出(考試分數)

C表示随機誤差

監督學習算法的終極目标是給出新的輸入X,使得預測結果Y的準确率最大。有很多方法可以實作有監督學習,我們将探讨幾種最常用的方法。

根據給定的資料集,機器學習可以分為兩大類:分類(Classification)和回歸(Regression)。如果給定的資料集的輸出值是類别,那麼待解決是分類問題。如果給定的資料集的輸出值是連續的,那麼該問題是回歸問題。

舉兩個例子

分類:判斷是貓還是狗。

回歸:房子的售價是多少?

分類

考慮這樣一個例子,醫學研究員想要分析乳腺癌資料,用于預測患者使用三種治療方案中的哪一種。該資料分析問題就屬于分類問題,通過建立分類模型來預測類别标簽,例如“治療方案A”、“治療方案B”或者“治療方案C”。

分類是一個預測類别标簽的預測問題,這些類别标簽都是離散和無序的。分類包含兩個步驟:學習步驟和分類步驟。

分類方法和選擇最優方法

一些常見的分類算法:

K近鄰

決策樹

樸素貝葉斯

支援向量機

在學習步驟中,分類模型通過分析訓練集資料建立一個分類器。在分類步驟中,分類器對給定的資料進行分類。用于分析的資料集(包含資料和其對應的标簽)被劃分為訓練集和測試集。訓練集從分析用的資料集中随機抽取。剩下的資料集構成測試集。測試集和訓練集互相獨立,即測試集中的資料不會被建構于分類器。

測試集用于評價分類器的預測精度。分類器的精度用測試集中預測正确的百分比表示。為了獲得更高的精度,最好的方法是測試多個不同的算法,同時,對每個算法嘗試不同的參數。可以通過互動檢驗選擇最好的算法和參數。

對于給定問題,在選取算法時,算法的精度、訓練時間、線性、參數數目以及特殊情況都要考慮在内。

在IRIS資料集上實作sklearn中的KNN,并對給定的輸入進行花卉類型分類。

首先,要應用機器學習算法,我們需要了解給定資料集的組成。在這個例子中,我們使用内置在sklearn包中的IRIS資料集。現在讓我們使用代碼檢視IRIS資料集。

請確定你的電腦上成功安裝了Python。然後,通過PIP安裝下面這些python庫:

在下面這段代碼中,我們使用pandas中的一些方法檢視IRIS資料集的一些屬性。

輸出:

Sklearn中的K最近鄰算法

如果一個算法僅存儲訓練集資料,并等待測試集資料的給出,那麼這個算法便可認為是一個“懶惰學習法”。直到給定測試集資料,它才會根據它與存儲的訓練集樣本的相似性來對新樣本進行分類。

K近鄰分類器就是一個懶惰學習法。

K近鄰基于類比學習,比較一個測試樣本和與之相似訓練集資料。訓練集有n個屬性表征。每個樣本由n維空間中的一個點表示。這樣,訓練集中的所有樣本都儲存在n維模式空間中。當給定一個未知的樣本,K近鄰分類器在模式空間中搜尋和未知樣本最接近的k個訓練樣本。這k個訓練樣本就是未知樣本的k個近鄰。

“接近度”用距離來度量,例如歐幾裡得距離。較好的K值可以通過實驗确定。

在下面這段代碼中,我們導入KNN分類器,将之應用到我們的輸入資料中,然後對花卉進行分類。

其中,0,1,2分别代表不同的花。在該例子中,對于給定的輸入,KNN分類器将它們都預測成為1這個類别的花。

KNN對IRIS資料集分類的直覺可視化

小白學資料:教你用Python實作簡單監督學習算法

回歸

回歸通常被定義為确定兩個或多個變量之間的相關關系。例如,你要通過給定的資料X預測一個人的收入。這裡,目标變量是指該變量是我們關心以及想要預測的未知變量,而連續是指Y的取值沒有間隔。

預測收入是一個經典的回歸問題。你的輸入應當包含所有與收入相關的個人資訊(比如特征),這些資訊可以預測收入,例如工作時長、教育經曆、職稱以及他的曾住地等。

回歸模型

一些常見的回歸模型有

線性回歸

邏輯回歸

多項式回歸

線性回歸通過拟合一條直線(回歸線)來建立因變量(Y)與一個或多個自變量(X)之間關系。

用數學公示表示,即h(xi) = βo + β1 * xi + e,其中

βo是截距

β1是斜率

e是誤差項

用圖表示,即

小白學資料:教你用Python實作簡單監督學習算法

邏輯回歸是一種預測類别的算法,用于找出特征和特定輸出機率之間關系。

當然了,我們也可以把邏輯回歸歸類為分類算法,但就像我們剛才所說,邏輯回歸的輸出其實是目标對象屬于某一類别的機率。既然機率是連續的,我們依舊把邏輯回歸算作回歸算法。

用數學公式表示:p(X) = βo + β1 * X,其中p(x) = p(y = 1 | x)

圖形表示為

小白學資料:教你用Python實作簡單監督學習算法

多項式回歸是一種将自變量x與因變量y的關系拟合為x的n階多項式的回歸算法。

解決線性回歸問題

我們有資料集X,以及對應的目标值Y,我們使用普通最小二乘法通過最小化預測誤差來拟合線性模型

給定的資料集同樣劃分為訓練集和測試集。訓練集由已知标簽的樣本組成,是以算法能夠通過這些已知标簽的樣本來學習。測試集樣本不包含标簽,你并不知道你試圖預測樣本的标簽值。

我們将選擇一個需要訓練的特征,應用線性回歸方法拟合訓練資料,然後預測測試集的輸出。

用Sklearn實作線性回歸

<code>import matplotlib.pyplot as plt import numpy as np # Load the diabetes dataset diabetes = datasets.load_diabetes() # Use only one feature for training diabetes_X = diabetes.data[:, np.newaxis, 2] # Split the data into training/testing sets diabetes_X_train = diabetes_X[:-20] diabetes_X_test = diabetes_X[-20:] # Split the targets into training/testing sets diabetes_y_train = diabetes.target[:-20] diabetes_y_test = diabetes.target[-20:] # Create linear regression object regr = linear_model.LinearRegression() # Train the model using the training sets regr.fit(diabetes_X_train, diabetes_y_train) # Input data print('Input Values') print(diabetes_X_test) # Make predictions using the testing set diabetes_y_pred = regr.predict(diabetes_X_test) # Predicted Data print("Predicted Output Values") print(diabetes_y_pred) # Plot outputs plt.scatter(diabetes_X_test, diabetes_y_test, color='black') plt.plot(diabetes_X_test, diabetes_y_pred, color='red', linewidth=1) plt.show()</code>

輸入

輸入值:

預測的輸出值:

<b></b>

小白學資料:教你用Python實作簡單監督學習算法

結語

提一下常用的監督學習的python庫

Scikit-Learn

Tensorflow

Pytorch

原文釋出時間為:2018-02-18

本文作者:文摘菌