1. 程式人生 > >《機器學習》總結與心得

《機器學習》總結與心得

目錄

6、應用

這段時間把《機器學習》看了一遍,總的來說,除了前兩章是基礎,其餘章節都是介紹模型方法,應用場景、理論推導、優化過程、演算法等,每章都可獨立閱讀而不受其他章節影響。

如果只是每一章都看完,頂多就是了解了一種方法,相互之間是割裂的,這樣當碰到一個實際問題,仍然無法思路完整的求解,因而有必要在閱讀時就要有意識甚至刻意的建立起知識架構。實際上,所謂的機器學習,是面對一個具體的問題,從給定的資料中產生模型的演算法,也就是說脫離了實際問題談機器學習演算法是毫無意義的

參考本書的章節內容,加上自己在讀書、工作中的一些理解,簡單總結一下基於機器學習的一般性問題解決方法。

前面提到,脫離實際問題談機器學習是毫無意義的,那麼在給定資料集(所謂大資料)和具體問題的前提下,一般解決問題的步驟可以概括如下:

1、資料抽象

將資料集和具體問題抽象成數學語言,以恰當的數學符號表示。這樣做自然是為了方便表述和求解問題,而且也更加直觀。

2、設定效能度量指標

機器學習是產生模型的演算法,一般來說模型都有誤差。如果模型學的太好,把訓練樣本自身的一些特點當成所有樣本具有的潛在一般性質,這種情況稱為過擬合,這樣的模型在面對新樣本時就會出現較大誤差,專業表述就是導致模型的泛化效能下降

與之相對的是欠擬合,模型對樣本的一般性質都沒學好,這種情況一般比較好解決,擴充資料集或者調整模型

皆可。

而一般來說無論是機器學習還是現在很火的深度學習,面對的主要問題都是過擬合。那麼為了保證模型的泛化能力足夠強,必須要有衡量模型泛化能力的評價標準,也就是效能度量的設定。

很顯然不同的效能度量會導致不同的評判結果,好的效能度量能夠直觀的顯示模型的好壞,同時也能看到不同模型,或者模型在不同引數下對解決問題的程度好壞。

進一步,有的問題可以直接基於設定的效能度量直接做最優化,得出該問題的一般求解模型。

比如迴歸任務最常用的效能度量就是均方誤差,目標就是讓均方誤差最小,這就直接轉化成了一個最優化問題。

其他一些常用的有錯誤率與精度、查準率、查全率、ROC與AOC等。

當然更為重要的是,僅僅設定好效能度量是不夠的,不同模型或者不同引數下得到的效能度量結果一般是不同的,一般來說不能簡單的比較結果,而應該基於統計假設檢驗來做效果判定。也就是說通過比較檢驗的方法,我們就可以判斷,如果觀察到A比B好,在統計意義上A的泛化效能是否優於B,以及這個判斷的把握有多大。

3、資料預處理

之所以要做資料預處理,是因為提供的資料集往往很少是可以直接拿來用的。

可能的情況有: 
1. 樣本某些屬性值缺失 
2. 有未標記樣本 
3. 樣本的屬性太多 
4. 樣本量不足 
5. 沒有分出測試集和驗證集 
6. 不同類的樣本數相差比較大

不同類的樣本數相差比較大

這就是所謂類別不平衡問題。舉個例子,樣本里有998個反例,2個正例,如果一個模型對任何的新樣本都預測為反例,那麼它的精度為99.8%,雖然很高,但沒有任何價值。

這種情況使用的基本策略是再縮放,具體方法則是取樣。通過不同的取樣方法來使類別達到平衡。

沒有分出測試集和驗證集

再說第五種情況,為了方便訓練和驗證模型好壞,資料集一般會以9:1或者其他合適比例(比例選擇主要基於實際問題)分為測試集和驗證集。如果給定的資料集只是已經標記好的樣本,那麼劃分時必須保證資料集和測試集的分佈大致均勻,這就涉及到具體的劃分演算法了。

樣本量不足

