- 機(jī)器學(xué)習(xí)實(shí)戰(zhàn):基于Scikit-Learn、Keras和TensorFlow(原書第3版)
- (法)奧雷利安·杰龍
- 7372字
- 2024-09-11 17:33:00
1.4 機(jī)器學(xué)習(xí)系統(tǒng)的類型
現(xiàn)有的機(jī)器學(xué)習(xí)系統(tǒng)類型繁多,為便于理解,我們根據(jù)以下標(biāo)準(zhǔn)將它們分為大類:
· 它們?cè)谟?xùn)練期間是如何受到監(jiān)督(監(jiān)督、無(wú)監(jiān)督、半監(jiān)督、自我監(jiān)督等)的。
· 它們是否可以即時(shí)增量地學(xué)習(xí)(在線學(xué)習(xí)與批量學(xué)習(xí))。
· 它們是通過(guò)簡(jiǎn)單地將新數(shù)據(jù)與已知數(shù)據(jù)進(jìn)行比較來(lái)工作,還是通過(guò)檢測(cè)訓(xùn)練數(shù)據(jù)中的模式并建立預(yù)測(cè)模型來(lái)工作,就像科學(xué)家所做的那樣(基于實(shí)例的學(xué)習(xí)與基于模型的學(xué)習(xí))。
這些標(biāo)準(zhǔn)不是唯一的,你可以按照自己喜歡的方式將其任意組合。例如,最先進(jìn)的垃圾郵件過(guò)濾器可以使用深度神經(jīng)網(wǎng)絡(luò)模型來(lái)在線即時(shí)學(xué)習(xí),該模型可以使用人類提供的垃圾郵件和非垃圾郵件樣例進(jìn)行訓(xùn)練。這使它成為一個(gè)在線的、基于模型的監(jiān)督學(xué)習(xí)系統(tǒng)。
讓我們更仔細(xì)地看看這些標(biāo)準(zhǔn)。
1.4.1 訓(xùn)練監(jiān)督
根據(jù)訓(xùn)練期間得到的監(jiān)督數(shù)量和監(jiān)督類型,可以將機(jī)器學(xué)習(xí)系統(tǒng)分為以下五個(gè)主要類別:監(jiān)督學(xué)習(xí)、無(wú)監(jiān)督學(xué)習(xí)、自監(jiān)督學(xué)習(xí)、半監(jiān)督學(xué)習(xí)和強(qiáng)化學(xué)習(xí)。
監(jiān)督學(xué)習(xí)
在監(jiān)督學(xué)習(xí)中,提供給包含所需解決方案的算法的訓(xùn)練集,稱為標(biāo)簽(見(jiàn)圖1-5)。

圖1-5:用于垃圾郵件分類的已標(biāo)記訓(xùn)練集(監(jiān)督學(xué)習(xí)的示例)
典型的監(jiān)督學(xué)習(xí)任務(wù)是分類。垃圾郵件過(guò)濾器就是一個(gè)很好的示例:它用許多電子郵件及其類別(垃圾郵件或非垃圾郵件)來(lái)訓(xùn)練,并且它必須學(xué)習(xí)如何對(duì)新電子郵件進(jìn)行分類。
另一個(gè)典型的任務(wù)是在給定一組特征(里程、年齡、品牌等)的情況下來(lái)預(yù)測(cè)目標(biāo)數(shù)值,例如汽車的價(jià)格。這種任務(wù)稱為回歸(見(jiàn)圖1-6)[1]。要訓(xùn)練這個(gè)系統(tǒng),你需要給它許多汽車樣例,包括它們的特征和目標(biāo)(即它們的價(jià)格)。
請(qǐng)注意,某些回歸模型也可用于分類,反之亦然。例如,邏輯回歸通常用于分類,因?yàn)樗梢暂敵鰧?duì)應(yīng)于屬于給定類別的概率值(例如,20%的概率是垃圾郵件)。

圖1-6:一個(gè)回歸問(wèn)題——給定輸入特征的情況下預(yù)測(cè)值(通常有多個(gè)輸入特征,有時(shí)也有多個(gè)輸出值)
目標(biāo)(target)和標(biāo)簽(label)這兩個(gè)詞在監(jiān)督學(xué)習(xí)中通常被視為同義詞,但目標(biāo)在回歸任務(wù)中更常見(jiàn),而標(biāo)簽在分類任務(wù)中更常見(jiàn)。此外,特征有時(shí)也稱為預(yù)測(cè)變量或?qū)傩浴_@些術(shù)語(yǔ)可能指單個(gè)樣本(例如,“這輛車的里程特征是等于15 000”)或所有樣本(例如,“里程特征與價(jià)格密切相關(guān)”)。
無(wú)監(jiān)督學(xué)習(xí)
在無(wú)監(jiān)督學(xué)習(xí)中,正如你可能猜到的那樣,訓(xùn)練數(shù)據(jù)是未標(biāo)記的(見(jiàn)圖1-7)。系統(tǒng)試圖在沒(méi)有老師的情況下進(jìn)行學(xué)習(xí)。

