机器学习入门系列(1)--机器学习概览(上)
最近打算系統學習和整理機器學習方面的知識,會將之前看的 Andrew Ng 在 course 課程筆記以及最近看的書籍《hands-on-ml-with-sklearn-and-tf》結合起來,簡單總結下機器學習的常用算法,由于數學功底有限,所以可能不會也暫時不能過多深入公式和算法原理,所以就做成一個入門系列吧。
這是本系列的第一篇,也是機器學習概覽的上半部分。
1 . 什么是機器學習
簡單的定義,機器學習是通過編程讓計算機從數據中進行學習的科學(和藝術)。
但還有另外兩種定義,一個更廣義的定義:
機器學習是讓計算機具有學習的能力,無需進行明確編程。 —— 亞瑟·薩繆爾,1959
和一個工程性的定義:
計算機程序利用經驗 E 學習任務 T,性能是 P,如果針對任務 T 的性能 P 隨著經驗 E 不斷增長,則稱為機器學習。 —— 湯姆·米切爾,1997
一個簡單的例子,也是經常提及的例子:垃圾郵件過濾器。它可以根據垃圾郵件(比如,用戶標記的垃圾郵件)和普通郵件(非垃圾郵件,也稱作 ham)學習標記垃圾郵件。用來進行學習的樣例稱作訓練集。每個訓練樣例稱作訓練實例(或樣本)。在這個例子中,任務 T 就是標記新郵件是否是垃圾郵件,經驗E是訓練數據,性能 P 需要定義:例如,可以使用正確分類的比例。這個性能指標稱為準確率,通常用在分類任務中。
2. 為什么要用機器學習
為什么要用機器學習方法呢?
原因如下:
- 需要進行大量手工調整或需要擁有長串規則才能解決的問題:機器學習算法通常可以簡化代碼、提高性能。
- 問題復雜,傳統方法難以解決:最好的機器學習方法可以找到解決方案。
- 環境有波動:機器學習算法可以適應新數據。
- 洞察復雜問題和大量數據
一些機器學習的應用例子:
- 數據挖掘
- 一些無法通過手動編程來編寫的應用:如自然語言處理,計算機視覺、語音識別等
- 一些自助式的程序:如推薦系統等
- 理解人類是如何學習的
3. 機器學習系統的類型
機器學習有多種類型,可以根據如下規則進行分類:
- 是否在人類監督下進行訓練(監督,非監督,半監督和強化學習)
- 是否可以動態漸進學習(在線學習 vs批量學習)
- 它們是否只是通過簡單地比較新的數據點和已知的數據點,或者在訓練數據中進行模式識別,以建立一個預測模型,就像科學家所做的那樣(基于實例學習 vs基于模型學習)
3.1 監督/非監督學習
第一種分類機器學習的方法是可以根據訓練時監督的量和類型進行分類。主要有四類:監督學習、非監督學習、半監督學習和強化學習。
3.1.1 監督學習
監督學習,顧名思義就是帶有監督的學習,而監督就是體現在訓練數據都是有標簽的,所有在訓練模型的時候可以根據數據的真實標簽不斷調整模型,從而得到一個性能更好的模型。
監督學習主要有兩個常見的典型的任務–分類和回歸。
3.1.1.1 分類
分類問題主要就是預測新數據的類別問題。例如上文提到的垃圾郵件過濾器就是一個二分類問題,將郵件分為垃圾郵件還是正常的郵件,如下圖所示。
3.1.1.2 回歸
回歸問題主要是預測目標數值。比如給定預測房價的問題,給定一些特征,如房子大小、房間數量、地理位置等等,然后預測房子的價格。如下圖所示:
注意,一些回歸算法也可以用來進行分類,反之亦然。例如,邏輯回歸通常用來進行分類,它可以生成一屬于每個類別的概率值,然后選擇最大概率的類別作為預測的類別。
常用的監督學習算法有:
- K近鄰算法
- 線性回歸
- 邏輯回歸
- 支持向量機(SVM)
- 決策樹和隨機森林
- 神經網絡
3.1.2 非監督學習
和監督學習相反,非監督學習就是采用沒有標簽的數據集。
非監督主要有四個典型的任務,分別是聚類、降維、異常檢測和關聯規則學習。
3.1.2.1. 聚類
聚類就是將數據根據一定的規則分成多個類,通常是采用相似性。比如對于博客訪客的聚類,通過聚類算法,檢測相似性訪客的分組,如下圖所示。不需要告訴算法訪客是哪個類別,它會自動根據訪客的屬性找到相互間的關系,比如它可能找出訪客的職業關系,將訪客分為有 40% 的是上班族,有 50% 的是學生,或者對于技術博客,可能就是根據開發方向,劃分為前端、后臺、移動開發、人工智能等等。甚至,如果采用層次聚類分析算法,還可以繼續對上述的分類進行更加詳細的劃分。這種做法可以幫助博主知道自己博客的主要群體是誰,更好規劃自己博客發表的文章應該以什么方向為主。
可視化算法也是極佳的非監督學習案例:給算法大量復雜的且不加標簽的數據,算法輸出數據的2D或3D圖像。如下圖所示,算法會試圖保留數據的結構(即嘗試保留輸入的獨立聚類,避免在圖像中重疊),這樣就可以明白數據是如何組織起來的,也許還能發現隱藏的規律。
3.1.2.2. 降維
降維的目的是簡化數據、但是不能失去大部分信息。做法之一是合并若干相關的特征。例如,汽車的里程數與車齡高度相關,降維算法就會將它們合并成一個,表示汽車的磨損。這叫做特征提取。
此外,在采用機器學習算法訓練的時候,可以對訓練集進行降維,這樣有助于提高訓練速度,降低占用的硬盤和內存空間,有時候也能提高算法的性能,但必須選擇合適的降維算法,否則性能實際上是很有可能會下降的。
3.1.2.3. 異常檢測
另一個重要的非監督任務是異常檢測(anomaly detection)。例如,檢測異常的信用卡轉賬以防欺詐,檢測制造缺陷,或者在訓練之前自動從訓練數據集去除異常值。異常檢測的系統使用正常值訓練的,當它碰到一個新實例,它可以判斷這個新實例是像正常值還是異常值。
3.1.2.4. 關聯規則學習
最后,另一個常見的非監督任務是關聯規則學習,它的目標是挖掘大量數據以發現屬性間有趣的關系。例如,假設你擁有一個超市。在銷售日志上運行關聯規則,可能發現買了燒烤醬和薯片的人也會買牛排。因此,你可以將這些商品放在一起。
下面是一些最重要的非監督學習算法:
- K 均值
- 層次聚類分析(Hierarchical Cluster Analysis, HCA)
- 期望最大值
- 主成分分析(Principal Component Analysis, PCA)
- 核主成分分析
- 局部線性嵌入(Locally-Linear Embedding, LLE)
- t-分布鄰域嵌入算法(t-distributed Stochastic Neighbor Embedding, t-SNE)
- Apriori 算法
- Eclat算法
3.1.3 半監督學習
一些算法可以處理部分帶標簽的訓練數據,通常是大量不帶標簽數據加上小部分帶標簽數據。這稱作半監督學習。如下圖所示,圖中灰色圓點表示沒有標簽的數據,僅有幾個三角形和正方形點表示帶標簽的數據。
多數半監督學習算法是非監督和監督算法的結合。例如,深度信念網絡(deep belief networks)是基于被稱為互相疊加的受限玻爾茲曼機(restricted Boltzmann machines,RBM)的非監督組件。RBM 是先用非監督方法進行訓練,再用監督學習方法進行整個系統微調。
半監督學習的示例,如一些圖片存儲服務,比如 Google Photos,是半監督學習的好例子。一旦你上傳了所有家庭相片,它就能自動識別相同的人 A 出現了相片1、5、11 中,另一個人 B 出現在了相片 2、5、7 中。這是算法的非監督部分(聚類)。現在系統需要的就是你告訴這兩個人是誰。只要給每個人一個標簽,算法就可以命名每張照片中的每個人,特別適合搜索照片。
3.1.4強化學習
強化學習和上述三種學習問題是非常不同的。學習系統在這里被稱為智能體( agent),可以對環境進行觀察,選擇和執行動作,獲得獎勵(負獎勵是懲罰,見下圖)。然后它必須自己學習哪個是最佳方法(稱為策略,policy),以得到長久的最大獎勵。策略決定了智能體在給定情況下應該采取的行動 。
目前強化學習的應用還不算非常廣,特別是結合了深度學習的強化學習,主要是應用在機器人方面,當然最著名的一個應用就是 DeepMind 的 AlphaGo 了,它是通過分析數百萬盤棋局學習制勝策略,然后自己和自己下棋。要注意,在比賽中機器學習是關閉的;AlphaGo 只是使用它學會的策略。
3.2 批量和在線學習
第二種分類機器學習的準則是,它是否能從導入的數據流進行持續學習。也就是如果導入的是持續的數據流,機器學習算法能否在不斷采用新數據來訓練已經訓練好的模型,并且新的模型對新舊數據都還有很好的性能。
3.2.1 批量學習
在批量學習中,系統不能進行持續學習:必須用所有可用數據進行訓練。這通常會占用大量時間和計算資源,所以一般是線下做的。首先是進行訓練,然后部署在生產環境且停止學習,它只是使用已經學到的策略。這稱為離線學習。
對于批量學習算法來說,當獲取到新數據的時候,就需要重新重頭訓練整個數據集,然后更新模型,如果是應用該算法系統,那就相當于需要更新系統,需要停掉舊版本的系統,重新上線新版本的系統。
當然,一般訓練、評估、部署一套機器學習的系統的整個過程可以自動進行,所以即便是批量學習也可以適應改變。只要有需要,就可以方便地更新數據、訓練一個新版本。并且對于更新周期,可以選擇每 24 小時或者每周更新一次。
但是,批量學習還是存在下面的缺點:
3.2.2 在線學習
批量學習的缺陷和問題可以通過采用在線學習算法來解決。
在在線學習中,是用數據實例持續地進行訓練,可以一次一個或一次幾個實例(稱為小批量)。每個學習步驟都很快且廉價,所以系統可以動態地學習到達的新數據。
在線學習雖然名字帶著在線兩個字,但是實際上它的訓練過程也是離線的,因此應該說是持續學習或者增量學習。
在線學習有下面幾個優點:
在線學習也存在兩個挑戰:
3.3 基于實例 vs 基于模型學習
第三種分類機器學習的方法是判斷它們是如何進行歸納推廣的。大多機器學習任務是關于預測的。這意味著給定一定數量的訓練樣本,系統需要能推廣到之前沒見到過的樣本。對訓練數據集有很好的性能還不夠,真正的目標是對新實例預測的性能。
有兩種主要的歸納方法:基于實例學習和基于模型學習。
3.3.1 基于實例學習
基于實例學習是系統先用記憶學習案例,然后使用相似度測量推廣到新的例子,如下圖所示:
這種學習算法可以說是機器學習中最簡單的算法了,它實際上就是采用存儲的數據集進行分類或者回歸,典型的算法就是 KNN 算法,即 K 近鄰算法,它就是將新的輸入數據和已經保存的訓練數據采用相似性度量(一般采用歐式距離)得到最近的 K 個訓練樣本,并采用 K 個訓練樣本中類別出現次數最多的類別作為預測的結果。
所以,這種算法的缺點就比較明顯了:
- 一是對存儲空間的需求很大,需要占用的空間直接取決于實例數量的大小;
- 二是運行時間比較慢,因為需要需要與已知的實例進行比對。
3.3.2 基于模型學習
和基于實例學習相反的就是基于模型學習:建立這些樣本的模型,然后使用這個模型進行預測。如下圖所示:
基于模型學習算法的流程一般如下所示:
- 研究數據。先對數據進行分析,這可能包含清洗數據、特征篩選、特征組合等等
- 選擇模型。選擇合適的模型,從簡單的線性回歸、邏輯回歸,到慢慢復雜的隨機森林、集成學習,甚至深度學習的卷積神經網絡模型等等
- 用訓練數據進行訓練。也就是尋找最適合算法模型的參數,使得代價函數取得最小值。
- 使用模型對新案例進行預測(這稱作推斷)。預測結果非常好,就能上線系統;如果不好,就需要進行錯誤分析,問題出現在哪里,是數據問題還是模型問題,找到問題,然后繼續重復這個流程。
4. 小結
最后,總結下:
以上就是本文的主要內容和總結,歡迎關注我的微信公眾號–機器學習與計算機視覺或者掃描下方的二維碼,和我分享你的建議和看法,指正文章中可能存在的錯誤,大家一起交流,學習和進步!
創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎總結
以上是生活随笔為你收集整理的机器学习入门系列(1)--机器学习概览(上)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: [Asp.Net Core]Sessio
- 下一篇: 电脑CPU选购的几个指标