1. 程式人生 > >聊聊機器學習中的無監督學習

聊聊機器學習中的無監督學習

機器學習分為監督式機器學習、無監督式機器學習和半監督式機器學習。其劃分的標準是訓練樣本是否包含人為標註的結果。

(1)監督式機器學習:從給定的訓練資料集中學習出一個函式,當新的資料到來時,可以根據這個函式預測結果。監督學習的訓練集要求是包括輸入和輸出,也可以說是特徵和目標。訓練集中的目標是由人標註的。常見的監督學習演算法包括迴歸分析和統計分類。 
(2)無監督式機器學習:與監督學習相比,訓練集沒有人為標註的結果。常見的無監督學習演算法有聚類。 
(3)半監督式機器學習:是監督學習和無監督學習相結合的一種學習方法。它主要考慮如何利用少量的樣本標註和大量的未標註樣本進行訓練和分類的問題。半監督學習對於減少標註代價,提高學習機器效能具有非常大的實際意義。 

今天,就來聊聊無監督式機器學習:

首先從大家熟悉的聚類分析開始吧,聚類分析是無監督式機器學習的一個典型應用,也是探索性資料探勘中的一種常用方法。

利用聚類分析能夠將看似無序的物件進行分組、歸類,以達到更好地理解研究物件的目的。聚類樣本要求組內物件相似性較高,組間物件相似性較低。

聚類分析的流程大致可以分為四步,如下圖所示。
首先,需要對資料集進行預處理,通常包括資料降維、特徵選擇或抽取等;
第二步,根據資料集的特點進行聚類演算法的設計或選擇;
第三步,聚類演算法的測試與評估;
第四步,聚類結果的展示與解釋,通過聚類分析從資料集中獲得有價值的知識。

1.png

其中,聚類演算法設計主要包括:設計樣本相似性度量標準及聚類過程的終止條件、聚類數目的選取等。通常的做法是先抽樣一小批量的樣本,來進行演算法設計、測試、同時能夠對資料的概貌有一定的認識,得到比較好的效果後在推廣到全量的樣本上進行分析實驗。

具體的聚類分析方法有很多,在此就不做介紹了。

接下來聊聊無監督式機器學習的第二大應用方向:Autoencoder,中文亦成自動編碼器。

做機器學習時首先會遇到的問題就是特徵選取的問題,如何選取出對原始資料具有良好表達能力的特徵成為機器學習實踐過程中一個讓人頭疼的問題。如256*256的灰度圖對應於一個 65,000 的輸入向量,換句話說,我們要解決一個 65,000 維空間上的問題。高維數的資料不僅需要收集更多的樣本資料,同時需要更多的計算資源和儲存資源。很明顯,一副影象並不需要如此過的原始特徵來進行分類,我們可以進行人工的特徵選取來對原始特徵進行降維。但這樣不僅需要研究人員對原始資料進行長時間的觀察研究,很多起到作用的特徵並不容易被發現,同時,特徵選取的推廣性變得很差。

那麼,有沒有辦法能夠從原始資訊中抽取中資訊量最大的特徵呢,答案是肯定的,通過一種無監督式機器學習方法:Autoencoder,即可在一定程度上解決我們的問題。

Autoencoder 是一種無監督機器學習技術,使用了一個神經網路來產生一個高維輸入的低維表示。傳統的維度下降依賴於線性方法,如 PCA,找出高維資料中最大的方差的方向。通過選擇這些方向,PCA 本質上刻畫了包含了最終資訊的方向。所以我們可以找到一個較小的維度的數目來作為降維的結果。然而,PCA 方法的線性性也是導致自身可以抽取出的特徵維度型別上的很大限制。Autoencoder通過引入神經網路天生的非線性性克服這些限制。

Autoencoder包含兩個主要的部分,encoder 和 decoder 網路(編碼網路和解碼網路)。encoder 網路在訓練和部署時候使用,而 decoder 網路只在訓練的時候用。encoder 網路的作用是用來發現給定資料的壓縮表示。

其基本結構:

2.jpg

Autoencoder結構圖

我們將input輸入一個encoder編碼器,就會得到一個code,這個code也就是輸入的一個表示,那麼我們怎麼知道這個code表示的就是input呢?我們加一個decoder解碼器,這時候decoder就會輸出一個資訊,那麼如果輸出的這個資訊和一開始的輸入訊號input是很像的(理想情況下就是一樣的),那很明顯,我們就有理由相信這個code是靠譜的。所以,我們就通過調整encoder和decoder的引數,使得重構誤差最小,這時候我們就得到了輸入input訊號的第一個表示了,也就是編碼code了。因為是無標籤資料,所以誤差的來源就是直接重構後與原輸入相比得到。

3.jpg

stackedautoencoders:多個autoencoder的級聯表示

通常,為了獲得原始資料更為抽象的特徵,我們會將多個autoencoder級聯,構成stacked autoencoders。

stacked autoencoders具有更強大的表達能力及深度網路的所有優點,第一層可以學習到一階特徵,第二層可以學到二階特徵等等,對於影象而言,第一層可能學習到邊,第二層可能學習到如何去組合邊形成輪廓、點,更高層可能學習到更形象且更有意義的特徵,學到的特徵方便我們更好地處理影象,比如對影象分類、檢索等等。

如果在autoencoder的輸出項上加一個正則項。則得到了Sparse AutoEncoder稀疏自動編碼器,其是一種在影象處理和NLP領域一種非常好的降維方法。如SVM處理文字分類時,使用TF_IDF 對原始文字進行編碼,這裡TF_IDF 可以看作一種人工的編碼器,能夠取得很好的效果。

那麼,AutoEncoder等這類自動編碼方法和傳統的線性降維方法有什麼優勢呢?

以AutoEncoder的 2 維表示和 PCA 的 2 維表示在知名影象資料集MNIST 手寫數字資料集上的表現為例:

4.png

AutoEncoder右,PCA 左

可以看到,AutoEncoder的降維結果相對於PCA的結果更具有可區分性,也就是說AutoEncoder編碼降維的結果對原始資料更具表達性、包含更多的原始資訊。

Autoencoder是無監督式機器學習的一個新方向,對於機器學習在複雜問題中的應用提供了非常好的資料建模方法。

無監督式機器學習的兩大類問題:聚類問題和Autoencoder問題,聚類問題解決的其實是模糊分類的問題,針對複雜資料的特徵構造、選取、降維及原始資料的壓縮表示方面,Autoencoder是一個很好的切入點。

以上圖片,均出自其他部落格或者論文,在此一一謝過。