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