Python遷移學(xué)習(xí):機(jī)器學(xué)習(xí)算法
機(jī)器學(xué)習(xí)是人工智能中一個(gè)流行的子領(lǐng)域,其涉及的領(lǐng)域非常廣泛。流行的原因之一是在其策略下有一個(gè)由復(fù)雜的算法、技術(shù)和方法論組成的綜合工具箱。該工具箱已經(jīng)經(jīng)過了多年的開發(fā)和改進(jìn),同時(shí)新的工具箱也在持續(xù)不斷地被研究出來。為了更好地使用機(jī)器學(xué)習(xí)工具箱,我們需要先了解以下幾種機(jī)器學(xué)習(xí)的分類方式。
基于是否有人工進(jìn)行監(jiān)督的分類如下。
- 監(jiān)督學(xué)習(xí)。這一類別高度依賴人工監(jiān)督。監(jiān)督學(xué)習(xí)類別下的算法從訓(xùn)練數(shù)據(jù)和對(duì)應(yīng)的輸出中學(xué)習(xí)兩個(gè)變量之間的映射,并將該映射運(yùn)用于從未見過的數(shù)據(jù)。分類任務(wù)和回歸任務(wù)是監(jiān)督學(xué)習(xí)算法的兩種主要任務(wù)類型。
- 無監(jiān)督學(xué)習(xí)。這類算法試圖從沒有任何(在人工監(jiān)督之下)關(guān)聯(lián)輸出或標(biāo)記的輸入數(shù)據(jù)中學(xué)習(xí)內(nèi)在的潛在結(jié)構(gòu)、模式和關(guān)系。聚類、降維、關(guān)聯(lián)規(guī)則挖掘等任務(wù)是無監(jiān)督學(xué)習(xí)算法的幾種主要任務(wù)類型。
- 半監(jiān)督學(xué)習(xí)。這類算法是監(jiān)督學(xué)習(xí)算法和無監(jiān)督學(xué)習(xí)算法的混合。這一類別下的算法使用少量的標(biāo)記訓(xùn)練數(shù)據(jù)和更多的非標(biāo)記訓(xùn)練數(shù)據(jù),因此需要?jiǎng)?chuàng)造性地使用監(jiān)督學(xué)習(xí)方法和無監(jiān)督學(xué)習(xí)方法來解決特定問題。
- 強(qiáng)化學(xué)習(xí)。這類算法與監(jiān)督學(xué)習(xí)和無監(jiān)督學(xué)習(xí)算法略有不同。強(qiáng)化學(xué)習(xí)算法的中心實(shí)體是一個(gè)代理,它在訓(xùn)練期間會(huì)同環(huán)境進(jìn)行交互讓獎(jiǎng)勵(lì)最大化。代理會(huì)迭代地進(jìn)行學(xué)習(xí),并基于和環(huán)境的交互中獲得的獎(jiǎng)勵(lì)或懲罰來調(diào)整其策略。
基于數(shù)據(jù)可用性的分類如下。
- 批量學(xué)習(xí)。也被稱為離線學(xué)習(xí),當(dāng)所需的訓(xùn)練數(shù)據(jù)可用時(shí)可以使用這類算法,同時(shí)這種算法也可以在部署到生產(chǎn)環(huán)境或現(xiàn)實(shí)世界之前對(duì)模型進(jìn)行訓(xùn)練和微調(diào)。
- 在線學(xué)習(xí)。顧名思義,在這類算法中只要數(shù)據(jù)可用,學(xué)習(xí)就不會(huì)停止。另外,在這類算法中,數(shù)據(jù)會(huì)被小批量地輸入系統(tǒng),而下一次訓(xùn)練將會(huì)使用新批次中的數(shù)據(jù)。
前面討論的分類方法讓我們對(duì)關(guān)于如何組織、理解和利用機(jī)器學(xué)習(xí)算法有了一個(gè)抽象的理解。機(jī)器學(xué)習(xí)算法最常見的分類方法為監(jiān)督學(xué)習(xí)算法和無監(jiān)督學(xué)習(xí)算法。下面讓我們更詳細(xì)地討論這兩個(gè)類別,因?yàn)檫@將有助于我們開啟后面將要介紹的更高級(jí)的主題。
1.2.1 監(jiān)督學(xué)習(xí)
監(jiān)督學(xué)習(xí)算法是一類使用數(shù)據(jù)樣本(也稱為訓(xùn)練樣本)和對(duì)應(yīng)輸出(或標(biāo)簽)來推斷兩者之間映射函數(shù)的算法。推斷映射函數(shù)或?qū)W習(xí)函數(shù)是這個(gè)訓(xùn)練過程的輸出。學(xué)習(xí)函數(shù)能正確地映射新的和從未見過的數(shù)據(jù)點(diǎn)(即輸入元素),以測(cè)試自身的性能。
監(jiān)督學(xué)習(xí)算法中的幾個(gè)關(guān)鍵概念的介紹如下。
- 訓(xùn)練數(shù)據(jù)集。訓(xùn)練過程中使用的訓(xùn)練樣本和對(duì)應(yīng)的輸出稱為訓(xùn)練數(shù)據(jù)。在形式上,一個(gè)訓(xùn)練數(shù)據(jù)集是由一個(gè)輸入元素(通常是一個(gè)向量)和對(duì)應(yīng)的輸出元素或信號(hào)組成的二元元組。
- 測(cè)試數(shù)據(jù)集。用來測(cè)試學(xué)習(xí)函數(shù)性能的從未見過的數(shù)據(jù)集。該數(shù)據(jù)集也是一個(gè)包含輸入數(shù)據(jù)點(diǎn)和對(duì)應(yīng)輸出信號(hào)的二元元組。在訓(xùn)練階段不使用該集合中的數(shù)據(jù)點(diǎn)(該數(shù)據(jù)集也會(huì)進(jìn)一步劃分為驗(yàn)證集,我們將在后續(xù)章節(jié)中詳細(xì)討論)。
- 學(xué)習(xí)函數(shù)。這是訓(xùn)練階段的輸出,也稱為推斷函數(shù)或模型。該函數(shù)基于訓(xùn)練數(shù)據(jù)集中的訓(xùn)練實(shí)例(輸入數(shù)據(jù)點(diǎn)及其對(duì)應(yīng)的輸出)被推斷出。一個(gè)理想的模型或?qū)W習(xí)函數(shù)學(xué)到的映射也能推廣到從未見過的數(shù)據(jù)。
可用的監(jiān)督學(xué)習(xí)算法有很多。根據(jù)使用需求,它們主要被劃分為分類模型和回歸模型。
1.分類模型
用最簡單的話來說,分類算法能幫助我們回答客觀問題或是非預(yù)測(cè)。例如這些算法在一些場(chǎng)景中很有用,如“今天會(huì)下雨嗎?”或者“這個(gè)腫瘤可能癌變嗎?”等。
從形式上來說,分類算法的關(guān)鍵目標(biāo)是基于輸入數(shù)據(jù)點(diǎn)預(yù)測(cè)本質(zhì)分類的輸出標(biāo)簽。輸出標(biāo)簽在本質(zhì)上都是類別,也就是說,它們都屬于一個(gè)離散類或類別范疇。
邏輯回歸、支持向量機(jī)(Support Vector Machine,SVM)、神經(jīng)網(wǎng)絡(luò)、隨機(jī)森林、K-近鄰算法(K-Nearest Neighbour,KNN)、決策樹等算法都是流行的分類算法。
假設(shè)我們有一個(gè)真實(shí)世界的用例來評(píng)估不同的汽車模型。為了簡單起見,我們假設(shè)模型被期望基于多個(gè)輸入訓(xùn)練樣本預(yù)測(cè)每個(gè)汽車模型的輸出是可接受的還是不可接受的。輸入訓(xùn)練樣本的屬性包括購買價(jià)格、門數(shù)、容量(以人數(shù)為單位)和安全級(jí)別。
除了類標(biāo)簽以外,每一層的其他屬性都會(huì)用于表示每個(gè)數(shù)據(jù)點(diǎn)是否可接受。圖1.3所示描述了目前的二元分類問題。分類算法以訓(xùn)練樣本為輸入來生成一個(gè)監(jiān)督模型,然后利用該模型為一個(gè)新的數(shù)據(jù)點(diǎn)預(yù)測(cè)評(píng)估標(biāo)簽。

