一文速覽機(jī)器學(xué)習(xí)的類別
↑ 點(diǎn)擊藍(lán)字?關(guān)注極市平臺(tái)
作者 | 泳魚?來(lái)源 | 算法進(jìn)階編輯 | 極市平臺(tái)
極市導(dǎo)讀
?機(jī)器學(xué)習(xí)可分為監(jiān)督學(xué)習(xí)(supervised learning)、非監(jiān)督學(xué)習(xí)(unsupervised learning)、半監(jiān)督學(xué)習(xí)(semi- supervised learning)和強(qiáng)化學(xué)習(xí)(reinforcement learning),本文對(duì)四種機(jī)器學(xué)習(xí)類型展開(kāi)詳解。?>>加入極市CV技術(shù)交流群,走在計(jì)算機(jī)視覺(jué)的最前沿
1 機(jī)器學(xué)習(xí)類別
機(jī)器學(xué)習(xí)按照學(xué)習(xí)數(shù)據(jù)經(jīng)驗(yàn)的不同,即訓(xùn)練數(shù)據(jù)的標(biāo)簽信息的差異,可以分為監(jiān)督學(xué)習(xí)(supervised learning)、非監(jiān)督學(xué)習(xí)(unsupervised learning)、半監(jiān)督學(xué)習(xí)(semi- supervised learning)和強(qiáng)化學(xué)習(xí)(reinforcement learning)。
1.1 監(jiān)督學(xué)習(xí)
監(jiān)督學(xué)習(xí)是機(jī)器學(xué)習(xí)中應(yīng)用最廣泛及成熟的,它是從有標(biāo)簽的數(shù)據(jù)樣本(x,y)中,學(xué)習(xí)如何關(guān)聯(lián)x到正確的y。這過(guò)程就像是模型在給定題目的已知條件(特征x),參考著答案(標(biāo)簽y)學(xué)習(xí),借助標(biāo)簽y的監(jiān)督糾正,模型通過(guò)算法不斷調(diào)整自身參數(shù)以達(dá)到學(xué)習(xí)目標(biāo)。
監(jiān)督學(xué)習(xí)常用的模型有:線性回歸、樸素貝葉斯、K最近鄰、邏輯回歸、支持向量機(jī)、神經(jīng)網(wǎng)絡(luò)、決策樹(shù)、集成學(xué)習(xí)(如LightGBM)等。按照應(yīng)用場(chǎng)景,以模型預(yù)測(cè)結(jié)果Y的取值有限或者無(wú)限的,可再進(jìn)一步分為分類或者回歸模型。
分類模型
分類模型是處理預(yù)測(cè)結(jié)果取值有限的分類任務(wù)。如下示例通過(guò)邏輯回歸分類模型,根據(jù)溫濕度、風(fēng)速等情況去預(yù)測(cè)是否會(huì)下雨。
- 邏輯回歸簡(jiǎn)介
邏輯回歸雖然名字有帶“回歸”,但其實(shí)它是一種廣義線性的分類模型,由于模型簡(jiǎn)單和高效,在實(shí)際中應(yīng)用非常廣泛。
邏輯回歸模型結(jié)構(gòu)可以視為雙層的神經(jīng)網(wǎng)絡(luò)(如圖4.5)。模型輸入x,通過(guò)神經(jīng)元激活函數(shù)f(f為sigmoid函數(shù))將輸入非線性轉(zhuǎn)換至0~1的取值輸出,最終學(xué)習(xí)的模型決策函數(shù)為Y=sigmoid(wx + b)。
其中模型參數(shù)w即對(duì)應(yīng)各特征(x1, x2, x3...)的權(quán)重(w1,w2,w3...),b模型參數(shù)代表著偏置項(xiàng),Y為預(yù)測(cè)結(jié)果(0~1范圍)。
模型的學(xué)習(xí)目標(biāo)為極小化交叉熵?fù)p失函數(shù)。模型的優(yōu)化算法常用梯度下降算法去迭代求解損失函數(shù)的極小值,得到較優(yōu)的模型參數(shù)。