第四種情況一般影象問題比較常遇到,如果樣本量不足,不夠模型來學習,效果自然很差。常見的方法一般有兩種: 
1. 基於原資料集做擴充。比如對於圖片,可以做各種處理,比如旋轉、crop、對比度、亮度等基於畫素值的調整,使得一個樣本能夠生成多個樣本,從而達到擴充資料集的目的。 
2. 通過人工標註生成樣本。比如大名鼎鼎的ImageNet資料集就是通過全球眾包完成的,當然這個不僅耗時長,人工成本也很高,需謹慎考慮。

樣本的屬性太多

對於第三種情況,如果樣本屬性太多,為了保證模型的泛化效能足夠強,則理論上必須保證資料集包括有所有屬性的所有值,而這隨著屬性數目以及屬性值是呈指數上升,很有可能達到天文數字,不僅難以計算,在現實情況也不可能收集到這麼多的樣本。

從數學角度看,每個樣本的屬性可以看成向量,屬性數目是向量的維數,解決第三種情況一般有兩種方法: 
1. 降維 
2. 特徵選擇

特徵選擇比較好理解,就是選擇有用相關的屬性,或者用另外一種表達方式:選擇樣本中有用、跟問題相關的特徵。事實上這也很正常,並不一定樣本的所有屬性對具體問題都是有用的,通過一定的方法選擇合適的特徵可以保證模型更優。常用的方法大致分三類:過濾式、包裹式和嵌入式。

所謂的降維,即是多屬性意味著是高維空間,在很多時候可以等價的對映到低維而不丟失主要資訊。從空間對映的角度看,我們可以通過主成分分析PCA(線性對映)和核化主成分分析(非線性對映)來達到降維的目的。(補充:PCA是無監督降維方法,線性判別分析LDA則是監督降維防範)

有未標記樣本

現實情況下往往很多資料集都有大量的未標記樣本,有標記的樣本反而比較少。如果直接棄用,很大程度上會導致模型精度低。這種情況解決的思路往往是結合有標記的樣本,通過估計的方法把未標記樣本變為偽的有標記樣本。基本的方法有主動學習和半監督學習兩種方法。

樣本某些屬性值缺失

樣本的屬性值缺失是很常見的一種情況。比如做書籍、視訊、音樂等的個性化推薦時,需要使用者對不同種類的偏好或評價。而使用者不一定聽過所有種類的歌,也不一定做出了評價。這就需要通過他已產生的樣本資料和與之相類似的使用者的資料來恢復和補全。

從原理上講,這和壓縮感知根據部分資訊恢復全部資訊是有類似的。

常用的方法涉及到協同過濾、矩陣補全等技術和方法。

總的來說,資料預處理是一個非常重要的過程,實際上資料預處理往往會和模型選擇結合在一起。

4、選定模型

4.1、方法與目的

分類模型和迴歸模型本質一樣,分類模型可將回歸模型的輸出離散化(下面例子1. 2. 4. 5.),迴歸模型也可將分類模型的輸出連續化(下面例子3.)  

舉幾個例子:  

1、Logistic Regression 和 Linear Regression

    1、Linear Regression: 輸出一個標量 wx+b,這個值是連續值,所以可以用來處理迴歸問題

    2、Logistic Regression:把上面的 wx+b 通過 sigmoid 函式對映到(0,1)上,並劃分一個閾值,大於閾值的分為一類,小於等於分為另一類,可以用來處理二分類問題 更進一步:對於N分類問題,則是先得到N組w值不同的 wx+b,然後歸一化,比如用 softmax 函式,最後變成N個類上的概率,可以處理多分類問題

2、Support Vector Regression 和 Support Vector Machine:

    1、SVR:輸出 wx+b,即某個樣本點到分類面的距離,是連續值,所以是迴歸模型

    2、SVM:把這個距離用 sign(·) 函式作用,距離為正(在超平面一側)的樣本點是一類,為負的是另一類,所以是分類模型

3、Naive Bayes 用於分類 和 迴歸:

    1、用於分類:y是離散的類別,所以得到離散的 p(y|x),給定 x ,輸出每個類上的概率

    2、用於迴歸:對上面離散的 p(y|x)求期望 ΣyP(y|x),就得到連續值。但因為此時y本身是連續的值,所以最地道的做法是,得到連續的概率密度函式p(y|x),然後再對y求期望。參考 http://www.cs.waikato.ac.nz/~eibe/pubs/nbr.pdf