圖1-7:用于無(wú)監(jiān)督學(xué)習(xí)的無(wú)標(biāo)簽訓(xùn)練集
例如,假設(shè)你有大量關(guān)于博客訪客的數(shù)據(jù)。你可能想要運(yùn)行聚類算法來(lái)檢測(cè)相似訪客的分組(見(jiàn)圖1-8)。你不會(huì)告訴算法訪客屬于哪個(gè)組:它無(wú)須你的幫助即可找到這種關(guān)聯(lián)。例如,它可能會(huì)注意到40%的訪客是喜歡漫畫書的青少年,通常在放學(xué)后閱讀你的博客,而20%的訪客是喜歡科幻小說(shuō)的成年人,并通常在周末訪問(wèn)。如果你使用層次聚類算法,它還可以將每個(gè)組細(xì)分為更小的組。這可以幫助你針對(duì)不同的組來(lái)發(fā)布博客內(nèi)容。

圖1-8:聚類
可視化算法也是無(wú)監(jiān)督學(xué)習(xí)的一個(gè)好示例:你提供大量復(fù)雜且未標(biāo)記的數(shù)據(jù),算法輕松繪制輸出2D或3D的數(shù)據(jù)表示(見(jiàn)圖1-9)。這些算法試圖盡可能多地保留結(jié)構(gòu)(例如,試圖防止輸入空間中的單獨(dú)集群在可視化中重疊),以便于你可以了解數(shù)據(jù)的組織方式,并可能識(shí)別出一些未知的模式。

圖1-9:突出顯示語(yǔ)義集群的t-SNE可視化示例[2]
與之相關(guān)的一個(gè)任務(wù)是降維,其目標(biāo)是在不丟失太多信息的情況下簡(jiǎn)化數(shù)據(jù)。一種方法是將幾個(gè)相關(guān)的特征合并為一個(gè)。例如,一輛汽車的行駛里程可能與其車齡有很強(qiáng)的相關(guān)性,因此降維算法會(huì)將它們合并為一個(gè)代表汽車磨損的特征。這稱為特征提取。
在將訓(xùn)練數(shù)據(jù)提供給另一個(gè)機(jī)器學(xué)習(xí)算法(例如監(jiān)督學(xué)習(xí)算法)之前,先使用降維算法減少訓(xùn)練數(shù)據(jù)的維度通常是個(gè)好主意。算法會(huì)運(yùn)行得更快,數(shù)據(jù)會(huì)占用更少的磁盤和內(nèi)存空間,并且在某些情況下,它還可能表現(xiàn)得更好。
另一個(gè)重要的無(wú)監(jiān)督任務(wù)是異常檢測(cè),例如,檢測(cè)異常的信用卡交易來(lái)防止欺詐、發(fā)現(xiàn)制造缺陷,或者在將數(shù)據(jù)集提供給另一個(gè)學(xué)習(xí)算法之前自動(dòng)從數(shù)據(jù)集中刪除異常值。系統(tǒng)在訓(xùn)練期間主要使用正常實(shí)例,因此它會(huì)學(xué)習(xí)識(shí)別它們。然后,當(dāng)看到一個(gè)新實(shí)例時(shí),系統(tǒng)可以判斷這個(gè)新實(shí)例看起來(lái)是正常的還是異常的(見(jiàn)圖1-10)。一個(gè)非常類似的任務(wù)是新穎性檢測(cè),它旨在檢測(cè)看起來(lái)與訓(xùn)練集中所有實(shí)例不同的新實(shí)例。這需要有一個(gè)非常“干凈”的訓(xùn)練集,沒(méi)有任何你希望算法能夠檢測(cè)到的實(shí)例。例如,如果你有幾千張狗的照片,其中1%代表吉娃娃犬,那么新穎性檢測(cè)算法不應(yīng)將吉娃娃犬的新圖片視為新穎。另外,異常檢測(cè)算法可能認(rèn)為這些狗非常稀有并且與其他狗如此不同,以至于可能會(huì)將它們歸類為異常(沒(méi)有對(duì)吉娃娃犬不敬的意思)。

