手把手教你監督學習(附python實戰代碼)

摘要: 想學監督學習?底子必定要打好!python

clipboard.png

爲何選擇人工智能和機器學習?

人類的將來是人工智能/機器學習。任何不瞭解的它們的人很快就會發現本身已經落後了。在這個充滿創新的世界中醒來感受科技愈來愈像魔術。有許多種方法和技術來執行人工智能和機器學習來解決實時問題,其中監督學習是最經常使用的方法之一。算法

什麼是監督學習?

在監督學習中,咱們從導入包含訓練屬性和目標屬性的數據集開始。監督式學習算法將學習訓練樣本與其相關目標變量之間的關係,並應用該學習關係對全新輸入(無目標)進行分類。機器學習

爲了說明監督學習是如何工做的,讓咱們從一個根據他學習的小時數來預測學生分數的例子。ide

在數學上,Y = f(X)+ C學習

其中,f將是標記學生爲考試準備的小時數之間的關係;測試

X是INPUT(他準備的小時數);阿里雲

Y是輸出(標記在考試中得分的學生);人工智能

C將是隨機錯誤。spa

監督學習算法的最終目標是以給定的新輸入X,輸出最大精度預測Y。算法工程師們已經發明瞭幾種方法來實現監督學習,咱們將探索一些最經常使用的方法。翻譯

基於給定的數據集,機器學習問題分爲兩類:分類和迴歸。若是給定的數據同時具備輸入(訓練)值和輸出(目標)值,那麼這是一個分類問題。若是數據集具備不帶任何目標標籤的屬性的連續數值,則它屬於迴歸問題。例如:

分類:有輸出標籤,它是貓仍是狗?

迴歸:房子賣多少錢?

分類

舉一個一位但願分析乳腺癌數據的醫學研究人員的例子,以預測患者應接受三種特定治療中的哪種。該數據分析任務被稱爲分類,其中構建模型或分類器以預測類別標籤,諸如「處理A」,「處理B」或「處理C」。

分類是預測問題,包括分類預測和分類無序的類別標籤。這是一個兩步過程,由學習步驟和分類步驟組成。

分類的最佳方法

一些最經常使用的分類算法

1.K-最近鄰;

2.決策樹;

3.樸素貝葉斯;

4.支持向量機;

在學習步驟中,分類模型經過分析訓練集來創建分類器。在分類步驟中是預測給定數據的類別標籤。分析中的數據集元組及其關聯的類標籤被分紅一個訓練集和測試集。構成訓練集的各個元組從隨機抽樣的數據集中進行分析。剩餘的元組造成測試集而且獨立於訓練元組,這意味着它們不會用於構建分類器。

測試集用於估計分類器的預測準確度。分類器的準確性是分類器正確分類的測試元組的百分比。爲了得到更高的精度,最好的方法是測試不一樣的算法,並在每一個算法中嘗試不一樣的參數。最好的一個能夠經過交叉驗證來選擇。

要針對某個問題選擇一個好的算法,對於不一樣的算法必須考慮準確性、訓練時間、線性、參數數量和特殊狀況等參數。

教程:基於IRIS數據集的Scikit-Learn中實現KNN,根據給定的輸入對花的類型進行分類。

第一步,爲了應用咱們的機器學習算法,咱們須要瞭解和探索給定的數據集。在這個例子中,咱們使用從scikit-learn軟件包導入的IRIS數據集。

如今讓咱們深刻代碼並探索IRIS數據集。

確保你的機器上安裝了Python。另外,使用PIP安裝如下軟件包:

pip install pandas
pip install matplotlib
pip install scikit-learn

在這段代碼中,咱們使用Pandas中的幾種方法瞭解了IRIS數據集的屬性。

from sklearn import datasets
import pandas as pd
import matplotlib.pyplot as plt
# Loading IRIS dataset from scikit-learn object into iris variable.
iris = datasets.load_iris()
# Prints the type/type object of iris
print(type(iris))
# <class 'sklearn.datasets.base.Bunch'>
# prints the dictionary keys of iris data
print(iris.keys())
# prints the type/type object of given attributes
print(type(iris.data), type(iris.target))
# prints the no of rows and columns in the dataset
print(iris.data.shape)
# prints the target set of the data
print(iris.target_names)
# Load iris training dataset
X = iris.data
# Load iris target set
Y = iris.target
# Convert datasets' type into dataframe
df = 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.2 1 4.9 3.0 1.4 0.2 2 4.7 3.2 1.3 0.2 3 4.6 3.1 1.5 0.2 4 5.0 3.6 1.4 0.2

