<EYD與機器學習>一:The Machine Learning Landscape

各位知乎兒大家好,從這篇文章開始,我們「EYD」三人組將和大家一起分享學習關於機器學習的基礎知識以及新的研究成果。在這一系列文章的開始階段,我們會以《Hands-on Machine Learning with Scikit-Learn and TensorFlow》(後面簡稱為HMLST)這本書為主線,和大家一同學習機器學習的基礎知識以及『Scikit-learn』和『TensorFlow』這兩個框架。在學習這本書的同時,我們會輔以各類演算法的專門知識以及用Python編寫的實際常式。

之所以選用HMLST這本書,是因為筆者在讀過之後深感這本書語言明了,幾乎只羅列了必須的關鍵公式。同時,與其他的理論書籍不同,該書的作者從實際操作和工程的角度來講解各類演算法的實現、框架的應用以及面對各類任務時要注意的問題。此外,作者將書中的源代碼以及課後問題的答案都放在GitHub上以供參考

ageron/handson-ml?

github.com圖標

現在深度學習依舊火熱,身邊的一些人忽視了傳統機器學習的演算法,更有甚者認為傳統的演算法和框架沒有必要學習,我覺得這是十分激進的。傳統演算法在很多問題上依舊有很好的表現,同時具有深度學習所不具有的很好的可解釋性。當然,我不排斥深度學習,並且也在這個方向努力著。因此,我們利用HMLST這本書中所講的『Scikit-learn』和『TensorFlow』這兩個框架分別實現傳統的機器學習演算法和深度學習演算法。

在和大家共同學習HMLST這本書的過程中,我們還會不定期的發表一些我們對當前最新的機器學習領域的事件已經先進成果的看法,希望能夠和大家一起討論。下面我們開始學習HMLST這本書第一章的內容,是對機器學習領域的總覽。

第一章:The Machine Learning Landscape

1.1 什麼是機器學習

Tom Mitchell 在1997年給出了一個比較形式化的定義:『A computer program is said to learn from experience E with respect to some task T and some performance measure P, if its performance on T, as measured by P, improves with experience E. 』

如周志華老師在《機器學習》一書中所譯:「假設用 P 來評估計算機程序在某任務類 T 上的性能,若一個程序通過利用經驗E 在 T 中任務豐獲得了性能改善,則我們就說關於T 和 P , 該程序對 E 進行了學習」。我的理解是機器學習的目標是從已有的數據中學習到模型,利用『經驗』來改善系統的性能。

1.2 機器學習系統的類型

1.2.1 分類標準

這裡列出了書中的三種分類標準,利用這三個標準可以對已有的演算法進行分類,依據不同的標準同一演算法可能會有不同的標籤。

(1)是否在訓練時需要人為監督(監督學習、無監督學習、半監督學習和強化學習)

(2)是否在運行的同時進行增量學習(在線學習和批量學習)

(3)是簡單的基於和已有數據的比較得出結果還是通過探究數據內部模式並建立預測模型 得出結果(基於樣本的學習和基於模型的學習)

1.2.2 監督學習與無監督學習

監督學習(supervised learning)

監督學習-郵件分類系統(HMLST figure 1-5)

監督學習-郵件分類系統(HMLST figure 1-5)

如圖(HMLST figure 1-5)所示,監督學習任務中的訓練集數據都是有標籤的,所解決的任務類型可以為分類或者回歸。其中書中主要涉及的監督學習演算法有:

? k-Nearest Neighbors(K近鄰演算法)

? Linear Regression(線性回歸)

? Logistic Regression(邏輯回歸)

? Support Vector Machines (SVMs,支持向量機)

? Decision Trees and Random Forests(決策樹與隨機森林)

? Neural networks (神經網路)

無監督學習(Unsupervised learning )

無監督學習-聚類(HMLST figure 1-8)

無監督學習-聚類(HMLST figure 1-8)

如圖(HMLST figure 1-8)所示,無監督學習任務中的訓練集數據都是沒有標籤的,其中書中主要涉及的無監督學習演算法有:

? Clustering(聚類)

— k-Means(K均值演算法)

— Hierarchical Cluster Analysis (HCA,層次聚類分析)

— Expectation Maximization(EM,期望最大化演算法)

? Visualization and dimensionality reduction(可視化以及降維)

— Principal Component Analysis (PCA,主成分分析)

— Kernel PCA(核PCA)

— Locally-Linear Embedding (LLE,局部線性嵌入)

— t-distributed Stochastic Neighbor Embedding (t-SNE,t-分布鄰域嵌入演算法)

? Association rule learning(關聯規則)

— Apriori

— Eclat

半監督學習(Semisupervised learning )

半監督學習數據(HMLST figure 1-11)

半監督學習數據(HMLST figure 1-11)

如圖(HMLST figure 1-11)所示,半監督學習任務中的訓練集數據少部分有標籤,而大部分是無標籤的。半監督學習演算法經常和監督學習演算法以及無監督學習演算法聯合使用。