圖1.3
在分類問題中,由于輸出標(biāo)簽是離散類,因此如果只有兩個(gè)可能的輸出類,任務(wù)則被稱為二元分類問題,否則被稱為多類分類問題。例如預(yù)測(cè)明天是否下雨是一個(gè)二元分類問題(其輸出為是或否);從掃描的手寫圖像中預(yù)測(cè)一個(gè)數(shù)字則是一個(gè)包含10個(gè)標(biāo)簽(可能的輸出標(biāo)簽為0~9)的多類分類問題。
2.回歸模型
這類監(jiān)督學(xué)習(xí)算法能幫助我們回答“數(shù)量是多少”這樣的量化問題。從形式上來說,回歸模型的關(guān)鍵目標(biāo)是估值。在這類問題中,輸出標(biāo)簽本質(zhì)上是連續(xù)值(而不是分類問題中的離散輸出)。
在回歸問題中,輸入數(shù)據(jù)點(diǎn)被稱為自變量或解釋變量,而輸出被稱為因變量?;貧w模型還會(huì)使用由輸入(或自變量)數(shù)據(jù)點(diǎn)和輸出(或因變量)信號(hào)組成的訓(xùn)練數(shù)據(jù)樣本進(jìn)行訓(xùn)練。線性回歸、多元回歸、回歸樹等算法都是監(jiān)督回歸算法。
回歸模型可以基于其對(duì)因變量和自變量之間關(guān)系的模型進(jìn)一步分類。
簡單線性回歸模型適用于包含單個(gè)自變量和單個(gè)因變量的問題。普通最小二乘(Ordinary Least Square,OLS)回歸是一種流行的線性回歸模型。多元回歸或多變量回歸是指只有一個(gè)因變量,而每個(gè)觀測(cè)值是由多個(gè)解釋變量組成的向量的問題。
多項(xiàng)式回歸模型是多元回歸的一種特殊形式。該模型使用自變量的n次方對(duì)因變量進(jìn)行建模。由于多項(xiàng)式回歸模型能擬合或映射因變量和自變量之間的非線性關(guān)系,因此這類模型也被稱為非線性回歸模型。
圖1.4所示是一個(gè)線性回歸的例子。