Scikit-learn中的K-最近鄰居
若是一個算法僅僅存儲了訓練集的元組而且等待給出測試元組,那麼就被認爲是一個懶惰學習者。只有當它看到測試元組時纔會執行泛化,以便根據元組與存儲的訓練元組的類似性對元組進行分類。

K-最近鄰分類器就是一個懶惰的學習者。

KNN基於類比學習,即將給定的測試元組與相似的訓練元組進行比較。訓練元組由n個屬性描述,每一個元組表明一個n維空間中的一個點。這樣,全部訓練元組都存儲在n維模式空間中。當給定未知元組時,k-最近鄰分類器在模式空間中搜索最接近未知元組的k個訓練元組。這k個訓練元組是k未知元組的k個「最近鄰居」。

在下面這個代碼段中,咱們從sklearn提供進口KNN分類器,並將其應用於咱們的輸入數據,而後對花進行分類。

from sklearn import datasets
from sklearn.neighbors import KNeighborsClassifier

# Load iris dataset from sklearn
iris = 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 values
knn.fit(iris['data'], iris['target'])

# Provide data whose class labels are to be predicted
X = [
    [5.9, 1.0, 5.1, 1.8],
    [3.4, 2.0, 1.1, 4.8],
]

# Prints the data provided
print(X)

# Store predicted class labels of X
prediction = knn.predict(X)

# Prints the predicted class labels of X
print(prediction)

輸出:

[1 1]

這裏 ,0對應Versicolor

1對應Virginic

2對應Setosa

基於給定的輸入,機器使用KNN預測兩種花是Versicolor。

KNN直觀的IRIS數據集分類

clipboard.png

迴歸
迴歸一般被稱爲肯定兩個或更多變量之間的關係。例如,考慮你必須根據給定的輸入數據X來預測一我的的收入。

這裏的目標變量意味着咱們關心預測的未知變量,連續意味着Y能夠承擔的值不存在間隙(不連續性)。

預測收入是一個典型的迴歸問題。你的輸入數據應該包含全部能夠預測收入的信息(稱爲特徵),例如他的工做時間、教育經歷、職位、他住的地方。

流行的迴歸模型

一些經常使用的迴歸模型是:

  • 線性迴歸
  • Logistic迴歸
  • 多項式迴歸

線性迴歸使用的是最佳擬合直線(也稱爲迴歸線)創建因變量(Y)與一個或多個自變量(X)之間的關係。

在數學上,h(xi)=βo+β1* xi + e,其中βo是截距,β1是線的斜率,e是偏差項。

從圖形上看,

clipboard.png

Logistic Regression是一種算法,用於響應變量是分類的地方。Logistic迴歸的想法是找出特徵與特定結果的機率之間的關係。

在數學上,p(X)=βo+β1* X,其中p(x)= p(y = 1 | x)

從圖形上看,

clipboard.png

多項式迴歸是一種迴歸分析的形式,其中自變量x和因變量y之間的關係被建模爲x中的n次多項式。

解決線性迴歸問題

咱們有咱們的數據集X和相應的目標值Y,咱們使用普通最小二乘來學習一個線性模型,咱們能夠用它來預測一個新的y,給出一個之前看不見的x,儘量小的偏差。

給定的數據被分紅一個訓練數據集和一個測試數據集。訓練集具備標籤(特徵加載),因此算法能夠從這些標記的例子中學習。測試集沒有任何標籤,也就是說,你還不知道試圖預測的價值。

咱們將考慮一個要素進行訓練,並應用線性迴歸方法擬合訓練數據,而後使用測試數據集預測輸出。

在scikit-learn中實現線性迴歸

from sklearn import datasets, linear_model
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()

輸出:

Input Values
[
[ 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 ]
]
Predicted Output Values
[ 
225.9732401   115.74763374  163.27610621  114.73638965   120.80385422  158.21988574  236.08568105  121.81509832   
99.56772822   123.83758651  204.73711411   96.53399594  
154.17490936  130.91629517   83.3878227   171.36605897 
137.99500384  137.99500384  189.56845268   84.3990668 
]

clipboard.png

(糖尿病_X_測試,糖尿病_y_pred)預測之間的圖將在線方程上連續。

結束筆記
用於監督機器學習的其餘Python軟件包。

Scikit-Learn,Tensorflow,Pytorch。

本文由@阿里云云棲社區組織翻譯。

文章原標題《supervised-learning-with-python》,

譯者:虎說八道,審校:袁虎。

原文連接

本文爲雲棲社區原創內容,未經容許不得轉載。

相關文章
相關標籤/搜索