圖1-10:異常檢測(cè)
最后,還有一個(gè)常見(jiàn)的無(wú)監(jiān)督任務(wù)是關(guān)聯(lián)規(guī)則學(xué)習(xí),其目標(biāo)是挖掘大量數(shù)據(jù)并發(fā)現(xiàn)屬性之間有趣的關(guān)系。例如,假設(shè)你開(kāi)了一家超市,在銷售日志上運(yùn)行關(guān)聯(lián)規(guī)則可能會(huì)發(fā)現(xiàn)購(gòu)買燒烤醬和薯片的人也傾向于購(gòu)買牛排。因此,你可能希望將這幾樣商品擺放得更近一些。
半監(jiān)督學(xué)習(xí)
由于標(biāo)記數(shù)據(jù)通常既耗時(shí)又昂貴,因此你通常會(huì)有很多未標(biāo)記的實(shí)例而很少有已標(biāo)記的實(shí)例。一些算法可以處理一部分已標(biāo)記的數(shù)據(jù)。這稱為半監(jiān)督學(xué)習(xí)(見(jiàn)圖1-11)。

圖1-11:具有兩個(gè)類別(三角形和正方形)的半監(jiān)督學(xué)習(xí)——未標(biāo)記的樣例(圓形)有助于將新實(shí)例(十字)分類到三角形而不是正方形,即使它更接近標(biāo)記的正方形
一些照片托管服務(wù)(例如Google相冊(cè))就是很好的示例。一旦你將所有的家庭照片上傳到該服務(wù),它會(huì)自動(dòng)識(shí)別出同一個(gè)人A出現(xiàn)在照片1、5和11中,而另一個(gè)人B出現(xiàn)在照片2、5和7中。這是算法(聚類)的無(wú)監(jiān)督部分。現(xiàn)在系統(tǒng)只需要你告訴它這些人是誰(shuí)。你只需為每個(gè)人添加一個(gè)標(biāo)簽[3],系統(tǒng)就可以為每張照片中的每個(gè)人命名,這對(duì)于搜索照片非常有用。
大多數(shù)半監(jiān)督學(xué)習(xí)算法是無(wú)監(jiān)督和監(jiān)督算法的組合。例如,可以使用聚類算法將相似的實(shí)例分組在一起,然后每個(gè)未標(biāo)記的實(shí)例都可以用其集群中最常見(jiàn)的標(biāo)簽進(jìn)行標(biāo)記。一旦標(biāo)記了整個(gè)數(shù)據(jù)集,就可以使用任何監(jiān)督學(xué)習(xí)算法。
自監(jiān)督學(xué)習(xí)
機(jī)器學(xué)習(xí)的另一種方法可以是從完全未標(biāo)記的數(shù)據(jù)集生成完全標(biāo)記的數(shù)據(jù)集。同樣,一旦標(biāo)記了整個(gè)數(shù)據(jù)集,就可以使用任何監(jiān)督學(xué)習(xí)算法。這種方法稱為自監(jiān)督學(xué)習(xí)。
例如,如果你有一個(gè)很大的未標(biāo)記圖像數(shù)據(jù)集,你可以隨機(jī)屏蔽每個(gè)圖像的一小部分,然后訓(xùn)練一個(gè)模型來(lái)恢復(fù)出原始圖像(見(jiàn)圖1-12)。在訓(xùn)練期間,屏蔽的圖像用作模型的輸入,原始圖像用作標(biāo)簽。
生成的模型本身可能非常有用。例如,修復(fù)損壞的圖像或從圖片中刪除不想要的對(duì)象。但通常情況下,使用自監(jiān)督學(xué)習(xí)訓(xùn)練的模型并不是你的最終目標(biāo)。你通常需要針對(duì)稍微不同的任務(wù)(你真正關(guān)心的任務(wù))來(lái)調(diào)整和微調(diào)模型。