- 代碼示例
示例所用天氣數(shù)據(jù)集是簡(jiǎn)單的天氣情況記錄數(shù)據(jù),包括室外溫濕度、風(fēng)速、是否下雨等,在分類任務(wù)中,我們以是否下雨作為標(biāo)簽,其他為特征(如圖4.6)

import?pandas?as?pd????#?導(dǎo)入pandas庫(kù)
weather_df?=?pd.read_csv('./data/weather.csv')???#?加載天氣數(shù)據(jù)集
weather_df.head(10)???#?顯示數(shù)據(jù)的前10行
from?sklearn.linear_model?import?LogisticRegression??#?導(dǎo)入邏輯回歸模型
x?=?weather_df.drop('If?Rain',?axis=1)??#?特征x
y?=?weather_df['If?Rain']??#?標(biāo)簽y
lr?=?LogisticRegression()
lr.fit(x,?y)??#?模型訓(xùn)練
print("前10個(gè)樣本預(yù)測(cè)結(jié)果:",?lr.predict(x[0:10])?)?#?模型預(yù)測(cè)前10個(gè)樣本并輸出結(jié)果
以訓(xùn)練的模型輸出前10個(gè)樣
以訓(xùn)練的模型輸出前10個(gè)樣本預(yù)測(cè)結(jié)果為:[1 1 1 1 1 1 0 1 1 1],對(duì)比實(shí)際前10個(gè)樣本的標(biāo)簽:[1 1 1 1 1 0 1 0 0 1],預(yù)測(cè)準(zhǔn)確率并不高。在后面章節(jié)我們會(huì)具體介紹如何評(píng)估模型的預(yù)測(cè)效果,以及進(jìn)一步優(yōu)化模型效果。
回歸模型
回歸模型是處理預(yù)測(cè)結(jié)果取值無(wú)限的回歸任務(wù)。如下代碼示例通過(guò)線性回歸模型,以室外濕度為標(biāo)簽,根據(jù)溫度、風(fēng)力、下雨等情況預(yù)測(cè)室外濕度。
線性回歸簡(jiǎn)介 線性回歸模型前提假設(shè)是y和x呈線性關(guān)系,輸入x,模型決策函數(shù)為Y=wx+b。模型的學(xué)習(xí)目標(biāo)為極小化均方誤差損失函數(shù)。模型的優(yōu)化算法常用最小二乘法求解最優(yōu)的模型參數(shù)。
代碼示例
from?sklearn.linear_model?import?LinearRegression??#導(dǎo)入線性回歸模型
x?=?weather_df.drop('Humidity',?axis=1)??#?特征x
y?=?weather_df['Humidity']??#?標(biāo)簽y
linear?=?LinearRegression()
linear.fit(x,?y)??#?模型訓(xùn)練
print("前10個(gè)樣本預(yù)測(cè)結(jié)果:",?linear.predict(x[0:10])?)?#?模型預(yù)測(cè)前10個(gè)樣本并輸出結(jié)果
#?前10個(gè)樣本預(yù)測(cè)結(jié)果:?[0.42053525 0.32811401 0.31466161 0.3238797 ?0.29984453 0.29880059
1.2 非監(jiān)督學(xué)習(xí)
非監(jiān)督學(xué)習(xí)也是機(jī)器學(xué)習(xí)中應(yīng)用較廣泛的,是從無(wú)標(biāo)注的數(shù)據(jù)(x)中,學(xué)習(xí)數(shù)據(jù)的內(nèi)在規(guī)律。這個(gè)過(guò)程就像模型在沒(méi)有人提供參考答案(y),完全通過(guò)自己琢磨題目的知識(shí)點(diǎn),對(duì)知識(shí)點(diǎn)進(jìn)行歸納、總結(jié)。按照應(yīng)用場(chǎng)景,非監(jiān)督學(xué)習(xí)可以分為聚類,特征降維和關(guān)聯(lián)分析等方法。如下示例通過(guò)Kmeans聚類劃分出不同品種的iris鳶尾花樣本。
Kmeans聚類簡(jiǎn)介 Kmeans聚類是非監(jiān)督學(xué)習(xí)常用的方法,其原理是先初始化k個(gè)簇類中心,通過(guò)迭代算法更新各簇類樣本,實(shí)現(xiàn)樣本與其歸屬的簇類中心的距離最小的目標(biāo)。其算法步驟為:1.初始化:隨機(jī)選擇 k 個(gè)樣本作為初始簇類中心(可以憑先驗(yàn)知識(shí)、驗(yàn)證法確定k的取值);2.針對(duì)數(shù)據(jù)集中每個(gè)樣本 計(jì)算它到 k 個(gè)簇類中心的距離,并將其歸屬到距離最小的簇類中心所對(duì)應(yīng)的類中;3.針對(duì)每個(gè)簇類 ,重新計(jì)算它的簇類中心位置;4.重復(fù)上面 2 、3 兩步操作,直到達(dá)到某個(gè)中止條件(如迭代次數(shù),簇類中心位置不變等)
代碼示例
from?sklearn.datasets?import?load_iris??#?數(shù)據(jù)集
from?sklearn.cluster?import?KMeans???#??Kmeans模型
import?matplotlib.pyplot?as?plt??#?plt畫圖
lris_df?=?datasets.load_iris()??#?加載iris鳶尾花數(shù)據(jù)集,數(shù)據(jù)集有150條樣本,分三類的iris品種
x?=?lris_df.data
k?=?3??#?聚類出k個(gè)簇類,?已知數(shù)據(jù)集有三類品種,?設(shè)定為3
model?=?KMeans(n_clusters=k)??
model.fit(x)??#?訓(xùn)練模型
print("前10個(gè)樣本聚類結(jié)果:",model.predict(x[0:10])?)?#?模型預(yù)測(cè)前10個(gè)樣本并輸出聚類結(jié)果:[1 1 1 1 1 1 1 1 1 1]?
#?樣本的聚類效果以散點(diǎn)圖展示
x_axis?=?lris_df.data[:,0]?#?以iris花的sepal?length?(cm)特征作為x軸
y_axis?=?lris_df.data[:,1]?#?以iris花的sepal?width?(cm)特征作為y軸
plt.scatter(x_axis,?y_axis,?c=model.predict(x))?#?分標(biāo)簽顏色展示聚類效果
plt.xlabel('Sepal?length?(cm)')#設(shè)定x軸注釋
plt.ylabel('Sepal?width?(cm)')#設(shè)定y軸注釋
plt.title('Iris?KMeans?Scatter')
plt.show()???#?如圖4.7聚類效果