4、前饋神經網路(如 CNN 系列) 用於 分類 和 迴歸:

    1、用於迴歸:最後一層有m個神經元,每個神經元輸出一個標量,m個神經元的輸出可以看做向量 v,現全部連到一個神經元上,則這個神經元輸出 wv+b,是一個連續值,可以處理迴歸問題,跟上面 Linear Regression 思想一樣

    2、用於N分類:現在這m個神經元最後連線到 N 個神經元,就有 N 組w值不同的 wv+b,同理可以歸一化(比如用 softmax )變成 N個類上的概率(補充一下,如果不用 softmax,而是每個 wx+b 用一個 sigmoid,就變成多標籤問題,跟多分類的區別在於,樣本可以被打上多個標籤)

5、迴圈神經網路(如 RNN 系列) 用於分類 和 迴歸:

    1、用於迴歸 和 分類: 跟 CNN 類似,輸出層的值 y = wv+b,可做分類可做迴歸,只不過區別在於,RNN 的輸出跟時間有關,即輸出的是 {y(t), y(t+1),...}序列(關於時間序列,見下面的更新)

上面的例子其實都是從 prediction 的角度舉例的,如果從 training 角度來看,分類模型和迴歸模型的目標函式不同,分類常見的是 log loss, hinge loss, 而回歸是 square loss(關於 loss function,又是另一個story了,在此不展開了)

4.2、目的與方法

在資料集完美的情況下,接下來就是根據具體問題選定恰當的模型了。

一種方式是根據有沒有標記樣本考慮。

如果是有標記樣本,可以考慮有監督學習,反之則是無監督學習,兼而有之就看半監督學習是否派的上用場。

無監督學習方法主要提到的是聚類。隨機選定幾個樣本,通過一定的演算法不停迭代直至收斂或者達到停止條件,然後便將所有樣本分成了幾類。

有監督學習而言,根據最終所需要的輸出結果

  • 如果涉及到分類,可以參考的模型有線性迴歸及其非線性擴充套件、決策樹、神經網路、支援向量機SVM、規則學習等
  • 如果是迴歸問題,可以認為是分類的連續形式,方法便是以上模型的變種或擴充套件
  • 如果涉及到概率,可以參考的有神經網路、貝葉斯、最大似然、EM、概率圖、隱馬爾科夫模型、強化學習等

5、訓練及優化

選定了模型,如何訓練和優化也是一個重要問題。 
- 如果要評估訓練集和驗證集的劃分效果,常用的有留出法、交叉驗證法、自助法、模型調參等 
- 如果模型計算時間太長,可以考慮剪枝 
- 如果是過擬合,則可通過引入正則化項來抑制(補償原理) 
- 如果單個模型效果不佳,可以整合多個學習器通過一定策略結合,取長補短(整合學習)

6、應用

模型訓練好之後,自然就是應用,針對未知樣本做預測、推薦等。

最後再簡單談一下神經網路。本書中神經網路僅僅是作為一個章節敘述,包括經典的BP演算法。

但技術書籍的推出總是落後於當前技術發展的。《機器學習》上市的時間,已經是深度學習大行其道了。

多層的神經網路伴隨的往往是大量引數的計算和對大資料的渴求。隨著網際網路的發展,人們產生的資料呈爆炸式增長,這使得大資料集越來越多,同時以NVIDIA為代表推出的基於GPU的機器的計算能力大幅提高,這使得應用多層神經網路解決實際問題成為可能。尤其是在ImageNet競賽中基於卷積神經網路的模型以大幅優勢奪冠後,無論是學術界還是工業界,都投入大量人力財力研究和應用。以前認為人工智慧不可能擊敗圍棋的論點也在今年AlphaGO戰勝李世石不攻自破,AlphaGO賴以成功的基礎就是幾千萬名家的對戰棋譜(資料集)和多層神經網路(模型),當然還包括了強化學習和評估網路等輔助下棋策略。

一個非常有趣的事實是,神經網路在經歷了幾次寒冬後,科學家們為了保證科研成果能夠更大概率的發表,啟用了新名詞深度學習。(以neural network為關鍵詞的paper拒稿率很高)所以從本質上講,深度學習可以簡單的認為是很深層的神經網路。