圖1.4
為了理解不同的回歸類型,我們可以考慮一個(gè)現(xiàn)實(shí)世界中根據(jù)車速估計(jì)汽車的行車距離(單位省略)的用例。在這個(gè)問題中,基于已有的訓(xùn)練數(shù)據(jù),我們可以將距離建模為汽車速度(單位省略)的線性函數(shù),或汽車速度的多項(xiàng)式函數(shù)。記住,主要目標(biāo)是在不過擬合訓(xùn)練數(shù)據(jù)本身的前提下將誤差最小化。
前面的圖1.4描述了一個(gè)線性擬合模型,而圖1.5所示描述了使用同一數(shù)據(jù)集的多項(xiàng)式擬合模型。

圖1.5
1.2.2 無監(jiān)督學(xué)習(xí)
顧名思義,無監(jiān)督學(xué)習(xí)算法是在沒有監(jiān)督的情況下對(duì)概念進(jìn)行學(xué)習(xí)或推斷。監(jiān)督學(xué)習(xí)算法基于輸入數(shù)據(jù)點(diǎn)和輸出信號(hào)組成的訓(xùn)練數(shù)據(jù)集來推斷映射函數(shù),而無監(jiān)督學(xué)習(xí)算法的任務(wù)是在沒有任何輸出信號(hào)的訓(xùn)練數(shù)據(jù)集中找出訓(xùn)練數(shù)據(jù)中的模式和關(guān)系。這類算法利用輸入數(shù)據(jù)集來檢測(cè)模式,挖掘規(guī)則或?qū)?shù)據(jù)點(diǎn)進(jìn)行分組/聚類,從而從原始輸入數(shù)據(jù)集中提取出有意義的見解。
當(dāng)我們沒有包含相應(yīng)輸出信號(hào)或標(biāo)簽的訓(xùn)練集時(shí),無監(jiān)督學(xué)習(xí)算法就能派上用場(chǎng)。在許多現(xiàn)實(shí)場(chǎng)景中,數(shù)據(jù)集在沒有輸出信號(hào)的情況下是可用的,并且很難手動(dòng)對(duì)其進(jìn)行標(biāo)記。因此無監(jiān)督學(xué)習(xí)算法有助于填補(bǔ)這些空缺。
與監(jiān)督學(xué)習(xí)算法類似,為了便于理解和學(xué)習(xí),無監(jiān)督學(xué)習(xí)算法也可以進(jìn)行分類。下面是不同類別的無監(jiān)督學(xué)習(xí)算法。
1.聚類
分類問題的無監(jiān)督學(xué)習(xí)算法稱為聚類。這些算法能夠幫助我們將數(shù)據(jù)點(diǎn)聚類或分組到不同的組或類別中,而不需要在輸入或訓(xùn)練數(shù)據(jù)集中包含任何輸出標(biāo)簽。這些算法會(huì)嘗試從輸入數(shù)據(jù)集中找到模式和關(guān)系,利用固有特征基于某種相似性度量將它們分組。
一個(gè)有助于理解聚類的現(xiàn)實(shí)世界的例子是新聞文章。每天有數(shù)百篇新聞報(bào)道被創(chuàng)作出來,每一篇都針對(duì)不同的話題,如政治、體育和娛樂等。聚類是一種可以將這些文章進(jìn)行分組的無監(jiān)督方法,如圖1.6所示。
執(zhí)行聚類過程的方法有多種,其中最受歡迎的方法包括以下幾種。
- 基于重心的方法。例如流行的K-均值算法和K-中心點(diǎn)算法。
- 聚合和分裂層次聚類法。例如流行的沃德算法和仿射傳播算法。
- 基于數(shù)據(jù)分布的方法。例如高斯混合模型。
- 基于密度的方法。例如具有噪聲的基于密度的基類方法(Density-Based Spatial Clustering of Applications with Noise,DBSCAN)等。

