什麼是監督學習?

在監督學習中,我們首先要導入包含訓練特徵和目標特徵的數據集。監督式學習演算法會學習訓練樣本與其相關的目標變數之間的關係,並應用學到的關係對全新輸入(無目標特徵)進行分類。

為了說明如何監督學習的原理,讓我們看一個根據學生學習的時間來預測學生的成績的例子。

公式:

Y = f(X)+ C

在這裡:

F表示學生為考試準備的小時數和分數之間的關係

X是輸入(他睡覺的小時數)Y是輸出(標記在考試中學生的得分)C是隨機誤差

監督學習演算法的最終目標是以最大精度來預測給定新輸入X所對應的Y.有很多種方法可以實現監督學習; 我們在這裡討論一些最常用的方法。

根據給定的數據集,機器學習問題分為兩類:分類回歸。如果給定數據同時具有輸入(訓練)值和輸出(目標)值,那麼這是一個分類問題。如果數據集具有連續的沒有任何目標標記的特徵數值,那麼它屬於回歸問題。

分類:輸出標籤:這個是貓還是狗?
回歸:這個房子賣多少錢?

分類

以想要分析乳腺癌的數據的醫學研究人員為例。目標是預測患者應接受三種治療方法中的哪一種。這種數據分析任務被稱為分類,在這個分類中,模型或分類器被構造來預測類標籤,例如「治療a」、「治療B」或「治療c」。

分類是預測問題,預測離散和無序的分類的類標籤。這一過程,由學習步驟和分類步驟兩部分組成。

分類中方法

最常用的分類演算法:

  1. KNN演算法(k-Nearest Neighbo)
  2. 決策樹
  3. 樸素貝葉斯
  4. 支持向量機

在學習步驟中,分類模型通過分析訓練集來建立分類器。在分類步驟中預測給定數據的類標籤。在分析中,數據集元組及其關聯的類標籤分為訓練集和測試集。構成訓練集的各個元組從隨機抽樣的數據集中進行分析。剩下的元組形成測試集,並且獨立於訓練元組,也就是說它們不會用來構建分類器。

測試集用於估計分類器預測的準確性。分類器的準確性是指由分類器正確分類的測試元組的百分比。為了達到更好的準確性,最好測試不同的演算法,並在每個演算法中嘗試不同的參數。最好通過交叉驗證進行選擇。

想要為某個問題選擇合適的演算法,對於不同的演算法,精度、訓練時間、線性度、參數個數和特殊情況等參數都需要考慮。

在IRIS數據集上使用Scikit-Learn實現KNN,根據給定的輸入對花進行分類。

第一步,為了應用我們的機器學習演算法,我們需要了解和探索給定的數據集。在這個例子中,我們使用從scikit-learn包導入的IRIS數據集(鳶尾花數據集)。現在讓我們來編碼並探索IRIS數據集。

確保你的機器上已經安裝了Python。然後使用PIP安裝以下軟體包:

1pip install pandas

2pip install matplotlib

3pip install scikit-learn

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

01from sklearnimport datasets

02import pandas as pd

03import matplotlib.pyplot as plt

04

05# Loading IRIS dataset from scikit-learn object into iris variable.

06iris= datasets.load_iris()

07

08# Prints the type/type object of iris

09print(type(iris))

10# <class sklearn.datasets.base.Bunch>

11

12# prints the dictionary keys of iris data

13print(iris.keys())

14

15# prints the type/type object of given attributes

16print(type(iris.data),type(iris.target))

17

18# prints the no of rows and columns in the dataset

19print(iris.data.shape)

20

21# prints the target set of the data

22print(iris.target_names)

23

24# Load iris training dataset

25X= iris.data

26

27# Load iris target set

28Y= iris.target

29

30# Convert datasets type into dataframe

31df= pd.DataFrame(X, columns=iris.feature_names)

32

33# Print the first five tuples of dataframe.

34print(df.head())

輸出:

01<class 『sklearn.datasets.base.Bunch』>

02dict_keys([『data』, 『target』, 『target_names』, 『DESCR』, 『feature_names』])]

03<class 『numpy.ndarray』> <class 『numpy.ndarray』>

04(150,4)

05[『setosa』 『versicolor』 『virginica』]

06sepal length (cm) sepal width (cm) petal length (cm) petal width (cm)

070 5.1 3.5 1.4 0.2

081 4.9 3.0 1.4 0.2

092 4.7 3.2 1.3 0.2

103 4.6 3.1 1.5 0.2

114 5.0 3.6 1.4 0.2

Scikit-learn中的KNN

如果一個演算法只是簡單地存儲訓練集的元組並等待給出測試元組,那麼他就是一個惰性學習法。只有當它看到測試元組時才會執行泛化,基於它與訓練元組的相似度對元組進行分類。

KNN是一個惰性學習法。

KNN基於類比學習,比較出給定的測試元組與訓練元組的相似度。訓練元組由n個特徵描述。每個元組代表一個n維空間中的一個點。這樣,所有的訓練元組都存儲在n維模式空間中。當給定未知元組時,KNN分類器在模式空間中搜索最接近未知元組的k個訓練元組。這k個訓練元組是未知元組的k個「最近鄰(nearest neighbor)」。

貼近度(Closeness)由關於距離的度量定義(例如歐幾里得度量)。一個好的K值要通過實驗確定。

