另一種分類機(jī)器學(xué)習(xí)的方法是判斷它們是如何進(jìn)行歸納推廣的。大多機(jī)器學(xué)習(xí)任務(wù)是關(guān)于預(yù)測(cè)的。這意味著給定一定數(shù)量的訓(xùn)練樣本,系統(tǒng)需要能推廣到之前沒(méi)見(jiàn)到過(guò)的樣本。對(duì)訓(xùn)練數(shù)據(jù)集有很好的性能還不夠,真正的目標(biāo)是對(duì)新實(shí)例預(yù)測(cè)的性能。
有兩種主要的歸納方法:基于實(shí)例學(xué)習(xí)和基于模型學(xué)習(xí)。
基于實(shí)例學(xué)習(xí)
也許最簡(jiǎn)單的學(xué)習(xí)形式就是用記憶學(xué)習(xí)。如果用這種方法做一個(gè)垃圾郵件檢測(cè)器,只需標(biāo)記所有和用戶標(biāo)記的垃圾郵件相同的郵件 —— 這個(gè)方法不差,但肯定不是最好的。
不僅能標(biāo)記和已知的垃圾郵件相同的郵件,你的垃圾郵件過(guò)濾器也要能標(biāo)記類似垃圾郵件的郵件。這就需要測(cè)量?jī)煞忄]件的相似性。一個(gè)(簡(jiǎn)單的)相似度測(cè)量方法是統(tǒng)計(jì)兩封郵件包含的相同單詞的數(shù)量。如果一封郵件含有許多垃圾郵件中的詞,就會(huì)被標(biāo)記為垃圾郵件。
這被稱作基于實(shí)例學(xué)習(xí):系統(tǒng)先用記憶學(xué)習(xí)案例,然后使用相似度測(cè)量推廣到新的例子(圖 1-15)。
圖 1-15 基于實(shí)例學(xué)習(xí)
基于模型學(xué)習(xí)
另一種從樣本集進(jìn)行歸納的方法是建立這些樣本的模型,然后使用這個(gè)模型進(jìn)行預(yù)測(cè)。這稱作基于模型學(xué)習(xí)(圖 1-16)。
圖 1-16 基于模型學(xué)習(xí)
例如,你想知道錢(qián)是否能讓人快樂(lè),你從 OECD 網(wǎng)站(http://stats.oecd.org/index.aspx?DataSetCode=BLI)下載了 Better Life Index 指數(shù)數(shù)據(jù),還從 IMF (點(diǎn)擊閱讀原文可跳轉(zhuǎn))下載了人均 GDP 數(shù)據(jù)。表 1-1 展示了摘要。
表 1-1 錢(qián)會(huì)使人幸福嗎?
用一些國(guó)家的數(shù)據(jù)畫(huà)圖(圖 1-17)。
圖 1-17 你看到趨勢(shì)了嗎?
確實(shí)能看到趨勢(shì)!盡管數(shù)據(jù)有噪聲(即,部分隨機(jī)),看起來(lái)生活滿意度是隨著人均 GDP 的增長(zhǎng)線性提高的。所以,你決定生活滿意度建模為人均 GDP 的線性函數(shù)。這一步稱作模型選擇:你選一個(gè)生活滿意度的線性模型,只有一個(gè)屬性,人均 GDP(公式 1-1)。
公式 1-1 一個(gè)簡(jiǎn)單的線性模型
這個(gè)模型有兩個(gè)參數(shù)θ0和θ1。通過(guò)調(diào)整這兩個(gè)參數(shù),你可以使你的模型表示任何線性函數(shù),見(jiàn)圖 1-18。
圖 1-18 幾個(gè)可能的線性模型
在使用模型之前,你需要確定θ0和θ1。如何能知道哪個(gè)值可以使模型的性能最佳呢?要回答這個(gè)問(wèn)題,你需要指定性能的量度。你可以定義一個(gè)實(shí)用函數(shù)(或擬合函數(shù))用來(lái)測(cè)量模型是否夠好,或者你可以定義一個(gè)代價(jià)函數(shù)來(lái)測(cè)量模型有多差。對(duì)于線性回歸問(wèn)題,人們一般是用代價(jià)函數(shù)測(cè)量線性模型的預(yù)測(cè)值和訓(xùn)練樣本的距離差,目標(biāo)是使距離差最小。
接下來(lái)就是線性回歸算法,你用訓(xùn)練樣本訓(xùn)練算法,算法找到使線性模型最擬合數(shù)據(jù)的參數(shù)。這稱作模型訓(xùn)練。在我們的例子中,算法得到的參數(shù)值是θ0=4.85和θ1=4.91×10–5。
現(xiàn)在模型已經(jīng)最緊密地?cái)M合到訓(xùn)練數(shù)據(jù)了,見(jiàn)圖 1-19。
圖 1-19 最佳擬合訓(xùn)練數(shù)據(jù)的線性模型
最后,可以準(zhǔn)備運(yùn)行模型進(jìn)行預(yù)測(cè)了。例如,假如你想知道塞浦路斯人有多幸福,但 OECD 沒(méi)有它的數(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 matplotlibimport matplotlib.pyplot as pltimport numpy as npimport pandas as pdimport 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=' ', 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]] # 塞浦路斯的人均GDPprint(lin_reg_model.predict(X_new)) # outputs [[ 5.96242338]]
注解:如果你之前接觸過(guò)基于實(shí)例學(xué)習(xí)算法,你會(huì)發(fā)現(xiàn)斯洛文尼亞的人均 GDP(20732 美元)和塞浦路斯差距很小,OECD 數(shù)據(jù)上斯洛文尼亞的生活滿意度是 5.7,就可以預(yù)測(cè)塞浦路斯的生活滿意度也是 5.7。如果放大一下范圍,看一下接下來(lái)兩個(gè)臨近的國(guó)家,你會(huì)發(fā)現(xiàn)葡萄牙和西班牙的生活滿意度分別是 5.1 和 6.5。對(duì)這三個(gè)值進(jìn)行平均得到 5.77,就和基于模型的預(yù)測(cè)值很接近。這個(gè)簡(jiǎn)單的算法叫做k近鄰回歸(這個(gè)例子中,k=3)。
在前面的代碼中替換線性回歸模型為 K 近鄰模型,只需更換下面一行:
clf = sklearn.linear_model.LinearRegression()
為:
clf = sklearn.neighbors.KNeighborsRegressor(n_neighbors=3)
如果一切順利,你的模型就可以作出好的預(yù)測(cè)。如果不能,你可能需要使用更多的屬性(就業(yè)率、健康、空氣污染等等),獲取更多更好的訓(xùn)練數(shù)據(jù),或選擇一個(gè)更好的模型(比如,多項(xiàng)式回歸模型)。
總結(jié)一下:
研究數(shù)據(jù)
選擇模型
用訓(xùn)練數(shù)據(jù)進(jìn)行訓(xùn)練(即,學(xué)習(xí)算法搜尋模型參數(shù)值,使代價(jià)函數(shù)最小)
最后,使用模型對(duì)新案例進(jìn)行預(yù)測(cè)(這稱作推斷),但愿這個(gè)模型推廣效果不差
這就是一個(gè)典型的機(jī)器學(xué)習(xí)項(xiàng)目。在第 2 章中,你會(huì)第一手地接觸一個(gè)完整的項(xiàng)目。
我們已經(jīng)學(xué)習(xí)了許多關(guān)于基礎(chǔ)的內(nèi)容:你現(xiàn)在知道了機(jī)器學(xué)習(xí)是關(guān)于什么的,為什么它這么有用,最常見(jiàn)的機(jī)器學(xué)習(xí)的分類,典型的項(xiàng)目工作流程。現(xiàn)在,讓我們看一看學(xué)習(xí)中會(huì)發(fā)生什么錯(cuò)誤,導(dǎo)致不能做出準(zhǔn)確的預(yù)測(cè)。
機(jī)器學(xué)習(xí)的主要挑戰(zhàn)
簡(jiǎn)而言之,因?yàn)槟愕闹饕蝿?wù)是選擇一個(gè)學(xué)習(xí)算法并用一些數(shù)據(jù)進(jìn)行訓(xùn)練,會(huì)導(dǎo)致錯(cuò)誤的兩件事就是“錯(cuò)誤的算法”和“錯(cuò)誤的數(shù)據(jù)”。我們從錯(cuò)誤的數(shù)據(jù)開(kāi)始。
訓(xùn)練數(shù)據(jù)量不足
要讓一個(gè)蹣跚學(xué)步的孩子知道什么是蘋(píng)果,需要做的就是指著一個(gè)蘋(píng)果說(shuō)“蘋(píng)果”(可能需要重復(fù)這個(gè)過(guò)程幾次)。現(xiàn)在這個(gè)孩子就能認(rèn)識(shí)所有形狀和顏色的蘋(píng)果。真是個(gè)天才!
機(jī)器學(xué)習(xí)還達(dá)不到這個(gè)程度;需要大量數(shù)據(jù),才能讓多數(shù)機(jī)器學(xué)習(xí)算法正常工作。即便對(duì)于非常簡(jiǎn)單的問(wèn)題,一般也需要數(shù)千的樣本,對(duì)于復(fù)雜的問(wèn)題,比如圖像或語(yǔ)音識(shí)別,你可能需要數(shù)百萬(wàn)的樣本(除非你能重復(fù)使用部分存在的模型)。
數(shù)據(jù)不合理的有效性
在一篇 2001 年發(fā)表的著名論文中,微軟研究員 Michele Banko 和 Eric Brill 展示了不同的機(jī)器學(xué)習(xí)算法,包括非常簡(jiǎn)單的算法,一旦有了大量數(shù)據(jù)進(jìn)行訓(xùn)練,在進(jìn)行去除語(yǔ)言歧義的測(cè)試中幾乎有相同的性能(見(jiàn)圖 1-20)。
圖 1-20 數(shù)據(jù)和算法的重要性對(duì)比
論文作者說(shuō):“結(jié)果說(shuō)明,我們可能需要重新考慮在算法開(kāi)發(fā) vs 語(yǔ)料庫(kù)發(fā)展上花費(fèi)時(shí)間和金錢(qián)的取舍。”
對(duì)于復(fù)雜問(wèn)題,數(shù)據(jù)比算法更重要的主張?jiān)?2009 年由 Norvig 發(fā)表的論文《The Unreasonable Effectiveness of Data》得到了進(jìn)一步的推廣。但是,應(yīng)該注意到,小型和中型的數(shù)據(jù)集仍然是非常常見(jiàn)的,獲得額外的訓(xùn)練數(shù)據(jù)并不總是輕易和廉價(jià)的,所以不要拋棄算法。
沒(méi)有代表性的訓(xùn)練數(shù)據(jù)
為了更好地進(jìn)行歸納推廣,讓訓(xùn)練數(shù)據(jù)對(duì)新數(shù)據(jù)具有代表性是非常重要的。無(wú)論你用的是基于實(shí)例學(xué)習(xí)或基于模型學(xué)習(xí),這點(diǎn)都很重要。
例如,我們之前用來(lái)訓(xùn)練線性模型的國(guó)家集合不夠具有代表性:缺少了一些國(guó)家。圖 1-21 展示了添加這些缺失國(guó)家之后的數(shù)據(jù)。
圖 1-21 一個(gè)更具代表性的訓(xùn)練樣本
如果你用這份數(shù)據(jù)訓(xùn)練線性模型,得到的是實(shí)線,舊模型用虛線表示。可以看到,添加幾個(gè)國(guó)家不僅可以顯著地改變模型,它還說(shuō)明如此簡(jiǎn)單的線性模型可能永遠(yuǎn)不會(huì)達(dá)到很好的性能。貌似非常富裕的國(guó)家沒(méi)有中等富裕的國(guó)家快樂(lè)(事實(shí)上,非常富裕的國(guó)家看起來(lái)更不快樂(lè)),相反的,一些貧窮的國(guó)家看上去比富裕的國(guó)家還幸福。
使用了沒(méi)有代表性的數(shù)據(jù)集,我們訓(xùn)練了一個(gè)不可能得到準(zhǔn)確預(yù)測(cè)的模型,特別是對(duì)于非常貧窮和非常富裕的國(guó)家。
使用具有代表性的訓(xùn)練集對(duì)于推廣到新案例是非常重要的。但是做起來(lái)比說(shuō)起來(lái)要難:如果樣本太小,就會(huì)有樣本噪聲(即,會(huì)有一定概率包含沒(méi)有代表性的數(shù)據(jù)),但是即使是非常大的樣本也可能沒(méi)有代表性,如果取樣方法錯(cuò)誤的話。這叫做樣本偏差。
一個(gè)樣本偏差的著名案例
也許關(guān)于樣本偏差最有名的案例發(fā)生在 1936 年蘭登和羅斯福的美國(guó)大選:《文學(xué)文摘》做了一個(gè)非常大的民調(diào),給 1000 萬(wàn)人郵寄了調(diào)查信。得到了 240 萬(wàn)回信,非常有信心地預(yù)測(cè)蘭登會(huì)以 57% 贏得大選。然而,羅斯福贏得了 62% 的選票。錯(cuò)誤發(fā)生在《文學(xué)文摘》的取樣方法:
首先,為了獲取發(fā)信地址,《文學(xué)文摘》使用了電話黃頁(yè)、雜志訂閱用戶、俱樂(lè)部會(huì)員等相似的列表。所有這些列表都偏向于富裕人群,他們都傾向于投票給共和黨(即蘭登)。
第二,只有 25% 的回答了調(diào)研。這就又一次引入了樣本偏差,它排除了不關(guān)心政治的人、不喜歡《文學(xué)文摘》的人,和其它關(guān)鍵人群。這種特殊的樣本偏差稱作無(wú)應(yīng)答偏差。
下面是另一個(gè)例子:假如你想創(chuàng)建一個(gè)能識(shí)別放克音樂(lè)(Funk Music, 別名騷樂(lè))視頻的系統(tǒng)。建立訓(xùn)練集的方法之一是在 YouTube 上搜索“放克音樂(lè)”,使用搜索到的視頻。但是這樣就假定了 YouTube 的搜索引擎返回的視頻集,是對(duì) YouTube 上的所有放克音樂(lè)有代表性的。事實(shí)上,搜索結(jié)果會(huì)偏向于人們歌手(如果你居住在巴西,你會(huì)得到許多“funk carioca”視頻,它們和 James Brown 的截然不同)。從另一方面來(lái)講,你怎么得到一個(gè)大的訓(xùn)練集呢?
低質(zhì)量數(shù)據(jù)
很明顯,如果訓(xùn)練集中的錯(cuò)誤、異常值和噪聲(錯(cuò)誤測(cè)量引入的)太多,系統(tǒng)檢測(cè)出潛在規(guī)律的難度就會(huì)變大,性能就會(huì)降低。花費(fèi)時(shí)間對(duì)訓(xùn)練數(shù)據(jù)進(jìn)行清理是十分重要的。事實(shí)上,大多數(shù)據(jù)科學(xué)家的一大部分時(shí)間是做清洗工作的。例如:
如果一些實(shí)例是明顯的異常值,最好刪掉它們或嘗試手工修改錯(cuò)誤;
如果一些實(shí)例缺少特征(比如,你的 5% 的顧客沒(méi)有說(shuō)明年齡),你必須決定是否忽略這個(gè)屬性、忽略這些實(shí)例、填入缺失值(比如,年齡中位數(shù)),或者訓(xùn)練一個(gè)含有這個(gè)特征的模型和一個(gè)不含有這個(gè)特征的模型,等等。
不相關(guān)的特征
俗語(yǔ)說(shuō):進(jìn)來(lái)的是垃圾,出去的也是垃圾。你的系統(tǒng)只有在訓(xùn)練數(shù)據(jù)包含足夠相關(guān)特征、非相關(guān)特征不多的情況下,才能進(jìn)行學(xué)習(xí)。機(jī)器學(xué)習(xí)項(xiàng)目成功的關(guān)鍵之一是用好的特征進(jìn)行訓(xùn)練。這個(gè)過(guò)程稱作特征工程,包括:
特征選擇:在所有存在的特征中選取最有用的特征進(jìn)行訓(xùn)練。
特征提取:組合存在的特征,生成一個(gè)更有用的特征(如前面看到的,可以使用降維算法)。
收集新數(shù)據(jù)創(chuàng)建新特征。
現(xiàn)在,我們已經(jīng)看過(guò)了許多壞數(shù)據(jù)的例子,接下來(lái)看幾個(gè)壞算法的例子。
過(guò)擬合訓(xùn)練數(shù)據(jù)
如果你在外國(guó)游玩,當(dāng)?shù)氐某鲎廛囁緳C(jī)多收了你的錢(qián)。你可能會(huì)說(shuō)這個(gè)國(guó)家所有的出租車司機(jī)都是小偷。過(guò)度歸納是我們?nèi)祟惤?jīng)常做的,如果我們不小心,機(jī)器也會(huì)犯同樣的錯(cuò)誤。在機(jī)器學(xué)習(xí)中,這稱作過(guò)擬合:意思是說(shuō),模型在訓(xùn)練數(shù)據(jù)上表現(xiàn)很好,但是推廣效果不好。
圖 1-22 展示了一個(gè)高階多項(xiàng)式生活滿意度模型,它大大過(guò)擬合了訓(xùn)練數(shù)據(jù)。即使它比簡(jiǎn)單線性模型在訓(xùn)練數(shù)據(jù)上表現(xiàn)更好,你會(huì)相信它的預(yù)測(cè)嗎?
圖 1-22 過(guò)擬合訓(xùn)練數(shù)據(jù)
復(fù)雜的模型,比如深度神經(jīng)網(wǎng)絡(luò),可以檢測(cè)數(shù)據(jù)中的細(xì)微規(guī)律,但是如果訓(xùn)練集有噪聲,或者訓(xùn)練集太小(太小會(huì)引入樣本噪聲),模型就會(huì)去檢測(cè)噪聲本身的規(guī)律。很明顯,這些規(guī)律不能推廣到新實(shí)例。例如,假如你用更多的屬性訓(xùn)練生活滿意度模型,包括不包含信息的屬性,比如國(guó)家的名字。如此一來(lái),負(fù)責(zé)的模型可能會(huì)檢測(cè)出訓(xùn)練集中名字有 w 字母的國(guó)家的生活滿意度大于 7:新西蘭(7.3),挪威(7.4),瑞典(7.2)和瑞士(7.5)。你能相信這個(gè) W-滿意度法則推廣到盧旺達(dá)和津巴布韋嗎?很明顯,這個(gè)規(guī)律只是訓(xùn)練集數(shù)據(jù)中偶然出現(xiàn)的,但是模型不能判斷這個(gè)規(guī)律是真實(shí)的、還是噪聲的結(jié)果。
警告:過(guò)擬合發(fā)生在相對(duì)于訓(xùn)練數(shù)據(jù)的量和噪聲,模型過(guò)于復(fù)雜的情況。可能的解決方案有:
簡(jiǎn)化模型,可以通過(guò)選擇一個(gè)參數(shù)更少的模型(比如使用線性模型,而不是高階多項(xiàng)式模型)、減少訓(xùn)練數(shù)據(jù)的屬性數(shù)、或限制一下模型
收集更多的訓(xùn)練數(shù)據(jù)
減小訓(xùn)練數(shù)據(jù)的噪聲(比如,修改數(shù)據(jù)錯(cuò)誤和去除異常值)
限定一個(gè)模型以讓它更簡(jiǎn)單,降低過(guò)擬合的風(fēng)險(xiǎn)被稱作正則化(regularization)。例如,我們之前定義的線性模型有兩個(gè)參數(shù),θ0和θ1。它給了學(xué)習(xí)算法兩個(gè)自由度以讓模型適應(yīng)訓(xùn)練數(shù)據(jù):可以調(diào)整截距θ0和斜率θ1。如果強(qiáng)制θ1=0,算法就只剩一個(gè)自由度,擬合數(shù)據(jù)就會(huì)更為困難:能做的只是將在線下移動(dòng),盡可能地靠近訓(xùn)練實(shí)例,結(jié)果會(huì)在平均值附近。這就是一個(gè)非常簡(jiǎn)單的模型!如果我們?cè)试S算法可以修改θ1,但是只能在一個(gè)很小的范圍內(nèi)修改,算法的自由度就會(huì)介于 1 和 2 之間。它要比兩個(gè)自由度的模型簡(jiǎn)單,比 1 個(gè)自由度的模型要復(fù)雜。你的目標(biāo)是在完美擬合數(shù)據(jù)和保持模型簡(jiǎn)單性上找到平衡,確保算法的推廣效果。
圖 1-23 展示了三個(gè)模型:虛線表示用缺失部分國(guó)家的數(shù)據(jù)訓(xùn)練的原始模型,短劃線是我們的第二個(gè)用所有國(guó)家訓(xùn)練的模型,實(shí)線模型的訓(xùn)練數(shù)據(jù)和第一個(gè)相同,但進(jìn)行了正則化限制。你可以看到正則化強(qiáng)制模型有一個(gè)小的斜率,它對(duì)訓(xùn)練數(shù)據(jù)的擬合不是那么好,但是對(duì)新樣本的推廣效果好。
圖 1-23 正則化降低了過(guò)度擬合的風(fēng)險(xiǎn)
正則化的度可以用一個(gè)超參數(shù)(hyperparameter)控制。超參數(shù)是一個(gè)學(xué)習(xí)算法的參數(shù)(而不是模型的)。這樣,它是不會(huì)被學(xué)習(xí)算法本身影響的,它優(yōu)于訓(xùn)練,在訓(xùn)練中是保持不變的。如果你設(shè)定的超參數(shù)非常大,就會(huì)得到一個(gè)幾乎是平的模型(斜率接近于 0);這種學(xué)習(xí)算法幾乎肯定不會(huì)過(guò)擬合訓(xùn)練數(shù)據(jù),但是也很難得到一個(gè)好的解。調(diào)節(jié)超參數(shù)是創(chuàng)建機(jī)器學(xué)習(xí)算法非常重要的一部分(下一章你會(huì)看到一個(gè)詳細(xì)的例子)。
欠擬合訓(xùn)練數(shù)據(jù)
你可能猜到了,欠擬合是和過(guò)擬合相對(duì)的:當(dāng)你的模型過(guò)于簡(jiǎn)單時(shí)就會(huì)發(fā)生。例如,生活滿意度的線性模型傾向于欠擬合;現(xiàn)實(shí)要比這個(gè)模型復(fù)雜的多,所以預(yù)測(cè)很難準(zhǔn)確,即使在訓(xùn)練樣本上也很難準(zhǔn)確。
解決這個(gè)問(wèn)題的選項(xiàng)包括:
選擇一個(gè)更強(qiáng)大的模型,帶有更多參數(shù)
用更好的特征訓(xùn)練學(xué)習(xí)算法(特征工程)
減小對(duì)模型的限制(比如,減小正則化超參數(shù))
回顧
現(xiàn)在,你已經(jīng)知道了很多關(guān)于機(jī)器學(xué)習(xí)的知識(shí)。然而,學(xué)過(guò)了這么多概念,你可能會(huì)感到有些迷失,所以讓我們退回去,回顧一下重要的:
機(jī)器學(xué)習(xí)是讓機(jī)器通過(guò)學(xué)習(xí)數(shù)據(jù)對(duì)某些任務(wù)做得更好,而不使用確定的代碼規(guī)則。
有許多不同類型的機(jī)器學(xué)習(xí)系統(tǒng):監(jiān)督或非監(jiān)督,批量或在線,基于實(shí)例或基于模型,等等。
在機(jī)器學(xué)習(xí)項(xiàng)目中,我們從訓(xùn)練集中收集數(shù)據(jù),然后對(duì)學(xué)習(xí)算法進(jìn)行訓(xùn)練。如果算法是基于模型的,就調(diào)節(jié)一些參數(shù),讓模型擬合到訓(xùn)練集(即,對(duì)訓(xùn)練集本身作出好的預(yù)測(cè)),然后希望它對(duì)新樣本也能有好預(yù)測(cè)。如果算法是基于實(shí)例的,就是用記憶學(xué)習(xí)樣本,然后用相似度推廣到新實(shí)例。
如果訓(xùn)練集太小、數(shù)據(jù)沒(méi)有代表性、含有噪聲、或摻有不相關(guān)的特征(垃圾進(jìn),垃圾出),系統(tǒng)的性能不會(huì)好。最后,模型不能太簡(jiǎn)單(會(huì)發(fā)生欠擬合)或太復(fù)雜(會(huì)發(fā)生過(guò)擬合)。
還差最后一個(gè)主題要學(xué)習(xí):訓(xùn)練完了一個(gè)模型,你不只希望將它推廣到新樣本。如果你想評(píng)估它,那么還需要作出必要的微調(diào)。一起來(lái)看一看。
測(cè)試和確認(rèn)
要知道一個(gè)模型推廣到新樣本的效果,唯一的辦法就是真正的進(jìn)行試驗(yàn)。一種方法是將模型部署到生產(chǎn)環(huán)境,觀察它的性能。這么做可以,但是如果模型的性能很差,就會(huì)引起用戶抱怨 —— 這不是最好的方法。
更好的選項(xiàng)是將你的數(shù)據(jù)分成兩個(gè)集合:訓(xùn)練集和測(cè)試集。正如它們的名字,用訓(xùn)練集進(jìn)行訓(xùn)練,用測(cè)試集進(jìn)行測(cè)試。對(duì)新樣本的錯(cuò)誤率稱作推廣錯(cuò)誤(或樣本外錯(cuò)誤),通過(guò)模型對(duì)測(cè)試集的評(píng)估,你可以預(yù)估這個(gè)錯(cuò)誤。這個(gè)值可以告訴你,你的模型對(duì)新樣本的性能。
如果訓(xùn)練錯(cuò)誤率低(即,你的模型在訓(xùn)練集上錯(cuò)誤不多),但是推廣錯(cuò)誤率高,意味著模型對(duì)訓(xùn)練數(shù)據(jù)過(guò)擬合。
提示:一般使用 80% 的數(shù)據(jù)進(jìn)行訓(xùn)練,保留20%用于測(cè)試。
因此,評(píng)估一個(gè)模型很簡(jiǎn)單:只要使用測(cè)試集。現(xiàn)在假設(shè)你在兩個(gè)模型之間猶豫不決(比如一個(gè)線性模型和一個(gè)多項(xiàng)式模型):如何做決定呢?一種方法是兩個(gè)都訓(xùn)練,,然后比較在測(cè)試集上的效果。
現(xiàn)在假設(shè)線性模型的效果更好,但是你想做一些正則化以避免過(guò)擬合。問(wèn)題是:如何選擇正則化超參數(shù)的值?一種選項(xiàng)是用 100 個(gè)不同的超參數(shù)訓(xùn)練100個(gè)不同的模型。假設(shè)你發(fā)現(xiàn)最佳的超參數(shù)的推廣錯(cuò)誤率最低,比如只有 5%。然后就選用這個(gè)模型作為生產(chǎn)環(huán)境,但是實(shí)際中性能不佳,誤差率達(dá)到了 15%。發(fā)生了什么呢?
答案在于,你在測(cè)試集上多次測(cè)量了推廣誤差率,調(diào)整了模型和超參數(shù),以使模型最適合這個(gè)集合。這意味著模型對(duì)新數(shù)據(jù)的性能不會(huì)高。
這個(gè)問(wèn)題通常的解決方案是,再保留一個(gè)集合,稱作驗(yàn)證集合。用測(cè)試集和多個(gè)超參數(shù)訓(xùn)練多個(gè)模型,選擇在驗(yàn)證集上有最佳性能的模型和超參數(shù)。當(dāng)你對(duì)模型滿意時(shí),用測(cè)試集再做最后一次測(cè)試,以得到推廣誤差率的預(yù)估。
為了避免“浪費(fèi)”過(guò)多訓(xùn)練數(shù)據(jù)在驗(yàn)證集上,通常的辦法是使用交叉驗(yàn)證:訓(xùn)練集分成互補(bǔ)的子集,每個(gè)模型用不同的子集訓(xùn)練,再用剩下的子集驗(yàn)證。一旦確定模型類型和超參數(shù),最終的模型使用這些超參數(shù)和全部的訓(xùn)練集進(jìn)行訓(xùn)練,用測(cè)試集得到推廣誤差率。
沒(méi)有免費(fèi)午餐公理
模型是觀察的簡(jiǎn)化版本。簡(jiǎn)化意味著舍棄無(wú)法進(jìn)行推廣的表面細(xì)節(jié)。但是,要確定舍棄什么數(shù)據(jù)、保留什么數(shù)據(jù),必須要做假設(shè)。例如,線性模型的假設(shè)是數(shù)據(jù)基本上是線性的,實(shí)例和模型直線間的距離只是噪音,可以放心忽略。
在一篇 1996 年的著名論文中,David Wolpert 證明,如果完全不對(duì)數(shù)據(jù)做假設(shè),就沒(méi)有理由選擇一個(gè)模型而不選另一個(gè)。這稱作沒(méi)有免費(fèi)午餐(NFL)公理。對(duì)于一些數(shù)據(jù)集,最佳模型是線性模型,而對(duì)其它數(shù)據(jù)集是神經(jīng)網(wǎng)絡(luò)。沒(méi)有一個(gè)模型可以保證效果更好(如這個(gè)公理的名字所示)。確信的唯一方法就是測(cè)試所有的模型。因?yàn)檫@是不可能的,實(shí)際中就必須要做一些對(duì)數(shù)據(jù)合理的假設(shè),只評(píng)估幾個(gè)合理的模型。例如,對(duì)于簡(jiǎn)單任務(wù),你可能是用不同程度的正則化評(píng)估線性模型,對(duì)于復(fù)雜問(wèn)題,你可能要評(píng)估幾個(gè)神經(jīng)網(wǎng)絡(luò)模型。
-
機(jī)器學(xué)習(xí)
+關(guān)注
關(guān)注
66文章
8438瀏覽量
132928
原文標(biāo)題:【翻譯】Sklearn 與 TensorFlow 機(jī)器學(xué)習(xí)實(shí)用指南 —— 第1章 機(jī)器學(xué)習(xí)概覽(下)
文章出處:【微信號(hào):AI_shequ,微信公眾號(hào):人工智能愛(ài)好者社區(qū)】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論