圖1-12:自監(jiān)督學(xué)習(xí)示例——輸入(左)和目標(biāo)(右)
例如,假設(shè)你真正想要的是一個(gè)寵物分類模型:給定一張寵物的照片,模型會(huì)告訴你這只寵物屬于什么物種。如果你有大量未標(biāo)記的寵物照片數(shù)據(jù)集,則可以先使用自監(jiān)督學(xué)習(xí)來(lái)訓(xùn)練一個(gè)圖像修復(fù)模型。如果模型表現(xiàn)良好,則它應(yīng)該能夠區(qū)分不同的寵物種類:當(dāng)它修復(fù)一張蒙著臉的貓的圖像時(shí),它必須知道不要添加狗的臉。假設(shè)你的模型架構(gòu)允許(大多數(shù)神經(jīng)網(wǎng)絡(luò)架構(gòu)都允許),那么你就可以調(diào)整模型,使它能預(yù)測(cè)寵物種類而不是修復(fù)圖像。最后一步是在已標(biāo)記的數(shù)據(jù)集上微調(diào)模型:模型已經(jīng)知道貓、狗和其他寵物的樣子,因此只需要這個(gè)步驟,模型就可以學(xué)習(xí)它已知的物種和我們期望從中得到的標(biāo)簽之間的映射。
將知識(shí)從一項(xiàng)任務(wù)轉(zhuǎn)移到另一項(xiàng)任務(wù)稱為遷移學(xué)習(xí),它是當(dāng)今機(jī)器學(xué)習(xí)中最重要的技術(shù)之一,尤其是在使用深度神經(jīng)網(wǎng)絡(luò)(即由多層神經(jīng)元組成的神經(jīng)網(wǎng)絡(luò))時(shí)。我們將在第二部分詳細(xì)討論這一點(diǎn)。
有些人認(rèn)為自監(jiān)督學(xué)習(xí)是無(wú)監(jiān)督學(xué)習(xí)的一部分,因?yàn)樗幚淼氖俏礃?biāo)記的數(shù)據(jù)集。但是 自監(jiān)督學(xué)習(xí)在訓(xùn)練期間是使用(生成的)標(biāo)簽的,因此在這方面它更接近于監(jiān)督學(xué)習(xí)。在處理聚類、降維或異常檢測(cè)等任務(wù)時(shí),通常會(huì)使用術(shù)語(yǔ)“無(wú)監(jiān)督學(xué)習(xí)”,而自監(jiān)督學(xué)習(xí)側(cè)重于與監(jiān)督學(xué)習(xí)相同的任務(wù),主要是分類和回歸。簡(jiǎn)而言之,最好將自監(jiān)督學(xué)習(xí)視為一個(gè)單獨(dú)的類別。
強(qiáng)化學(xué)習(xí)
強(qiáng)化學(xué)習(xí)是一種非常不同的“巨獸”。這個(gè)學(xué)習(xí)系統(tǒng)(在此上下文中稱為智能體)可以觀察環(huán)境,選擇和執(zhí)行動(dòng)作,并獲得回報(bào)(或負(fù)回報(bào)形式的懲罰,見(jiàn)圖1-13)。然后它必須自行學(xué)習(xí)什么是最好的方法,稱為策略,以便隨著時(shí)間的推移獲得最大的回報(bào)。策略定義了智能體在給定情況下應(yīng)該選擇的動(dòng)作。