1.3 半監(jiān)督學(xué)習(xí)
半監(jiān)督學(xué)習(xí)是介于傳統(tǒng)監(jiān)督學(xué)習(xí)和無(wú)監(jiān)督學(xué)習(xí)之間(如圖4.8),其思想是在有標(biāo)簽樣本數(shù)量較少的情況下,以一定的假設(shè)前提在模型訓(xùn)練中引入無(wú)標(biāo)簽樣本,以充分捕捉數(shù)據(jù)整體潛在分布,改善如傳統(tǒng)無(wú)監(jiān)督學(xué)習(xí)過(guò)程盲目性、監(jiān)督學(xué)習(xí)在訓(xùn)練樣本不足導(dǎo)致的學(xué)習(xí)效果不佳的問(wèn)題。按照應(yīng)用場(chǎng)景,半監(jiān)督學(xué)習(xí)可以分為聚類,分類及回歸等方法。如下示例通過(guò)基于圖的半監(jiān)督算法——標(biāo)簽傳播算法分類俱樂(lè)部成員。

- 標(biāo)簽傳播算法簡(jiǎn)介
標(biāo)簽傳播算法(LPA)是基于圖的半監(jiān)督學(xué)習(xí)分類算法,基本思路是在所有樣本組成的圖網(wǎng)絡(luò)中,從已標(biāo)記的節(jié)點(diǎn)標(biāo)簽信息來(lái)預(yù)測(cè)未標(biāo)記的節(jié)點(diǎn)標(biāo)簽。
首先利用樣本間的關(guān)系(可以是樣本客觀關(guān)系,或者利用相似度函數(shù)計(jì)算樣本間的關(guān)系)建立完全圖模型。
接著向圖中加入已標(biāo)記的標(biāo)簽信息(或無(wú)),無(wú)標(biāo)簽節(jié)點(diǎn)是用一個(gè)隨機(jī)的唯一的標(biāo)簽初始化。
將一個(gè)節(jié)點(diǎn)的標(biāo)簽設(shè)置為該節(jié)點(diǎn)的相鄰節(jié)點(diǎn)中出現(xiàn)頻率最高的標(biāo)簽,重復(fù)迭代,直到標(biāo)簽不變即算法收斂。
- 代碼示例
該示例的數(shù)據(jù)集空手道俱樂(lè)部是一個(gè)被廣泛使用的社交網(wǎng)絡(luò),其中的節(jié)點(diǎn)代表空手道俱樂(lè)部的成員,邊代表成員之間的相互關(guān)系。
import?networkx?as?nx?#?導(dǎo)入networkx圖網(wǎng)絡(luò)庫(kù)
import?matplotlib.pyplot?as?plt
from?networkx.algorithms?import?community??#?圖社區(qū)算法
G=nx.karate_club_graph()???#?加載美國(guó)空手道俱樂(lè)部圖數(shù)據(jù)
#注:?本例未使用已標(biāo)記信息, 嚴(yán)格來(lái)說(shuō)是半監(jiān)督算法的無(wú)監(jiān)督應(yīng)用案例
lpa?=?community.label_propagation_communities(G)??#?運(yùn)行標(biāo)簽傳播算法
community_index?=?{n:?i?for?i,?com?in?enumerate(lpa)?for?n?in?com}?#?各標(biāo)簽對(duì)應(yīng)的節(jié)點(diǎn)
node_color?=?[community_index[n]?for?n?in?G]??#?以標(biāo)簽作為節(jié)點(diǎn)顏色
pos?=?nx.spring_layout(G)??#?節(jié)點(diǎn)的布局為spring型
nx.draw_networkx_labels(G,?pos)?#?節(jié)點(diǎn)序號(hào)
nx.draw(G,?pos,?node_color=node_color)?#?分標(biāo)簽顏色展示圖網(wǎng)絡(luò)
plt.title('?Karate_club?network?LPA')
plt.show()?#展示分類效果,不同顏色為不同類別