圖1.6
2.降維
數(shù)據(jù)和機(jī)器學(xué)習(xí)是最好的朋友,但是更多、更大的數(shù)據(jù)會(huì)帶來許多問題。大量的屬性或膨脹的特征空間是常見的問題。一個(gè)大型特征空間在帶來數(shù)據(jù)分析和可視化方面的問題的同時(shí),也帶來了與訓(xùn)練、內(nèi)存和空間約束相關(guān)的問題。這種現(xiàn)象被稱為維度詛咒。由于無監(jiān)督方法能夠幫助我們從未標(biāo)記的訓(xùn)練數(shù)據(jù)集中提取見解和模式,因此這些方法在幫助我們減少維度方面很有用。
換句話說,無監(jiān)督方法能夠幫助我們從完整的可用列表中選擇一組具有代表性的特征,從而幫助我們減少特征空間,如圖1.7所示。

圖1.7
主成分分析(Principal Component Analysis,PCA)、最近鄰分析和判別分析是常用的降維技術(shù)。
圖1.7所示是基于PCA的降維技術(shù)的工作原理的著名描述圖片。圖片左側(cè)展示了一組在三維空間中能表示為瑞士卷形狀的數(shù)據(jù),圖片右側(cè)則展示了應(yīng)用PCA將數(shù)據(jù)轉(zhuǎn)換到二維空間中的結(jié)果。
3.關(guān)聯(lián)規(guī)則挖掘
這類無監(jiān)督機(jī)器學(xué)習(xí)算法能夠幫助我們理解和從交易數(shù)據(jù)集中提取模式。這些算法被稱為市場(chǎng)籃子分析(Market Basket Analysis,MBA),可以幫助我們識(shí)別交易項(xiàng)目之間有趣的關(guān)系。
使用關(guān)聯(lián)規(guī)則挖掘,我們可以回答“在特定的商店中哪些商品會(huì)被一起購買?”或者“買葡萄酒的人也會(huì)買奶酪嗎?”等問題。FP-growth、ECLAT和Apriori是關(guān)聯(lián)規(guī)則挖掘任務(wù)的一些廣泛使用的算法。
4.異常檢測(cè)
異常檢測(cè)是基于歷史數(shù)據(jù)識(shí)別罕見事件或觀測(cè)的任務(wù),也稱為離群點(diǎn)檢測(cè)。異常值或離群值通常具有不頻繁出現(xiàn)或在短時(shí)間內(nèi)突然爆發(fā)的特征。
對(duì)于這類任務(wù),我們?yōu)樗惴ㄌ峁┝艘粋€(gè)歷史數(shù)據(jù)集,因此它能夠以無監(jiān)督學(xué)習(xí)的方式識(shí)別和學(xué)習(xí)數(shù)據(jù)的正常行為。一旦學(xué)習(xí)完成之后,算法將幫助我們識(shí)別不同于之前學(xué)習(xí)行為的模式。