在這段代碼中,我們從sklearn中導入KNN分類器,並將其應用到我們的輸入數據,對花進行分類。

01from sklearnimport datasets

02from sklearn.neighborsimport KNeighborsClassifier

03

04# Load iris dataset from sklearn

05iris= datasets.load_iris()

06

07# Declare an of the KNN classifier class with the value with neighbors.

08knn= KNeighborsClassifier(n_neighbors=6)

09

10# Fit the model with training data and target values

11knn.fit(iris[data], iris[target])

12

13# Provide data whose class labels are to be predicted

14X= [

15 [5.9,1.0,5.1,1.8],

16 [3.4,2.0,1.1,4.8],

17]

18

19# Prints the data provided

20print(X)

21

22# Store predicted class labels of X

23prediction= knn.predict(X)

24

25# Prints the predicted class labels of X

26print(prediction)

輸出:

1[1 1]

在這裡:

0對應的Versicolor

1對應的Virginica2對應Setosa

(註:都是鳶尾花的種類)

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

IRIS數據集分類直觀圖:

回歸

回歸通常被用於確定兩個或多個變數之間的關係。例如,根據給定的輸入數據X,你必須預測一個人的收入。

在回歸里,目標變數是指我們想要預測的未知變數,連續意味著Y可以承擔的值沒有缺口(或者說間斷點)。

預測收入是一個典型的回歸問題。你的輸入數據包含所有可以預測收入的信息(即特徵)。比如他的工作時間,教育經歷,職位和居住地。

回歸模型

一些常用的回歸模型是:

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

線性回歸使用最佳擬合直線(也稱回歸線)建立因變數(Y)和一個或多個自變數(X)之間的關係。

用公式表示:

h(xi)=βo+β1* xi + e

其中βo是截距,β1是線的斜率,e是誤差項。

線性回歸

Logistic回歸是一種演算法,可以在響應變數是分類(categorical)時使用。Logistic回歸的思想是找出特徵和特定結果的概率之間的關係。

用公式表示為:

p(X)=βo+β1* X

p(x)= p(y = 1 | x)

Logistic回歸

多項式回歸是一種回歸分析方法,其中自變數x和因變數y之間的關係被建模為x中的一個n次多項式。

解決線性回歸問題:

我們有數據集X和相應的目標值Y,我們使用最小二乘法來學習一個線性模型,我們可以使用這個線性模型來預測一個新的y,給出一個未知的x,它的誤差越小越好。

將給定的數據被分成訓練數據集和測試數據集。訓練集具有標籤(載入特徵),所以演算法可以從這些標籤的例子中學習。測試集沒有任何標籤,也就是說,你還不知道這個值,試圖去預測。

我們將拿出一個特徵進行訓練,並應用線性回歸方法來擬合訓練數據,然後使用測試數據集預測輸出。

線性回歸在scikit-learn中的實現:

01from sklearnimport datasets, linear_model

02import matplotlib.pyplot as plt

03import numpy as np

04

05# Load the diabetes dataset

06diabetes= datasets.load_diabetes()

07

08

09# Use only one feature for training

10diabetes_X= diabetes.data[:, np.newaxis,2]

11

12# Split the data into training/testing sets

13diabetes_X_train= diabetes_X[:-20]

14diabetes_X_test= diabetes_X[-20:]

15

16# Split the targets into training/testing sets

17diabetes_y_train= diabetes.target[:-20]

18diabetes_y_test= diabetes.target[-20:]

19

20# Create linear regression object

21regr= linear_model.LinearRegression()

22

23# Train the model using the training sets

24regr.fit(diabetes_X_train, diabetes_y_train)

25

26# Input data

27print(Input Values)

28print(diabetes_X_test)

29

30# Make predictions using the testing set

31diabetes_y_pred= regr.predict(diabetes_X_test)

32

33# Predicted Data

34print("Predicted Output Values")

35print(diabetes_y_pred)

36

37# Plot outputs

38plt.scatter(diabetes_X_test, diabetes_y_test, color=black)

39plt.plot(diabetes_X_test, diabetes_y_pred, color=red, linewidth_=1)

40

41plt.show()

輸出:

01Input Values

02[

03[0.07786339] [-0.03961813] [0.01103904] [-0.04069594] [-0.03422907] [0.00564998] [0.08864151] [-0.03315126] [-0.05686312] [-0.03099563] [0.05522933] [-0.06009656]

04[0.00133873] [-0.02345095] [-0.07410811] [0.01966154][-0.01590626] [-0.01590626] [0.03906215] [-0.0730303 ]

05]

06Predicted Output Values

07[

08225.9732401 115.74763374 163.27610621 114.73638965 120.80385422 158.21988574 236.08568105 121.81509832

0999.56772822 123.83758651 204.73711411 96.53399594

10154.17490936 130.91629517 83.3878227 171.36605897

11137.99500384 137.99500384 189.56845268 84.3990668

12]

預測diabetes_X_test和diabetes_y_pred之間的圖在線性方程上連續。

  • github.com/vihar/superv

本文為atyun出品,轉載請註明出處。更多內容關注微信公眾號atyun_com 或訪問網站www.atyun.com

weixin.qq.com/r/0Ts4IF7 (二維碼自動識別)


推薦閱讀:
相关文章