強化學習(Reinforcement Learning )

強化學習系統(HMLST figure 1-12)

強化學習系統(HMLST figure 1-12)

如圖(HMLST figure 1-12)所示,強化學習系統(agent)能夠觀察外部環境,並依此選擇和執行動作,最後會得到獎賞(rewards)或者懲罰(penalties,也就是負的rewards),它必須能夠自己學會什麼才是最好的策略(policy),使自己能夠隨著時間推移得到最多的獎賞(rewards)。而策略決定了當面對給定的情景時系統(agent)會採取什麼行動。

1.2.3 批量學習與在線學習

批量學習(Batch learning )

批量學習必須由當前可用的所有數據來訓練,這一過程會十分耗時並且佔用大量計算資源,因此是離線操作的。假如批量學習系統訓練完成,那麼在運行時它只會應用訓練所學到的功能。假如在模型運行後,想利用新數據對模型進行補充訓練,那麼必須停止運行並結合原有的數據一起訓練,不能只根據新數據訓練。對於一個有生命力的系統而言,周期性的根據新數據進行更新是十分必要的,哪怕要以短暫的停止運行為代價。

在線學習(online learning)

在線學習系統(HMLST figure 1-13)

在線學習系統(HMLST figure 1-13)

如圖(HMLST figure 1-13)所示,增量地訓練系統,數據以序列的形式進入系統,而不是一起或者小批量的進入。在線學習因為有實時性的要求,所以需要每一步的訓練都能快速經濟的完成。在線學習不僅僅可以解決以數據流訓練的任務,當你的計算資源有限時也可以嘗試在線學習演算法,因為大部分在線學習演算法一旦使用某個樣例進行學習後就可以將它拋棄,這樣可以大大的減少數據的存儲量。當面臨海量數據的時候,在線學習也是核外學習(out-of-core learning )的好選擇。

1.2.4 基於樣本學習與基於模型學習

基於樣本學習(instance-based learning)

基於樣本的學習系統(HMLST figure 1-15)

如圖(HMLST figure 1-15)所示,基於樣本的學習系統在分類的過程中不依賴參數化的模型,而是依據某一樣本與其他樣本的相似度來判斷類別,當處理某一個新的樣本時只需重複相同的度量操作。

基於模型學習(model-based learning)

基於模型的學習系統(HMLST figure 1-16)

如圖(HMLST figure 1-16)所示,基於模型的學習系統在已有的數據集上事先學習好一個預測模型,之後在處理新的樣本時只需根據該模型做出預測結果。

1.3 機器學習的難點

1.3.1 訓練數據的不足

數據量對演算法精度的影響(HMLST figure 1-20)

如圖(HMLST figure 1-21)所示,(可以認為藍色點為訓練數據,紅的點為測試數據)當採樣得到的訓練數據不具有很好的無偏性時,訓練好的模型在應用時性能就不會很好。一般情況下,演算法的研究都會假設訓練數據和實際要解決的任務中的數據是獨立同分布的,那麼這也就要求訓練集足夠大,並且是無偏採樣的,這樣才會得到很好的泛化性能。構建一個精度很高的分類器。數據不足可能會經常出現,尤其是使用監督學習演算法時,帶標記的數據是十分珍貴的,並且對數據進行標記是一件費時費力的事情,所以才有「演算法時引擎,數據是石油的說法」。不過,隨著機器學習領域的蓬勃發展,更多的方法被提出來解決數據不足的問題,例如各種生成式對抗網路、遷移學習演算法等。

1.3.2 訓練數據不具有代表性

數據有偏性對模型的影響(HMLST figure 1-21)

如圖(HMLST figure 1-21)所示,(可以認為藍色點為訓練數據,紅的點為測試數據)當採樣得到的訓練數據不具有很好的無偏性時,訓練好的模型在應用時性能就不會很好。一般情況下,演算法的研究都會假設訓練數據和實際要解決的任務中的數據是獨立同分布的,那麼這也就要求訓練集足夠大,並且是無偏採樣的,這樣才會得到很好的泛化性能。

1.3.3 數據質量不高

在實際動手時,你會發現並不是所有的問題都像理論那樣理想,不是所有的數據都像已經構建好的數據集一樣完善。經常會碰到各種質量差的數據,這不是演算法能夠完全彌補的問題,所以肯需要很多時間來完善數據,例如:

(1)假設數據集中有一些明顯的極端值,那麼可能你需要有選擇的忽略它們,或者對它們進行一些特殊處理。

(2)假設一些數據出現了特徵缺失(經常出現),那麼你需要判斷是否需要拋棄這些數據,或者補充缺失值,還是分別訓練兩個模型來分別應對加入和拋棄這些數據的情況。

1.3.4 引入無關特徵