圖1-13:強(qiáng)化學(xué)習(xí)
例如,許多機(jī)器人采用強(qiáng)化學(xué)習(xí)算法來(lái)學(xué)習(xí)如何走路。DeepMind的AlphaGo程序也是強(qiáng)化學(xué)習(xí)的一個(gè)很好的示例:它在2017年5月的圍棋比賽中打敗了當(dāng)時(shí)世界排名第一的柯潔,成為頭條新聞。它通過(guò)分析數(shù)百萬(wàn)場(chǎng)比賽,然后與自己進(jìn)行多次對(duì)弈,從而習(xí)得了獲勝策略。請(qǐng)注意,在與人類冠軍的比賽中學(xué)習(xí)過(guò)程是被關(guān)閉的,AlphaGo只是在應(yīng)用它學(xué)到的策略。正如你將在1.4.2節(jié)中看到的,這稱為離線學(xué)習(xí)。
1.4.2 批量學(xué)習(xí)與在線學(xué)習(xí)
對(duì)機(jī)器學(xué)習(xí)系統(tǒng)進(jìn)行分類的另一個(gè)標(biāo)準(zhǔn)是系統(tǒng)能否從輸入數(shù)據(jù)流中進(jìn)行增量學(xué)習(xí)。
批量學(xué)習(xí)
在批量學(xué)習(xí)中,系統(tǒng)無(wú)法進(jìn)行增量學(xué)習(xí):它必須使用所有可用的數(shù)據(jù)進(jìn)行訓(xùn)練。這通常會(huì)占用大量的時(shí)間和計(jì)算資源,因此通常需要離線完成。首先對(duì)系統(tǒng)進(jìn)行訓(xùn)練,然后將其投入生產(chǎn)環(huán)境運(yùn)行,就不再學(xué)習(xí)了。它只是應(yīng)用它學(xué)到的東西。這稱為離線學(xué)習(xí)。
不幸的是,模型的性能往往會(huì)隨著時(shí)間的推移而慢慢變差,因?yàn)槭澜缭诓粩嘌葸M(jìn)發(fā)展,而模型卻保持不變。這種現(xiàn)象通常稱為模型腐爛或數(shù)據(jù)漂移。解決方案是定期根據(jù)最新的數(shù)據(jù)重新訓(xùn)練模型。你需要多久做一次取決于用例:如果模型對(duì)貓和狗的圖片進(jìn)行分類,它的性能會(huì)衰減得很慢,但如果模型處理快速變化的系統(tǒng),例如對(duì)金融市場(chǎng)進(jìn)行預(yù)測(cè),那么它很可能會(huì)衰減得相當(dāng)快。
即使是經(jīng)過(guò)訓(xùn)練可以對(duì)貓和狗的圖片進(jìn)行分類的模型也可能需要定期重新訓(xùn)練,這不是因?yàn)樨埡凸窌?huì)在一夜之間發(fā)生變化,而是因?yàn)橄鄼C(jī)會(huì)不斷變化,圖像格式、清晰度、亮度和大小比例也在不斷變化。此外,明年人們可能會(huì)喜歡不同的品種,或者他們可能會(huì)給寵物戴上小帽子,誰(shuí)知道呢?
如果你想讓批量學(xué)習(xí)系統(tǒng)理解新數(shù)據(jù)(比如新型垃圾郵件),你需要在完整數(shù)據(jù)集(不僅是新數(shù)據(jù),還有舊數(shù)據(jù))上從頭開(kāi)始訓(xùn)練新版系統(tǒng),然后用新模型替換舊模型。幸運(yùn)的是,訓(xùn)練、評(píng)估和啟動(dòng)機(jī)器學(xué)習(xí)系統(tǒng)的整個(gè)過(guò)程可以相當(dāng)容易地自動(dòng)化(見(jiàn)圖1-3),因此即使是批量學(xué)習(xí)系統(tǒng)也可以適應(yīng)變化。只需要經(jīng)常更新數(shù)據(jù)并從頭開(kāi)始訓(xùn)練新版系統(tǒng)。
這個(gè)解決方案很簡(jiǎn)單,而且通常效果很好,但使用完整數(shù)據(jù)集進(jìn)行訓(xùn)練可能需要花費(fèi)很多小時(shí),因此通常每24小時(shí)甚至每周訓(xùn)練一次新系統(tǒng)。如果你的系統(tǒng)需要適應(yīng)快速變化的數(shù)據(jù)(例如,預(yù)測(cè)股票價(jià)格),那么你需要一個(gè)更具反應(yīng)性的解決方案。
此外,在完整的數(shù)據(jù)集上進(jìn)行訓(xùn)練需要大量的計(jì)算資源(CPU、內(nèi)存空間、磁盤空間、磁盤I/O、網(wǎng)絡(luò)I/O等)。如果你有大量的數(shù)據(jù),并且你讓系統(tǒng)每天從頭開(kāi)始訓(xùn)練,那么最終會(huì)花費(fèi)你很多錢。如果數(shù)據(jù)量巨大,那么甚至可能無(wú)法使用批量學(xué)習(xí)算法。
最后,如果系統(tǒng)需要能夠自動(dòng)學(xué)習(xí)并且它的資源有限(例如,智能手機(jī)應(yīng)用程序或火星上的漫游機(jī)器人),那么攜帶大量訓(xùn)練數(shù)據(jù)并占用大量資源來(lái)每天訓(xùn)練數(shù)小時(shí)是不太可能的。
在這些情況下,更好的選擇是使用能夠增量學(xué)習(xí)的算法。
在線學(xué)習(xí)
在在線學(xué)習(xí)中,通過(guò)以單獨(dú)的數(shù)據(jù)或小批量的小組數(shù)據(jù)方式循序地向系統(tǒng)提供數(shù)據(jù)實(shí)例來(lái)對(duì)系統(tǒng)進(jìn)行增量訓(xùn)練。每個(gè)學(xué)習(xí)步驟都既快速又便宜,因此系統(tǒng)可以即時(shí)學(xué)習(xí)新數(shù)據(jù)(見(jiàn)圖1-14)。

圖1-14:在在線學(xué)習(xí)中,模型經(jīng)過(guò)訓(xùn)練并投入生產(chǎn)環(huán)境,然后隨著新數(shù)據(jù)的出現(xiàn)不斷學(xué)習(xí)
在線學(xué)習(xí)對(duì)于需要快速適應(yīng)變化的系統(tǒng)(例如,檢測(cè)股票市場(chǎng)中的新模式)很有用。如果你的計(jì)算資源有限,例如,模型是在移動(dòng)設(shè)備上訓(xùn)練的,那么在線學(xué)習(xí)是一個(gè)不錯(cuò)的選擇。
此外,對(duì)于超大數(shù)據(jù)集——超出一臺(tái)計(jì)算機(jī)的主存儲(chǔ)器所能容納的數(shù)據(jù),在線學(xué)習(xí)算法也同樣適用[這稱為核外(out-of-core)學(xué)習(xí)]。該算法加載部分?jǐn)?shù)據(jù),在該數(shù)據(jù)上運(yùn)行一個(gè)訓(xùn)練步驟,然后重復(fù)該過(guò)程,直到它在所有數(shù)據(jù)上運(yùn)行完(見(jiàn)圖1-15)。

