?什么是監(jiān)督學(xué)習(xí)?
監(jiān)督學(xué)習(xí)是機(jī)器學(xué)習(xí)的子集,監(jiān)督學(xué)習(xí)會(huì)對(duì)機(jī)器學(xué)習(xí)模型的輸入數(shù)據(jù)進(jìn)行標(biāo)記,并對(duì)其進(jìn)行練習(xí)。因此,監(jiān)督模型能最大限度地預(yù)測(cè)模型的輸出結(jié)果。
監(jiān)督學(xué)習(xí)背后的概念也可以從現(xiàn)實(shí)生活中找到影子,例如老師給孩子做輔導(dǎo)。假設(shè)老師要教孩子認(rèn)識(shí)貓、狗的圖像。她/他將通過不斷地向孩子展示貓或狗的圖像來輔導(dǎo)孩子,同時(shí)告知孩子圖像是狗還是貓。
展示和告知圖像的過程可以被認(rèn)為是標(biāo)記數(shù)據(jù),機(jī)器學(xué)習(xí)模型訓(xùn)練過程中,會(huì)被告知哪些數(shù)據(jù)屬于哪個(gè)類別。
監(jiān)督學(xué)習(xí)有什么用?監(jiān)督學(xué)習(xí)可用于回歸和分類問題。分類模型允許算法確定給定數(shù)據(jù)屬于哪個(gè)組別。示例可能包括 True/False、Dog/Cat 等。
由于回歸模型能夠根據(jù)歷史數(shù)據(jù)預(yù)測(cè)將來的數(shù)值,因此它會(huì)被用于預(yù)測(cè)員工的工資或房地產(chǎn)的售價(jià)。
在本文中,我們將列出一些用于監(jiān)督學(xué)習(xí)的常見算法,以及關(guān)于此類算法的實(shí)用教程。
線性回歸
線性回歸是一種監(jiān)督學(xué)習(xí)算法,它根據(jù)給定的輸入值預(yù)測(cè)輸出值。當(dāng)目標(biāo)(輸出)變量返回一個(gè)連續(xù)值時(shí),使用線性回歸。
線性算法主要有兩種類型,簡單線性回歸和多元線性回歸。
簡單線性回歸僅使用一個(gè)獨(dú)立(輸入)變量。一個(gè)例子是通過給定的身高來預(yù)測(cè)孩子的年齡。
另一方面,多元線性回歸可以使用多個(gè)自變量來預(yù)測(cè)其最終結(jié)果。一個(gè)例子是根據(jù)它的位置、大小、需求等來預(yù)測(cè)給定房產(chǎn)的價(jià)格。
以下是線性回歸公式
對(duì)于 Python的示例,我們將使用線性回歸來預(yù)測(cè)相對(duì)于給定 x 值的 y 值。
我們給定的數(shù)據(jù)集僅包含兩列:x 和 y。請(qǐng)注意,y 結(jié)果將返回連續(xù)值。
下面是給定數(shù)據(jù)集的截圖:
使用 Python 的線性回歸模型示例
1.導(dǎo)入必要的庫
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns from sklearn
import linear_model from sklearn.model_selection
import train_test_split import os
2. 讀取和采樣我們的數(shù)據(jù)集
為了簡化數(shù)據(jù)集,我們抽取了 50 個(gè)數(shù)據(jù)行的樣本,并將數(shù)據(jù)值四舍五入為 2 個(gè)有效數(shù)字。
請(qǐng)注意,您應(yīng)該在完成此步驟之前導(dǎo)入給定的數(shù)據(jù)集。
df = pd.read_csv("../input/random-linear-regression/train.csv")
df=df.sample(50) df=round(df,2)
3. 過濾 Null 和 Infinite 值
如果數(shù)據(jù)集包含空值和無限值,則可能會(huì)出現(xiàn)錯(cuò)誤。因此,我們將使用 clean_dataset 函數(shù)來清理這些值的數(shù)據(jù)集。
def clean_dataset(df):
assert isinstance(df, pd.DataFrame), "df needs to be a pd.DataFrame"
df.dropna(inplace=True)
indices_to_keep = ~df.isin([np.nan, np.inf, -np.inf]).any(1)
return df[indices_to_keep].astype(np.float64)
df=clean_dataset(df)
4. 選擇我們依賴和獨(dú)立的價(jià)值觀
請(qǐng)注意,我們將數(shù)據(jù)轉(zhuǎn)換為?? DataFrame 格式。??dataframe 數(shù)據(jù)類型是一種二維結(jié)構(gòu),可將我們的數(shù)據(jù)對(duì)齊到行和列中。
5. 拆分?jǐn)?shù)據(jù)集
我們將數(shù)據(jù)集劃分為訓(xùn)練和測(cè)試部分。選擇測(cè)試數(shù)據(jù)集大小為總數(shù)據(jù)集的 20%。
請(qǐng)注意,通過設(shè)置 random_state=1,每次模型運(yùn)行時(shí),都會(huì)發(fā)生相同的數(shù)據(jù)拆分,從而產(chǎn)生完全相同的訓(xùn)練和測(cè)試數(shù)據(jù)集。
這在您想進(jìn)一步調(diào)整模型的情況下很有用。
x_train, x_test, y_train, y_test = train_test_split(X, Y, test_size=0.2, random_state=1)
6.建立線性回歸模型
使用導(dǎo)入的線性回歸模型,我們可以在模型中自由使用線性回歸算法,繞過我們?yōu)榻o定模型獲得的 x 和 y 訓(xùn)練變量。
lm=linear_model.LinearRegression() lm.fit(x_train,y_train)
7. 以分散的方式繪制我們的數(shù)據(jù)
df.plot(kind="scatter", x="x", y="y")
8. 繪制我們的線性回歸線
plt.plot(X,lm.predict(X), color="red")
藍(lán)點(diǎn)表示數(shù)據(jù)點(diǎn),而紅線是模型繪制的最佳擬合線性回歸線。線性模型算法總是會(huì)嘗試?yán)L制最佳擬合線以盡可能準(zhǔn)確地預(yù)測(cè)結(jié)果。
邏輯回歸
與線性回歸類似,??邏輯回歸??根據(jù)輸入變量預(yù)測(cè)輸出值,兩種算法的主要區(qū)別在于邏輯回歸算法的輸出是分類(離散)變量。
對(duì)于 Python的示例,會(huì)使用邏輯回歸將“花”分成兩個(gè)不同的類別/種類。在給定的數(shù)據(jù)集中會(huì)包括不同花的多個(gè)特征。
模型的目的是將給花識(shí)別為Iris-setosa、Iris-versicolor或 Iris-virginica 幾個(gè)種類。
下面是給定數(shù)據(jù)集的截圖:
使用 Python 的邏輯回歸模型示例
1.導(dǎo)入必要的庫
import numpy as np
import pandas as pd from sklearn.model_selection
import train_test_split import warnings warnings.filterwarnings('ignore')
2. 導(dǎo)入數(shù)據(jù)集
data = pd.read_csv('../input/iris-dataset-logistic-regression/iris.csv')
3. 選擇我們依賴和獨(dú)立的價(jià)值觀
對(duì)于獨(dú)立 value(x) ,將包括除類型列之外的所有可用列。至于我們的可靠值(y),將只包括類型列。
X = data[['x0','x1','x2','x3','x4']]
y = data[['type']]
4. 拆分?jǐn)?shù)據(jù)集
將數(shù)據(jù)集分成兩部分,80% 用于訓(xùn)練數(shù)據(jù)集,20% 用于測(cè)試數(shù)據(jù)集。
X_train,X_test,y_train,y_test = train_test_split(X,y, test_size=0.2, random_state=1)
5. 運(yùn)行邏輯回歸模型
從 linear_model 庫中導(dǎo)入整個(gè)邏輯回歸算法。然后我們可以將 X 和 y 訓(xùn)練數(shù)據(jù)擬合到邏輯模型中。
from sklearn.linear_model import LogisticRegression
model = LogisticRegression(random_state = 0)
model.fit(X_train, y_train)
6. 評(píng)估我們模型的性能
print(lm.score(x_test, y_test))
返回值為0.9845128775509371,這表明我們模型的高性能。
請(qǐng)注意,隨著測(cè)試分?jǐn)?shù)的增加,模型的性能也會(huì)增加。
7. 繪制圖表
import matplotlib.pyplot as plt %matplotlib inline
plt.plot(range(len(X_test)), pred,'o',c='r')
輸出圖:
在邏輯圖中,紅點(diǎn)表示給定的數(shù)據(jù)點(diǎn)。這些點(diǎn)清楚地分為 3 類,Virginica、versicolor 和 setosa 花種。
使用這種技術(shù),邏輯回歸模型可以根據(jù)花在圖表上的位置輕松對(duì)花類型進(jìn)行分類。
支持向量機(jī)
??支持向量機(jī)??( SVM) 算法是另一個(gè)著名的監(jiān)督機(jī)器學(xué)習(xí)模型,由 Vladimir Vapnik 創(chuàng)建,它能夠解決分類和回歸問題。實(shí)際上它更多地被用到解決分類問題。
SVM 算法能夠?qū)⒔o定的數(shù)據(jù)點(diǎn)分成不同的組。算法在繪制出數(shù)據(jù)之后,可以繪制最合適的線將數(shù)據(jù)分成多個(gè)類別,從而分析數(shù)據(jù)之間的關(guān)系。
如下圖所示,繪制的線將數(shù)據(jù)集完美地分成 2 個(gè)不同的組,藍(lán)色和綠色。
SVM 模型可以根據(jù)圖形的維度繪制直線或超平面。行只能用于二維數(shù)據(jù)集,這意味著只有 2 列的數(shù)據(jù)集。
如果是多個(gè)特征來預(yù)測(cè)數(shù)據(jù)集,就需要更高的維度。在數(shù)據(jù)集超過 2 維的情況下,支持向量機(jī)模型將繪制超平面。
在支持向量機(jī) Python 的示例中,將對(duì) 3 種不同的花卉類型進(jìn)行物種分類。我們的自變量包括花的所有特征,而因變量是花所屬物種。
花卉品種包括Iris-setosa、 Iris-versicolor和Iris-virginica。
下面是數(shù)據(jù)集的截圖:
使用 Python 的支持向量機(jī)模型示例
1.導(dǎo)入必要的庫
import numpy as np
import pandas as pd from sklearn.model_selection
import train_test_split from sklearn.datasets
import load_iris
2. 讀取給定的數(shù)據(jù)集
請(qǐng)注意,在執(zhí)行此步驟之前,應(yīng)該導(dǎo)入數(shù)據(jù)集。
data = pd.read_csv(‘../input/iris-flower-dataset/IRIS.csv’)
3. 將數(shù)據(jù)列拆分為因變量和自變量
將 X 值作為自變量,其中包含除物種列之外的所有列。
因變量y僅包含模型預(yù)測(cè)的物種列。
X = data.drop(‘species’, axis=1) y = data[‘species’]
4. 將數(shù)據(jù)集拆分為訓(xùn)練和測(cè)試數(shù)據(jù)集
將數(shù)據(jù)集分為兩部分,其中我們將 80% 的數(shù)據(jù)放入訓(xùn)練數(shù)據(jù)集中,將 20% 放入測(cè)試數(shù)據(jù)集中。
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=1)
5.導(dǎo)入SVM并運(yùn)行模型
導(dǎo)入了支持向量機(jī)算法。然后,使用上面步驟中收到的 X 和 y 訓(xùn)練數(shù)據(jù)集運(yùn)行它。
from sklearn.svm import SVC
model = SVC( )
model.fit(X_train, y_train)
6. 測(cè)試模型的性能
model.score(X_test, y_test)
為了評(píng)估模型的性能,將使用 score 函數(shù)。在第四步中創(chuàng)建的 X 和 y 測(cè)試值輸入到 score 方法中。
返回值為0.9666666666667,這表明模型的高性能。
請(qǐng)注意,隨著測(cè)試分?jǐn)?shù)的增加,模型的性能也會(huì)增加。
其他流行的監(jiān)督機(jī)器學(xué)習(xí)算法
雖然線性、邏輯和 SVM 算法非常可靠,但還會(huì)提到一些有監(jiān)督的機(jī)器學(xué)習(xí)算法。
1. 決策樹
??決策樹算法??是一種有監(jiān)督的機(jī)器學(xué)習(xí)模型,它利用樹狀結(jié)構(gòu)進(jìn)行決策。決策樹通常用于分類問題,其中模型可以決定數(shù)據(jù)集中給定項(xiàng)目所屬的組。
請(qǐng)注意,使用的樹格式是倒置樹的格式。
2. 隨機(jī)森林
被認(rèn)為是一種更復(fù)雜的算法,?? 隨機(jī)森林算法??通過構(gòu)建大量決策樹來實(shí)現(xiàn)其最終目標(biāo)。
意味著同時(shí)構(gòu)建多個(gè)決策樹,每個(gè)決策樹都返回自己的結(jié)果,然后將其組合以獲得更好的結(jié)果。
對(duì)于分類問題,隨機(jī)森林模型將生成多個(gè)決策樹,并根據(jù)大多數(shù)樹預(yù)測(cè)的分類組對(duì)給定對(duì)象進(jìn)行分類。
模型可以修復(fù)由單個(gè)樹引起的過擬合問題。同時(shí),隨機(jī)森林算法也可用于回歸,盡管可能導(dǎo)致不良結(jié)果。
3. k-最近鄰
k最近??鄰??(KNN) 算法是一種監(jiān)督機(jī)器學(xué)習(xí)方法,它將所有給定數(shù)據(jù)分組到單獨(dú)的組中。
這種分組基于不同個(gè)體之間的共同特征。KNN 算法可用于分類和回歸問題。
KNN 的經(jīng)典示例就是將動(dòng)物圖像分類到不同的組集中。
總結(jié)
本文介紹了監(jiān)督機(jī)器學(xué)習(xí)及其可以解決的兩類問題,并解釋了分類和回歸問題,給出了每個(gè)輸出數(shù)據(jù)類型的一些示例。
詳細(xì)解釋了線性回歸是什么以及它是如何工作的,并提供了一個(gè) Python 中的具體示例,它會(huì)根據(jù)獨(dú)立的 X 變量預(yù)測(cè) Y 值。
隨后又介紹了邏輯回歸模型,并給出了分類模型示例,該示例將給定的圖像分類為具體花的種類。
對(duì)于支持向量機(jī)算法,可以用它來預(yù)測(cè) 3 種不同花種的給定花種。最后列出了其他著名的監(jiān)督機(jī)器學(xué)習(xí)算法,例如決策樹、隨機(jī)森林和 K 近鄰算法。
無論您是為了學(xué)習(xí)、工作還是娛樂閱讀本文,我們認(rèn)為了解這些算法是開始進(jìn)入機(jī)器學(xué)習(xí)領(lǐng)域的一個(gè)開端。
如果您有興趣并想了解更多關(guān)于機(jī)器學(xué)習(xí)領(lǐng)域的信息,我們建議您深入研究此類算法的工作原理以及如何調(diào)整此類模型以進(jìn)一步提高其性能。
譯者介紹
崔皓,51CTO社區(qū)編輯,資深架構(gòu)師,擁有18年的軟件開發(fā)和架構(gòu)經(jīng)驗(yàn),10年分布式架構(gòu)經(jīng)驗(yàn)。曾任惠普技術(shù)專家。樂于分享,撰寫了很多熱門技術(shù)文章,閱讀量超過60萬。??《分布式架構(gòu)原理與實(shí)踐》??作者。
原文標(biāo)題:?Primary Supervised Learning Algorithms Used in Machine Learning?,作者:Kevin Vu
?
?