机器学习概览
什么是機(jī)器學(xué)習(xí)?
廣義概念:
機(jī)器學(xué)習(xí)是讓計(jì)算機(jī)具有學(xué)習(xí)的能力,無需明確的編程?—— 亞瑟·薩繆爾,1959
工程概念:
計(jì)算機(jī)程序利用經(jīng)驗(yàn) E 學(xué)習(xí)任務(wù) T,性能是 P,如果針對(duì)任務(wù) T 的性能 P 隨著經(jīng)驗(yàn) E 不斷增長(zhǎng),則稱為機(jī)器學(xué)習(xí)。 —— 湯姆·米切爾,1997
機(jī)器學(xué)習(xí)系統(tǒng)的類型
機(jī)器學(xué)習(xí)有多種類型,可以根據(jù)以下規(guī)則進(jìn)行分類:
- 是否在人類監(jiān)督下進(jìn)行訓(xùn)練(監(jiān)督、非監(jiān)督、半監(jiān)督和強(qiáng)化學(xué)習(xí))
- 是否可以動(dòng)態(tài)漸進(jìn)學(xué)習(xí)(在線學(xué)習(xí)和批量學(xué)習(xí))
- 它們是否只是簡(jiǎn)單的通過比較新的數(shù)據(jù)點(diǎn)和已知的數(shù)據(jù)點(diǎn),還是在訓(xùn)練數(shù)據(jù)中進(jìn)行模式識(shí)別,以建立一個(gè)預(yù)測(cè)模型,就像科學(xué)家所做的那樣(基于實(shí)力學(xué)習(xí)和基于模型學(xué)習(xí))
監(jiān)督/非監(jiān)督學(xué)習(xí)
機(jī)器學(xué)習(xí)可以根據(jù)訓(xùn)練時(shí)監(jiān)督的量和類型進(jìn)行分類。主要有四類:監(jiān)督、非監(jiān)督、半監(jiān)督和強(qiáng)化學(xué)習(xí)
監(jiān)督學(xué)習(xí)
在監(jiān)督學(xué)習(xí)中,用來訓(xùn)練算法的訓(xùn)練數(shù)據(jù)包含了答案,稱為標(biāo)簽。
圖 1 用于監(jiān)督學(xué)習(xí)(比如垃圾郵件分類)的加了標(biāo)簽的訓(xùn)練集
?一個(gè)典型的監(jiān)督學(xué)習(xí)就是分類,垃圾郵件過濾器就是一個(gè)很好的例子:用很多帶有歸類(垃圾郵件和普通郵件)的郵件樣本進(jìn)行訓(xùn)練,過濾器還能用新郵件進(jìn)行分類。
另一個(gè)典型數(shù)值是預(yù)測(cè)目標(biāo)數(shù)值,例如給出一些特征(里程數(shù)、車程、品牌等等)稱為預(yù)測(cè)值,來預(yù)測(cè)一輛汽車的價(jià)格。這類任務(wù)稱為回歸,要訓(xùn)練在這個(gè)系統(tǒng),你需要給出大量汽車樣本,包括它們的預(yù)測(cè)值和標(biāo)簽(即它們的價(jià)格)
圖2 回歸
?注意:一些回歸算法也可以用來進(jìn)行分類,例如,邏輯回歸常用來進(jìn)行分類,它可以生成一個(gè)歸屬某一類的可能性的值。
下面是一些重要的監(jiān)督性學(xué)習(xí)算法:
- K近鄰算法
- 線性回歸
- 邏輯回歸
- 支持向量機(jī)(SVM)
- 決策樹和隨機(jī)森林
- 神經(jīng)網(wǎng)絡(luò)
?非監(jiān)督學(xué)習(xí)
?訓(xùn)練數(shù)據(jù)沒有加標(biāo)簽。
圖 3 非監(jiān)督學(xué)習(xí)的一個(gè)不加標(biāo)簽的訓(xùn)練集
下面是一些最重要的非監(jiān)督學(xué)習(xí)算法:
- 聚類 (K均值、層次聚類分析、期望最大值)
- 可視化和降維度 (主成分分析、核主成分分析、局部線性嵌入、t-分布鄰域嵌入算法)
- 關(guān)聯(lián)性規(guī)則學(xué)習(xí)(Apriori算法、Eclat算法)
例如,假設(shè)你有一份關(guān)于你的博客訪客的大量數(shù)據(jù)。你想運(yùn)行一個(gè)聚類算法,檢測(cè)相似訪客的分組(圖 1-8)。你不會(huì)告訴算法某個(gè)訪客屬于哪一類:它會(huì)自己找出關(guān)系,無需幫助。例如,算法可能注意到 40% 的訪客是喜歡漫畫書的男性,通常是晚上訪問,20% 是科幻愛好者,他們是在周末訪問等等。如果你使用層次聚類分析,它可能還會(huì)細(xì)分每個(gè)分組為更小的組。這可以幫助你為每個(gè)分組定位博文。
圖4 聚類
?可視化算法也是極佳的非監(jiān)督學(xué)習(xí)案例:給算法大量復(fù)雜的且不加標(biāo)簽的數(shù)據(jù),算法輸出數(shù)據(jù)的2D或3D圖像(圖 1-9)。算法會(huì)試圖保留數(shù)據(jù)的結(jié)構(gòu)(即嘗試保留輸入的獨(dú)立聚類,避免在圖像中重疊),這樣就可以明白數(shù)據(jù)是如何組織起來的,也許還能發(fā)現(xiàn)隱藏的規(guī)律。
?
圖 5 t-SNE 可視化案例,突出了聚類(注:注意動(dòng)物是與汽車分開的,馬和鹿很近、與鳥距離遠(yuǎn),以此類推)
?與此有關(guān)聯(lián)的任務(wù)是降維,降維的目的是簡(jiǎn)化數(shù)據(jù)、但是不能失去大部分信息。做法之一是合并若干相關(guān)的特征。例如,汽車的里程數(shù)和車齡高度相關(guān),降維算法就會(huì)將他們合并為汽車的磨損,叫做特征提取。
注意:在用訓(xùn)練集訓(xùn)練機(jī)器學(xué)習(xí)算法(比如監(jiān)督學(xué)習(xí)算法)時(shí),最好對(duì)訓(xùn)練集進(jìn)行降維。這樣可以運(yùn)行的更快,占用的硬盤和內(nèi)存空間更少,有些情況下性能也更好。
另一個(gè)非常重要的非監(jiān)督任務(wù)時(shí)異常檢測(cè)(anomaly detection) —— 例如,檢測(cè)異常的信用卡轉(zhuǎn)賬以防欺詐,檢測(cè)制造缺陷,或者在訓(xùn)練之前自動(dòng)從訓(xùn)練集中去除異常值,異常監(jiān)測(cè)的系統(tǒng)是用正常值訓(xùn)練的,當(dāng)它碰到一個(gè)新實(shí)例,可以判斷這個(gè)新實(shí)例是正常值還是異常值。
圖6 異常檢測(cè)
?最后,另一個(gè)很重要的非監(jiān)督學(xué)習(xí)是關(guān)聯(lián)規(guī)則學(xué)習(xí),他的目標(biāo)是挖掘大量數(shù)據(jù)以發(fā)現(xiàn)屬性間有趣的關(guān)系。
例如,假設(shè)你擁有一個(gè)超市。在銷售日志上運(yùn)行關(guān)聯(lián)規(guī)則,可能發(fā)現(xiàn)買了燒烤醬和薯片的人也會(huì)買牛排。因此,你可以將這些商品放在一起。
?半監(jiān)督學(xué)習(xí)
?一些算法可以處理部分帶標(biāo)簽的訓(xùn)練數(shù)據(jù),通常是大量不帶標(biāo)簽數(shù)據(jù)加上少量帶標(biāo)簽數(shù)據(jù),這種稱為半監(jiān)督學(xué)習(xí)。
一些圖片存儲(chǔ)服務(wù),比如 Google Photos,是半監(jiān)督學(xué)習(xí)的好例子。一旦你上傳了所有家庭相片,它就能自動(dòng)識(shí)別到人物 A 出現(xiàn)在了相片 1、5、11 中,另一個(gè)人 B 出現(xiàn)在了相片 2、5、7 中。這是算法的非監(jiān)督部分(聚類)。現(xiàn)在系統(tǒng)需要的就是你告訴它這兩個(gè)人是誰。只要給每個(gè)人一個(gè)標(biāo)簽,算法就可以命名每張照片中的每個(gè)人,特別適合搜索照片。
?
圖7 半監(jiān)督學(xué)習(xí)
?多數(shù)半監(jiān)督學(xué)習(xí)算法是半監(jiān)督學(xué)習(xí)和監(jiān)督學(xué)習(xí)的結(jié)合。例如,深度信念網(wǎng)絡(luò)(deep belief networks)是基于被稱為互相疊加的受限玻爾茲曼機(jī)(restricted Boltzmann machines,RBM)的非監(jiān)督組件。RBM 是先用非監(jiān)督方法進(jìn)行訓(xùn)練,再用監(jiān)督學(xué)習(xí)方法對(duì)整個(gè)系統(tǒng)進(jìn)行微調(diào)。
強(qiáng)化學(xué)習(xí)
?強(qiáng)化學(xué)習(xí)非常不同。學(xué)習(xí)系統(tǒng)在這里稱為智能體,可以對(duì)環(huán)境進(jìn)行觀察、選擇和執(zhí)行動(dòng)作(負(fù)獎(jiǎng)勵(lì)是懲罰),然后它必須自己學(xué)習(xí)哪個(gè)是最佳方法(稱為策略),已獲得長(zhǎng)久的最大獎(jiǎng)勵(lì)。策略決定了智能體在給定情況下應(yīng)采取的行動(dòng)。
圖8 強(qiáng)化學(xué)習(xí)
例如,許多機(jī)器人運(yùn)行強(qiáng)化學(xué)習(xí)算法以學(xué)習(xí)如何行走。DeepMind 的 AlphaGo 也是強(qiáng)化學(xué)習(xí)的例子:它在 2016 年三月?lián)魯×耸澜鐕骞谲娎钍朗?#xff08;譯者注:2017 年五月,AlphaGo 又擊敗了世界排名第一的柯潔)。它是通過分析數(shù)百萬盤棋局學(xué)習(xí)制勝策略,然后自己和自己下棋。要注意,在比賽中機(jī)器學(xué)習(xí)是關(guān)閉的;AlphaGo 只是使用它學(xué)會(huì)的策略。
批量和在線學(xué)習(xí)
?另一個(gè)用來分類機(jī)器學(xué)習(xí)的準(zhǔn)則是,它是否能從導(dǎo)入的數(shù)據(jù)流進(jìn)行持續(xù)學(xué)習(xí)。
?批量學(xué)習(xí)
在批量學(xué)習(xí)中,系統(tǒng)不能進(jìn)行持續(xù)學(xué)習(xí):必須用所有可用數(shù)據(jù)進(jìn)行訓(xùn)練。這通常會(huì)占用大量時(shí)間和計(jì)算資源,所以一般是線下做的。首先是進(jìn)行訓(xùn)練,然后部署在生產(chǎn)環(huán)境且停止學(xué)習(xí),它只是使用已經(jīng)學(xué)到的策略。這稱為離線學(xué)習(xí)。
如果你想讓一個(gè)批量學(xué)習(xí)系統(tǒng)明白新數(shù)據(jù)(例如垃圾郵件的新類型),就需要從頭訓(xùn)練一個(gè)系統(tǒng)的新版本,使用全部數(shù)據(jù)集(不僅有新數(shù)據(jù)也有老數(shù)據(jù)),然后停掉老系統(tǒng),換上新系統(tǒng)。
幸運(yùn)的是,訓(xùn)練、評(píng)估、部署一套機(jī)器學(xué)習(xí)的系統(tǒng)的整個(gè)過程可以自動(dòng)進(jìn)行,所以即便是批量學(xué)習(xí)也可以適應(yīng)改變。只要有需要,就可以方便地更新數(shù)據(jù)、訓(xùn)練一個(gè)新版本。
這個(gè)方法很簡(jiǎn)單,通常可以滿足需求,但是用全部數(shù)據(jù)集進(jìn)行訓(xùn)練會(huì)花費(fèi)大量時(shí)間,所以一般是每 24 小時(shí)或每周訓(xùn)練一個(gè)新系統(tǒng)。如果系統(tǒng)需要快速適應(yīng)變化的數(shù)據(jù)(比如,預(yù)測(cè)股價(jià)變化),就需要一個(gè)響應(yīng)更及時(shí)的方案。
另外,用全部數(shù)據(jù)訓(xùn)練需要大量計(jì)算資源(CPU、內(nèi)存空間、磁盤空間、磁盤 I/O、網(wǎng)絡(luò) I/O 等等)。如果你有大量數(shù)據(jù),并讓系統(tǒng)每天自動(dòng)從頭開始訓(xùn)練,就會(huì)開銷很大。如果數(shù)據(jù)量巨大,甚至無法使用批量學(xué)習(xí)算法。
最后,如果你的系統(tǒng)需要自動(dòng)學(xué)習(xí),但是資源有限(比如,一臺(tái)智能手機(jī)或火星車),攜帶大量訓(xùn)練數(shù)據(jù)、每天花費(fèi)數(shù)小時(shí)的大量資源進(jìn)行訓(xùn)練是不實(shí)際的。
幸運(yùn)的是,對(duì)于上面這些情況,還有一個(gè)更佳的方案可以進(jìn)行持續(xù)學(xué)習(xí)。
在線學(xué)習(xí)
在在線學(xué)習(xí)中,用數(shù)據(jù)實(shí)例可以持續(xù)進(jìn)行訓(xùn)練 ,可以一次一個(gè)或一次幾個(gè)實(shí)例(稱為小批量)。每個(gè)學(xué)習(xí)步驟都很快且廉價(jià),系統(tǒng)可以動(dòng)態(tài)學(xué)習(xí)收到的新數(shù)據(jù)。
圖9 在線學(xué)習(xí)
在線學(xué)習(xí)很適合系統(tǒng)接收連續(xù)流的數(shù)據(jù)(比如股票價(jià)格),且需要自動(dòng)對(duì)改變做出調(diào)整,如果計(jì)算資源有限,在線學(xué)習(xí)是一個(gè)不錯(cuò)的方案:一旦在線學(xué)習(xí)系統(tǒng)學(xué)習(xí)了新的數(shù)據(jù)實(shí)例,它就不再需要這些數(shù)據(jù)了,所以扔掉這些數(shù)據(jù)(除非你想滾回到之前的一個(gè)狀態(tài),再次使用數(shù)據(jù))。這樣可以節(jié)省大量的空間。
在線學(xué)習(xí)算法也適合于超大數(shù)據(jù)集(一臺(tái)計(jì)算機(jī)不足以存儲(chǔ)它)上訓(xùn)練系統(tǒng)(這稱作核外學(xué)習(xí),out-of-core learning)。算法每次只加載部分?jǐn)?shù)據(jù),用這些數(shù)據(jù)進(jìn)行訓(xùn)練,然后重復(fù)這個(gè)過程,直到使用完所有的數(shù)據(jù)。
警告:這個(gè)整個(gè)過程通常是離線完成的(即,不在部署的系統(tǒng)上),所以在線學(xué)習(xí)這個(gè)名字會(huì)讓人疑惑。可以把它想成持續(xù)學(xué)習(xí)。
?在線學(xué)習(xí)系統(tǒng)的一個(gè)重要參數(shù)是,它們可以多快地適應(yīng)數(shù)據(jù)的改變:這被稱為學(xué)習(xí)速率。如果你設(shè)定一個(gè)高學(xué)習(xí)速率,系統(tǒng)就可以快速適應(yīng)新數(shù)據(jù),但是也會(huì)快速忘記老數(shù)據(jù)(你可不想讓垃圾郵件過濾器只標(biāo)記最新的垃圾郵件種類)。相反的,如果你設(shè)定的學(xué)習(xí)速率低,系統(tǒng)的惰性就會(huì)強(qiáng):即,它學(xué)的更慢,但對(duì)新數(shù)據(jù)中的噪聲或沒有代表性的數(shù)據(jù)點(diǎn)結(jié)果不那么敏感。
在線學(xué)習(xí)的挑戰(zhàn)之一是,如果壞數(shù)據(jù)被用來進(jìn)行訓(xùn)練,系統(tǒng)的性能就會(huì)逐漸下滑。如果這是一個(gè)部署的系統(tǒng),用戶就會(huì)注意到。例如,壞數(shù)據(jù)可能來自失靈的傳感器或機(jī)器人,或某人向搜索引擎?zhèn)魅肜畔⒁蕴岣咚阉髋琶R獪p小這種風(fēng)險(xiǎn),你需要密集監(jiān)測(cè),如果檢測(cè)到性能下降,要快速關(guān)閉(或是滾回到一個(gè)之前的狀態(tài))。你可能還要監(jiān)測(cè)輸入數(shù)據(jù),對(duì)反常數(shù)據(jù)做出反應(yīng)(比如,使用異常檢測(cè)算法)。
基于實(shí)例VS基于模型學(xué)習(xí)
另一種分類機(jī)器學(xué)習(xí)是判斷它們?nèi)绾芜M(jìn)行推廣的,大多數(shù)機(jī)器學(xué)習(xí)是關(guān)于預(yù)測(cè)的。這意味著給定一定數(shù)量的訓(xùn)練樣本,系統(tǒng)能夠推廣到?jīng)]有見過的樣本。對(duì)訓(xùn)練數(shù)據(jù)集有很好的預(yù)測(cè)還不夠,真正的目標(biāo)是對(duì)新實(shí)例預(yù)測(cè)的性能。有兩種歸納方法:基于實(shí)例和基于模型學(xué)習(xí)。
基于實(shí)例學(xué)習(xí)
也許最簡(jiǎn)單的學(xué)習(xí)形式就是用記憶學(xué)習(xí)。如果用這種方法做一個(gè)垃圾郵件過濾器。只需要標(biāo)記所有和用戶標(biāo)記的垃圾郵件相同的郵件----這個(gè)方法不差,但肯定不是最好的。
不僅能標(biāo)記和已知的垃圾郵件相同的郵件,你的垃圾郵件過濾器也要能標(biāo)記類似垃圾郵件的郵件。這就需要測(cè)量?jī)煞忄]件的相似性。一個(gè)(簡(jiǎn)單的)相似度測(cè)量方法是統(tǒng)計(jì)兩封郵件包含的相同單詞的數(shù)量。如果一封郵件含有許多垃圾郵件中的詞,就會(huì)被標(biāo)記為垃圾郵件。
這被稱作基于實(shí)例學(xué)習(xí):系統(tǒng)先用記憶學(xué)習(xí)案例,然后使用相似度測(cè)量推廣到新的例子
圖10 基于實(shí)例學(xué)習(xí)
基于模型學(xué)習(xí)
另一種從樣本集進(jìn)行歸納的方法,是建立這些樣本的模型,然后使用這個(gè)模型進(jìn)行預(yù)測(cè)。這稱作基于模型學(xué)習(xí)。
圖11 基于模型學(xué)習(xí)
例如,你想知道錢是否能讓人快樂,你從 OECD 網(wǎng)站下載了 Better Life Index 指數(shù)數(shù)據(jù),還從 IMF 下載了人均 GDP 數(shù)據(jù)。表 1-1 展示了摘要。
?
圖12 最佳擬合訓(xùn)練數(shù)據(jù)的線性模型
最后,可以準(zhǔn)備運(yùn)行模型進(jìn)行預(yù)測(cè)了。例如,假如你想知道塞浦路斯人有多幸福,但 OECD 沒有它的數(shù)據(jù)。幸運(yùn)的是,你可以用模型進(jìn)行預(yù)測(cè):查詢?nèi)致匪沟娜司?GDP,為 22587 美元,然后應(yīng)用模型得到生活滿意度,后者的值在4.85 + 22,587 × 4.91 × 10-5 = 5.96左右。
案例 1-1 展示了加載數(shù)據(jù)、準(zhǔn)備、創(chuàng)建散點(diǎn)圖的 Python 代碼,然后訓(xùn)練線性模型并進(jìn)行預(yù)測(cè)。
案例 1-1,使用 Scikit-Learn 訓(xùn)練并運(yùn)行線性模型。
import matplotlib import matplotlib.pyplot as plt import numpy as np import pandas as pd import sklearn # 加載數(shù)據(jù) oecd_bli = pd.read_csv("oecd_bli_2015.csv", thousands=',') gdp_per_capita = pd.read_csv("gdp_per_capita.csv",thousands=',',delimiter='\t',encoding='latin1', na_values="n/a") # 準(zhǔn)備數(shù)據(jù) country_stats = prepare_country_stats(oecd_bli, gdp_per_capita) X = np.c_[country_stats["GDP per capita"]] y = np.c_[country_stats["Life satisfaction"]] # 可視化數(shù)據(jù) country_stats.plot(kind='scatter', x="GDP per capita", y='Life satisfaction') plt.show() # 選擇線性模型 lin_reg_model = sklearn.linear_model.LinearRegression() # 訓(xùn)練模型 lin_reg_model.fit(X, y) # 對(duì)塞浦路斯進(jìn)行預(yù)測(cè) X_new = [[22587]] # 塞浦路斯的人均GDP print(lin_reg_model.predict(X_new)) # outputs [[ 5.96242338]]?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
轉(zhuǎn)載于:https://www.cnblogs.com/qiuyuyu/p/11263137.html
總結(jié)
- 上一篇: 中信腾讯圣斗士星矢手游联名卡年费多少?能
- 下一篇: IPropertySet接口