圖1-15:使用在線學(xué)習(xí)來(lái)處理龐大的數(shù)據(jù)集
在線學(xué)習(xí)系統(tǒng)的一個(gè)重要參數(shù)是它們適應(yīng)不斷變化的數(shù)據(jù)的速度:這稱為學(xué)習(xí)率。如果設(shè)置的學(xué)習(xí)率很高,那么系統(tǒng)會(huì)快速適應(yīng)新數(shù)據(jù),但它也會(huì)很快忘記舊數(shù)據(jù)(并且你也不希望垃圾郵件過(guò)濾器只標(biāo)記最新類型的垃圾郵件)。反之,如果設(shè)置的學(xué)習(xí)率很低,那么系統(tǒng)會(huì)有更多的惰性,也就是說(shuō),它會(huì)學(xué)習(xí)得更慢,但它對(duì)新數(shù)據(jù)中的噪聲或非典型數(shù)據(jù)點(diǎn)(異常值)序列的敏感度也會(huì)降低。
核外學(xué)習(xí)通常是離線(即不在實(shí)時(shí)系統(tǒng)上)完成的,因此在線學(xué)習(xí)可能是一個(gè)容易混淆的名字。將其視為增量學(xué)習(xí)會(huì)更合適。
在線學(xué)習(xí)的一大挑戰(zhàn)是,如果將不良數(shù)據(jù)輸入系統(tǒng),系統(tǒng)的性能可能會(huì)迅速下降(取決于數(shù)據(jù)的質(zhì)量和學(xué)習(xí)率)。如果它是實(shí)時(shí)系統(tǒng),那么你的客戶會(huì)注意到這個(gè)現(xiàn)象。不良數(shù)據(jù)的來(lái)源可能是機(jī)器人的傳感器故障,或者有人對(duì)搜索引擎惡意刷屏以提高搜索結(jié)果排名等。為降低這種風(fēng)險(xiǎn),你需要密切監(jiān)控系統(tǒng),并在檢測(cè)到性能下降時(shí)立即關(guān)閉學(xué)習(xí)(并盡量恢復(fù)到之前的工作狀態(tài))。你可能還想監(jiān)控輸入數(shù)據(jù)并對(duì)異常數(shù)據(jù)做出反應(yīng)。例如,使用異常檢測(cè)算法(見(jiàn)第9章)。
1.4.3 基于實(shí)例的學(xué)習(xí)與基于模型的學(xué)習(xí)
對(duì)機(jī)器學(xué)習(xí)系統(tǒng)進(jìn)行分類的另一種方法是根據(jù)它們的泛化方式。大多數(shù)機(jī)器學(xué)習(xí)任務(wù)都與做出預(yù)測(cè)有關(guān)。這意味著在給定大量訓(xùn)練樣例的情況下,系統(tǒng)需要能夠?qū)λ郧拔匆?jiàn)到過(guò)的樣例做出良好的預(yù)測(cè)(泛化)。在訓(xùn)練數(shù)據(jù)上有很好的性能是好的,但還不夠,真正的目標(biāo)是在新實(shí)例上表現(xiàn)良好。
泛化方法主要有兩種:基于實(shí)例的學(xué)習(xí)和基于模型的學(xué)習(xí)。
基于實(shí)例的學(xué)習(xí)
最司空見(jiàn)慣的學(xué)習(xí)方式可能就是簡(jiǎn)單地背誦。如果你以這種方式來(lái)創(chuàng)建垃圾郵件過(guò)濾器,那么它只會(huì)標(biāo)記所有與用戶已標(biāo)記的電子郵件相同的電子郵件——這雖然不是最壞的解決方案,但肯定不是最好的。
垃圾郵件過(guò)濾器不僅可以標(biāo)記與已知垃圾郵件相同的電子郵件,還可以對(duì)其進(jìn)行編程來(lái)標(biāo) 記與已知垃圾郵件非常相似的電子郵件。這需要衡量?jī)煞怆娮余]件之間的相似性。兩封電子郵件之間的(非常基本的)相似性度量可以是計(jì)算它們共有的單詞數(shù)。如果一封電子郵件與已知的垃圾郵件有很多相同單詞,那么系統(tǒng)會(huì)將其標(biāo)記為垃圾郵件。
這稱為基于實(shí)例的學(xué)習(xí):系統(tǒng)用心學(xué)習(xí)樣例,然后通過(guò)使用相似性度量將它們與學(xué)習(xí)到的樣例(或它們的子集)進(jìn)行比較來(lái)泛化到新實(shí)例。例如,在圖1-16中,新實(shí)例被歸類為三角形,因?yàn)榇蠖鄶?shù)最相似的實(shí)例都屬于該類。

