机器学习笔记八之机器学习系统设计
本節(jié)目錄:
1 如何選擇并表達特征向量
2 誤差分析
3 類偏斜的誤差度量
4 查準(zhǔn)率和查全率之間的權(quán)衡
5 機器學(xué)習(xí)的數(shù)據(jù)
1如何選擇并表達特征向量
選擇一個由 100 個最常出現(xiàn)在垃圾郵件中的詞所構(gòu)成的列表,根據(jù)這些詞是否有在郵件中
出現(xiàn),來獲得我們的特征向量(出現(xiàn)為 1,不出現(xiàn)為 0),尺寸為 100×1。
為了構(gòu)建這個分類器算法,我們可以做很多事,例如:
在上面這些選項中,非常難決定應(yīng)該在哪一項上花費時間和精力,作出明智的選擇,比
隨著感覺走要更好。當(dāng)我們使用機器學(xué)習(xí)時,總是可以“頭腦風(fēng)暴”一下,想出一堆方法來試
試。實際上,當(dāng)你需要通過頭腦風(fēng)暴來想出不同方法來嘗試去提高精度的時候,你可能已經(jīng)
超越了很多人了。大部分人并不嘗試著列出可能的方法,他們做的只是某天早上醒來,因為
某些原因有了一個突發(fā)奇想.
2 誤差分析
誤差分析幫助你更系統(tǒng)地做決定。如果你準(zhǔn)備研究機器學(xué)習(xí)的東西,或者構(gòu)造機器學(xué)習(xí)應(yīng)用程序,最好的實踐方法是構(gòu)建一個簡單的算法,這樣你可以很快地實現(xiàn)它。這樣即使運行效果不好,也要把他再運行一遍,最后通過交叉驗證檢驗數(shù)據(jù)。做完這些工作,畫出學(xué)習(xí)曲線,檢驗誤差,找出算法的問題或是否有高偏差和高方差問題。
即:當(dāng)我們在構(gòu)造垃圾郵件分類器時,我會看一看我的交叉驗證數(shù)據(jù)集,然后親自看一看哪些郵件被算法錯誤地分類。因此,通過這些被算法錯誤分類的垃圾郵件與非垃圾郵件,你可以發(fā)現(xiàn)某些系統(tǒng)
性的規(guī)律:什么類型的郵件總是被錯誤分類。經(jīng)常地這樣做之后,這個過程能啟發(fā)你構(gòu)造新
的特征變量,或者告訴你:現(xiàn)在這個系統(tǒng)的短處,然后啟發(fā)你如何去提高它。
構(gòu)建一個學(xué)習(xí)算法的推薦方法為:
5. 從一個簡單的能快速實現(xiàn)的算法開始,實現(xiàn)該算法并用交叉驗證集數(shù)據(jù)測試這個算
法
6. 繪制學(xué)習(xí)曲線,決定是增加更多數(shù)據(jù),或者添加更多特征,還是其他選擇
7. 進行誤差分析:人工檢查交叉驗證集中我們算法中產(chǎn)生預(yù)測誤差的實例,看看這些實例是否有某種系統(tǒng)化的趨勢。
以我們的垃圾郵件過濾器為例,誤差分析要做的既是檢驗交叉驗證集中我們的算法產(chǎn)生
錯誤預(yù)測的所有郵件,看:是否能將這些郵件按照類分組。例如醫(yī)藥品垃圾郵件,仿冒品垃
圾郵件或者密碼竊取郵件等。然后看分類器對哪一組郵件的預(yù)測誤差最大,并著手優(yōu)化。
思考怎樣能改進分類器。例如,發(fā)現(xiàn)是否缺少某些特征,記下這些特征出現(xiàn)的次數(shù)。
例如記錄下錯誤拼寫出現(xiàn)了多少次,異常的郵件路由情況出現(xiàn)了多少次等等,然后從
出現(xiàn)次數(shù)最多的情況開始著手優(yōu)化。
誤差分析并不總能幫助我們判斷應(yīng)該采取怎樣的行動。有時我們需要嘗試不同的模型,
然后進行比較,在模型比較時,用數(shù)值來判斷哪一個模型更好更有效,通常我們是看交叉驗
證集的誤差。
因此,當(dāng)你在構(gòu)造學(xué)習(xí)算法的時候,你總是會去嘗試很多新的想法,實現(xiàn)出很多版本的
學(xué)習(xí)算法,如果每一次你實踐新想法的時候,你都要手動地檢測這些例子,去看看是表現(xiàn)差
還是表現(xiàn)好,那么這很難讓你做出決定。到底是否使用詞干提取,是否區(qū)分大小寫。但是通
過一個量化的數(shù)值評估,你可以看看這個數(shù)字,誤差是變大還是變小了。你可以通過它更快
地實踐你的新想法,它基本上非常直觀地告訴你:你的想法是提高了算法表現(xiàn),還是讓它變
得更壞,這會大大提高你實踐算法時的速度。所以我強烈推薦在交叉驗證集上來實施誤差分
析,而不是在測試集上。
3 類偏斜的誤差度量
設(shè)定某個實數(shù)來評估你的學(xué)習(xí)算法,并衡量它的表現(xiàn),有了算法的評估和誤差度量值。有一件重
要的事情要注意,就是使用一個合適的誤差度量值,這有時會對于你的學(xué)習(xí)算法造成非常微
妙的影響,這件重要的事情就是偏斜類(skewed classes)的問題。類偏斜情況表現(xiàn)為我們的
訓(xùn)練集中有非常多的同一種類的實例,只有很少或沒有其他類的實例。
查準(zhǔn)率(Precision)和查全率(Recall) 我們將算法預(yù)測的結(jié)果分成四種情況:
則:查準(zhǔn)率=TP/(TP+FP)。例,在所有我們預(yù)測有惡性腫瘤的病人中,實際上有惡性腫
瘤的病人的百分比,越高越好。
查全率=TP/(TP+FN)。例,在所有實際上有惡性腫瘤的病人中,成功預(yù)測有惡性腫瘤的
病人的百分比,越高越好。
4.查準(zhǔn)率和查全率之間的平衡
在很多應(yīng)用中,我們希望能夠保證查準(zhǔn)率和召回率的相對平衡。
如果我們希望只在非常確信的情況下預(yù)測為真(腫瘤為惡性),即我們希望更高的查
準(zhǔn)率,我們可以使用比 0.5 更大的閥值,如 0.7,0.9。這樣做我們會減少錯誤預(yù)測病人為惡
性腫瘤的情況,同時卻會增加未能成功預(yù)測腫瘤為惡性的情況。
如果我們希望提高查全率,盡可能地讓所有有可能是惡性腫瘤的病人都得到進一步地
檢查、診斷,我們可以使用比 0.5 更小的閥值,如 0.3。
我們可以將不同閥值情況下,查全率與查準(zhǔn)率的關(guān)系繪制成圖表,曲線的形狀根據(jù)數(shù)
據(jù)的不同而不同:
一種選擇這個閾值的方法 是計算F1值 :
我們選擇使得 F1 值最高的閥值。
5 機器學(xué)習(xí)數(shù)據(jù)
得到大量的數(shù)據(jù)并在某種類型的學(xué)習(xí)算法中進行訓(xùn)練,可以是一種有效的方法來
獲得一個具有良好性能的學(xué)習(xí)算法。而這種情況往往出現(xiàn)在這些條件對于你的問題都成立。
并且你能夠得到大量數(shù)據(jù)的情況下。這可以是一個很好的方式來獲得非常高性能的學(xué)習(xí)算
法。
改變了訓(xùn)練數(shù)據(jù)集的大小,并嘗試將這些學(xué)習(xí)算法用于不同大小的訓(xùn)練數(shù)據(jù)集中,他們得到的結(jié)果
這些趨勢非常明顯,首先大部分算法,都具有相似的性能,其次,隨著訓(xùn)練數(shù)據(jù)集的增
大,在橫軸上代表以百萬為單位的訓(xùn)練集大小,從 0.1 個百萬到 1000 百萬,也就是到了 10
億規(guī)模的訓(xùn)練集的樣本,這些算法的性能也都對應(yīng)地增強了。
事實上,如果你選擇任意一個算法,可能是選擇了一個"劣等的"算法,如果你給這個劣
等算法更多的數(shù)據(jù),那么從這些例子中看起來的話,它看上去很有可能會其他算法更好,甚
至?xí)?#34;優(yōu)等算法"更好。由于這項原始的研究非常具有影響力,因此已經(jīng)有一系列許多不同
的研究顯示了類似的結(jié)果。這些結(jié)果表明,許多不同的學(xué)習(xí)算法有時傾向于表現(xiàn)出非常相似
的表現(xiàn),這還取決于一些細節(jié),但是真正能提高性能的,是你能夠給一個算法大量的訓(xùn)練數(shù)
據(jù)。
那么這種說法在什么時候是真,什么時候是假呢?因為如果我們有一個學(xué)習(xí)算法,并且
如果這種說法是真的,那么得到大量的數(shù)據(jù)通常是保證我們具有一個高性能算法的最佳方
式,而不是去爭辯應(yīng)該用什么樣的算法。
假如有這樣一些假設(shè),在這些假設(shè)下有大量我們認為有用的訓(xùn)練集,我們假設(shè)在我們的
機器學(xué)習(xí)問題中,特征值𝑥包含了足夠的信息,這些信息可以幫助我們用來準(zhǔn)確地預(yù)測𝑦。
現(xiàn)在假設(shè)我們使用了非常非常大的訓(xùn)練集,在這種情況下,盡管我們希望有很多參數(shù),
但是如果訓(xùn)練集比參數(shù)的數(shù)量還大,甚至是更多,那么這些算法就不太可能會過度擬合。也
就是說訓(xùn)練誤差有希望接近測試誤差。
另一種考慮這個問題的角度是為了有一個高性能的學(xué)習(xí)算法,我們希望它不要有高的
偏差和方差。
因此偏差問題,我們將通過確保有一個具有很多參數(shù)的學(xué)習(xí)算法來解決,以便我們能
夠得到一個較低偏差的算法,并且通過用非常大的訓(xùn)練集來保證。
我們在此沒有方差問題,我們的算法將沒有方差,并且通過將這兩個值放在一起,我們
最終可以得到一個低誤差和低方差的學(xué)習(xí)算法。這使得我們能夠很好地測試數(shù)據(jù)集。從
根本上來說,這是一個關(guān)鍵的假設(shè):特征值有足夠的信息量,且我們有一類很好的函數(shù),這
是為什么能保證低誤差的關(guān)鍵所在。它有大量的訓(xùn)練數(shù)據(jù)集,這能保證得到更多的方差值,
因此這給我們提出了一些可能的條件,如果你有大量的數(shù)據(jù),而且你訓(xùn)練了一種帶有很多參
數(shù)的學(xué)習(xí)算法,那么這將會是一個很好的方式,來提供一個高性能的學(xué)習(xí)算法。
我覺得關(guān)鍵的測試:首先,一個人類專家看到了特征值 𝑥,能很有信心的預(yù)測出𝑦值嗎?
因為這可以證明 𝑦 可以根據(jù)特征值𝑥被準(zhǔn)確地預(yù)測出來。其次,我們實際上能得到一組龐大
的訓(xùn)練集,并且在這個訓(xùn)練集中訓(xùn)練一個有很多參數(shù)的學(xué)習(xí)算法嗎?如果你不能做到這兩
者,那么更多時候,你會得到一個性能很好的學(xué)習(xí)算法。
總結(jié)
以上是生活随笔為你收集整理的机器学习笔记八之机器学习系统设计的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: GPU 编程入门到精通(一)之 CUDA
- 下一篇: 福建农林大学转录系统生物学课题组30万招