特徵工程在搭建一個機器學習系統的過程中起著舉足輕重的作用,筆者曾在一個小項目中深有體會,在整個過程中並沒有將所有的精力放在演算法的選取、訓練上,而是有超過一半的時間花在了收集數據、整理數據和搭建特徵工程上。如HMLST書中所言,特徵工程一般涉及三個方面:

(1)特徵選擇:在已有的特徵中選擇最有用的、相關性最高的那些特徵;

(2)特徵提取:對已有的特徵進行處理,例如特徵融合、降維等來提取出更加有用的特徵;

(3)創造新特徵:通過加入新的數據來引入新的特徵。

1.3.4 模型過擬合

過擬合-多項式回歸模型(HMLST figure 1-22)

如圖(HMLST figure 1-22)所示,當我們想利用已有數據(藍點)構建一個回歸預測模型時,我們肯定希望模型的誤差越小越好。但是,圖中使用高階多項式來擬合數據是十分不恰當的。圖中的模型模型複雜的很高,容易受訓練數據的雜訊和極端值影響,同時泛化能力差。過擬合可以理解為當前模型對於目前的訓練集過於「執著」,在訓練集上力求誤差極小,那麼帶來的就是在測試集上誤差偏大。當然,我們希望模型在訓練集和測試集上表現都較好,那麼就需要做出均衡,對過擬合的模型進行一些處理,例如:

(1)簡化模型,降低模型的複雜度,一般而言,越複雜的模型越容易過擬合。減少模型參數,減少訓練集中相關度低的特徵或者引入正則化項都會幫助簡化模型。

(2)收集更多的訓練數據,如上面所言,當數據很多時,模型就不會受到少量有偏數據的影響。

(3)減少訓練集中的雜訊,清除極端值。

通過正則化降低過擬合(HMLST figure 1-23)

如圖(HMLST figure 1-23)所示,我們可以直觀的判斷出在部分數據上引入正則化的訓練模型更好。

1.3.5 模型欠擬合

與模型過擬合相反,欠擬合可以理解為模型連訓練集的信息都沒有挖掘完全,帶來的是在訓練集和測試集上的誤差都比較大。出現欠擬合的情況一般是因為模型過於簡單,沒有很強的挖掘能力,可以採取以下幾種措施:

(1)選擇更加複雜、能力更強的模型(帶有更多參數);

(2)完善特徵工程,引入更多更有效的特徵;

(3)減少模型的限制和正則化。

1.4 測試集與驗證集

測試集

實踐出真知,當我們的模型訓練好了的時候,只有將它投入到實際的問題中才能檢驗它的性能,但是這是很有風險的。假如你的模型過擬合了,在訓練時表現很好,然而實際使用時卻表現很差。這時,測試集的作用就體現出來了。一般情況下,當我們拿到數據時,我們都會將數據分為訓練集和測試集,訓練集用於訓練模型,測試集用於檢驗模型的性能,模型在測試集上的誤差被稱為泛化誤差。泛化誤差和訓練誤差結合分析,可以得到模型現在有哪些不足,比如出現了過擬合還是欠擬合

這裡有一些經驗值用於測試集與訓練集的比例,在周志華老師的《機器學習》中測試集與訓練集的比例是3:7,在HMLST書中,作者給出的比例是2:8。在這裡,筆者認為這兩種比例大家只需參考,不一定非要遵守,我認為任務的數據量越大,那麼訓練集的比例越高,比如一共有100000個樣本,那麼可能只需拿出0.5%,也就是5000個樣本作為測試集。

驗證集

或許你認為有了訓練集和測試集就可以了,但是問題又來了,我們會利用訓練集來訓練模型,之後在測試集上來看模型的性能,假如性能不好的話就回去繼續對模型進行完善,之後再重複這一過程,直到得到很好的泛化性能。但是在這一過程中,測試集已經間接成為了訓練集的一部分,因為在訓練過程中,目標變為了讓模型在訓練集和測試集上表現良好,那麼模型很可能在訓練集和測試集共同組成的數據集上過擬合,而驗證集就是來解決這個問題的。

在留出測試集的同時,還要留出一部分作為驗證集。在訓練集上訓練模型,通過在驗證集上的表現選擇出最佳的參數,最後在測試集上做最後一次的測試。最為常見的方法就是交叉驗證(cross-validation ):將訓練集劃分為n等份,並選擇不同的組合作為訓練集和驗證集,在不同的組合上分別訓練和驗證模型,最後選擇性能最好的模型。

1.5 總結

以上為本章內容,這一章的內容主要是機器學習領域的一些基礎概念,同時還有一些方法和技巧。

第一次執筆,深感筆力不足,但還是希望能和大家分享知識和見解,歡迎大家批評指正以及向專欄投稿。

——Double_D 編輯

<EYD與機器學習>專欄成員介紹:

Eva Dan ,waY Double_D 三人現就讀於HUST,研究生階段,研究方向為機器學習,深度學習,遷移學習。


推薦閱讀:

TAG:機器學習 | 深度學習DeepLearning | 數據挖掘 |