1.4 強(qiáng)化學(xué)習(xí)
強(qiáng)化學(xué)習(xí)從某種程度可以看作是有延遲標(biāo)簽信息的監(jiān)督學(xué)習(xí)(如圖4.9),是指智能體Agent在環(huán)境Environment中采取一種行為action,環(huán)境將其轉(zhuǎn)換為一次回報(bào)reward和一種狀態(tài)表示state,隨后反饋給智能體的學(xué)習(xí)過(guò)程。本書中對(duì)強(qiáng)化學(xué)習(xí)僅做簡(jiǎn)單介紹,有興趣可以自行擴(kuò)展。

GitHub源碼:https://github.com/aialgorithm/Blog
如果覺(jué)得有用,就請(qǐng)分享到朋友圈吧!
△點(diǎn)擊卡片關(guān)注極市平臺(tái),獲取最新CV干貨公眾號(hào)后臺(tái)回復(fù)“CVPR21檢測(cè)”獲取CVPR2021目標(biāo)檢測(cè)論文下載~

#?CV技術(shù)社群邀請(qǐng)函?#
△長(zhǎng)按添加極市小助手添加極市小助手微信(ID : cvmart4)備注:姓名-學(xué)校/公司-研究方向-城市(如:小極-北大-目標(biāo)檢測(cè)-深圳)
即可申請(qǐng)加入極市目標(biāo)檢測(cè)/圖像分割/工業(yè)檢測(cè)/人臉/醫(yī)學(xué)影像/3D/SLAM/自動(dòng)駕駛/超分辨率/姿態(tài)估計(jì)/ReID/GAN/圖像增強(qiáng)/OCR/視頻理解等技術(shù)交流群
每月大咖直播分享、真實(shí)項(xiàng)目需求對(duì)接、求職內(nèi)推、算法競(jìng)賽、干貨資訊匯總、與?10000+來(lái)自港科大、北大、清華、中科院、CMU、騰訊、百度等名校名企視覺(jué)開(kāi)發(fā)者互動(dòng)交流~
覺(jué)得有用麻煩給個(gè)在看啦~??