圖1-16:基于實(shí)例的學(xué)習(xí)
基于模型的學(xué)習(xí)和典型的機(jī)器學(xué)習(xí)工作流程
對(duì)一組樣例進(jìn)行泛化的另一種方法是為這些樣例構(gòu)建一個(gè)模型,然后使用該模型進(jìn)行預(yù)測(cè)。這稱為基于模型的學(xué)習(xí)(見(jiàn)圖1-17)。

圖1-17:基于模型的學(xué)習(xí)
例如,假設(shè)你想知道金錢是否能讓人感到快樂(lè),你可以從經(jīng)合組織(OECD)網(wǎng)站(https://www.oecdbetterlifeindex.org)下載生活幸福指數(shù)數(shù)據(jù),再?gòu)氖澜玢y行(https://ourworldindata.org)找到人均GDP(Gross Domestic Product)的統(tǒng)計(jì)數(shù)據(jù),將數(shù)據(jù)并入表格并按人均GDP排序。表1-1展示了你得到的內(nèi)容的摘錄。
表1-1:金錢能讓人更快樂(lè)嗎

讓我們繪制這些國(guó)家的數(shù)據(jù)(見(jiàn)圖1-18)。

圖1-18:你看到這里的趨勢(shì)了嗎
這里似乎確實(shí)有一種趨勢(shì)!盡管數(shù)據(jù)有噪聲(即部分隨機(jī)),但看起來(lái)生活滿意度隨著國(guó)家人均GDP的增長(zhǎng)或多或少呈線性增長(zhǎng)。因此,你決定將生活滿意度建模為人均GDP的線性函數(shù)。這個(gè)步驟稱為模型選擇:你選擇了一個(gè)只有一個(gè)屬性(即人均GDP)的生活滿意度線性模型(見(jiàn)公式1-1)。
公式1-1:一個(gè)簡(jiǎn)單的線性模型
生活滿意度=θ0+θ1×人均GDP
該模型有兩個(gè)模型參數(shù):θ0和θ1[4]。通過(guò)調(diào)整這些參數(shù),你可以用這個(gè)模型表示任何線性函數(shù),如圖1-19所示。

圖1-19:一些可能的線性模型
在使用模型之前,你需要定義參數(shù)值θ0和θ1。你如何知道哪些值會(huì)使你的模型表現(xiàn)最好?要回答這個(gè)問(wèn)題,你需要指定一個(gè)性能指標(biāo)。你可以定義一個(gè)效用函數(shù)(或擬合函數(shù))來(lái)衡量模型有多好,也可以定義一個(gè)代價(jià)函數(shù)來(lái)衡量模型有多差。對(duì)于線性回歸問(wèn)題,人們通常使用代價(jià)函數(shù)來(lái)衡量線性模型的預(yù)測(cè)與訓(xùn)練樣例之間的差距,目的在于最小化這個(gè)差距。
這就是線性回歸算法的用武之地:通過(guò)你提供的訓(xùn)練樣例,找到使線性模型最擬合你的數(shù)據(jù)的參數(shù)。這稱為訓(xùn)練模型。在我們的示例中,算法發(fā)現(xiàn)最佳參數(shù)值為θ0=3.75和θ1=6.78×10-5。
令人困惑的是,“模型”一詞可以指代模型的一種類型(例如,線性回歸),也可以指代完全特定的模型架構(gòu)(例如,有一個(gè)輸入和一個(gè)輸出的線性回歸),或者指代最后準(zhǔn)備用于預(yù)測(cè)的已訓(xùn)練模型(例如,有一個(gè)輸入和一個(gè)輸出的線性回歸,參數(shù)為θ0=3.75和θ1=6.78×10-5)。模型選擇包括選擇模型類型和完全指定其架構(gòu)。訓(xùn)練模型意味著運(yùn)行算法來(lái)找到最擬合訓(xùn)練數(shù)據(jù)的模型參數(shù),并希望對(duì)新數(shù)據(jù)做出良好的預(yù)測(cè)。
現(xiàn)在(對(duì)于線性模型而言)模型最擬合訓(xùn)練數(shù)據(jù),如圖1-20所示。

圖1-20:最擬合訓(xùn)練數(shù)據(jù)的線性模型
現(xiàn)在終于可以運(yùn)行模型進(jìn)行預(yù)測(cè)了。例如,假設(shè)你想知道塞浦路斯人有多幸福,而經(jīng)合組織的數(shù)據(jù)沒(méi)有答案。幸運(yùn)的是,你可以使用這個(gè)模型做出很好的預(yù)測(cè):先查看塞浦路斯的人均GDP是多少,發(fā)現(xiàn)是37 655美元,然后應(yīng)用這個(gè)模型,發(fā)現(xiàn)生活滿意度大約為3.75+37 655×6.78×10-5=6.30。
為了激發(fā)你的興趣,示例1-1展示了加載數(shù)據(jù)的Python代碼,將輸入X與標(biāo)簽y分開(kāi),創(chuàng)建可視化散點(diǎn)圖,然后訓(xùn)練線性模型并進(jìn)行預(yù)測(cè)[5]。
示例1-1:使用Scikit-Learn訓(xùn)練并運(yùn)行一個(gè)線性模型

如果你改用基于實(shí)例的學(xué)習(xí)算法,你會(huì)發(fā)現(xiàn)以色列的人均GDP最接近塞浦路斯(38 341美元),并且由于經(jīng)合組織數(shù)據(jù)告訴我們以色列人的生活滿意度為7.2,你會(huì)預(yù)測(cè)塞浦路斯的生活滿意度為7.2。如果你稍微拉遠(yuǎn)一些,看看距離很近的兩個(gè)國(guó)家,你會(huì)發(fā)現(xiàn)立陶宛和斯洛文尼亞這兩個(gè)國(guó)家的生活滿意度都是5.9。對(duì)這三個(gè)值求平均值,得到6.33,這非常接近基于模型的預(yù)測(cè)。這個(gè)簡(jiǎn)單的算法稱為k近鄰回歸(在本例中,k=3)。
在上述代碼中,用k近鄰回歸替換線性回歸模型非常簡(jiǎn)單,只需將如下代碼:

替換為:

如果一切順利,你的模型會(huì)做出很好的預(yù)測(cè)。如果不是,那么你可能需要使用更多的屬性(就業(yè)率、健康、空氣污染等),獲得更多或更高質(zhì)量的訓(xùn)練數(shù)據(jù),或者選擇更強(qiáng)大的模型(例如,多項(xiàng)式回歸模型)。
總之:
· 研究數(shù)據(jù)。
· 選擇一個(gè)模型。
· 使用訓(xùn)練數(shù)據(jù)進(jìn)行訓(xùn)練(即學(xué)習(xí)算法搜索最小化代價(jià)函數(shù)的模型參數(shù)值)。
· 最后,應(yīng)用該模型對(duì)新實(shí)例進(jìn)行預(yù)測(cè)(這稱為推斷),希望該模型能夠被很好地泛化。
這就是一個(gè)典型的機(jī)器學(xué)習(xí)項(xiàng)目。在第2章中,你將通過(guò)從頭到尾完成一個(gè)項(xiàng)目來(lái)親身體驗(yàn)這一點(diǎn)。
到目前為止,我們已經(jīng)介紹了很多基礎(chǔ)知識(shí):你現(xiàn)在知道了機(jī)器學(xué)習(xí)的真正含義,它為什么有用,一些最常見(jiàn)的ML系統(tǒng)類別是什么,以及典型的項(xiàng)目工作流是什么樣的。現(xiàn)在讓我們看看在學(xué)習(xí)過(guò)程中會(huì)遇到哪些妨礙你做出準(zhǔn)確預(yù)測(cè)的問(wèn)題。
- 機(jī)器學(xué)習(xí):Python實(shí)踐
- 虛擬現(xiàn)實(shí):商業(yè)化應(yīng)用及影響
- 人工智能3.0:大智若愚
- 人工智能會(huì)搶哪些工作
- 生成式AI實(shí)戰(zhàn)
- 機(jī)器學(xué)習(xí)
- AI自媒體寫作超簡(jiǎn)單
- AI時(shí)代,學(xué)什么,怎么學(xué)
- 人工智能算法基礎(chǔ)
- 巧用ChatGPT快速提高職場(chǎng)晉升力
- 這就是ChatGPT
- 機(jī)器學(xué)習(xí)實(shí)戰(zhàn):基于Scikit-Learn、Keras和TensorFlow(原書第2版)
- 聊天機(jī)器人:對(duì)話式體驗(yàn)產(chǎn)品設(shè)計(jì)
- 因果推斷導(dǎo)論
- 機(jī)器學(xué)習(xí)實(shí)踐指南:案例應(yīng)用解析