機(jī)器學(xué)習(xí)系統(tǒng)的設(shè)計(jì)與調(diào)優(yōu)

本文以設(shè)計(jì)一個(gè)垃圾郵件過濾系統(tǒng)為例浪感,談?wù)勅绾卧O(shè)計(jì)一個(gè)機(jī)器學(xué)習(xí)系統(tǒng)更卒。同時(shí)介紹查準(zhǔn)率,召回率以及 F1Score 來評(píng)價(jià)算法的性能洛口。

構(gòu)建垃圾郵件過濾系統(tǒng)

特征選擇

在實(shí)踐中矫付,可以遍歷所有的訓(xùn)練數(shù)據(jù)集,即所有的垃圾郵件和所有的非垃圾郵件第焰,找出出現(xiàn)頻率最高的 10,000 - 50,000 個(gè)單詞作為特征买优,假設(shè)特征數(shù)量記為 n。這樣一封郵件就可以用一個(gè) n 維向量來表示挺举,即 n 個(gè)特征單詞是否出現(xiàn)在郵件里杀赢,如果出現(xiàn)記為 1 不出現(xiàn)記為 0 。

構(gòu)建步驟

  • 收集盡量多的數(shù)據(jù)湘纵,如 honeypot 項(xiàng)目
  • 從郵件路由信息中提取出有效的特征來區(qū)分垃圾郵件脂崔,路由信息放在郵件頭部
  • 從郵件的內(nèi)容中提取復(fù)雜特征
  • 開發(fā)一套算法來檢查拼寫錯(cuò)誤。因?yàn)楹芏嗨惴◤泥]件內(nèi)容中通過關(guān)鍵字為特征來區(qū)分垃圾郵件梧喷,垃圾郵件系統(tǒng)為了跳過這個(gè)檢查砌左,故意把一些敏感詞拼錯(cuò),這樣規(guī)避垃圾郵件檢查機(jī)制

至于哪個(gè)方法是最有效的铺敌,需要頭腦風(fēng)暴或者事先詳細(xì)研究才能得出結(jié)論汇歹。當(dāng)然,在算法通過檢驗(yàn)之前偿凭,很難事先判斷哪個(gè)特征是最有效的产弹。

錯(cuò)誤分析

用機(jī)器學(xué)習(xí)算法解決問題時(shí),可以償試如下的策略

  • 從簡(jiǎn)單的算法開始弯囊,先實(shí)現(xiàn)出來痰哨,然后使用交叉驗(yàn)證數(shù)據(jù)來驗(yàn)證結(jié)果。
  • 畫出學(xué)習(xí)曲線常挚,診斷算法的問題和優(yōu)化方向作谭,是需要去獲取更多訓(xùn)練數(shù)據(jù)還是要增加特征等稽物。
  • 錯(cuò)誤分析:針對(duì)交叉驗(yàn)證數(shù)據(jù)的錯(cuò)誤項(xiàng)進(jìn)行手動(dòng)分析奄毡,試圖從這些錯(cuò)誤結(jié)果里找出更多線索和特征。

錯(cuò)誤分析實(shí)例

假設(shè)我們實(shí)現(xiàn)的垃圾郵件過濾算法贝或,針對(duì) 500 封交叉驗(yàn)證數(shù)據(jù)里有 100 封被錯(cuò)誤分類了吼过,那么我們可以進(jìn)行

  1. 手動(dòng)檢查這些被錯(cuò)誤分類的郵件類型,比如釣魚郵件咪奖,賣藥的郵件等等盗忱,通過手動(dòng)分析總結(jié)出哪種類型的郵件被錯(cuò)誤地分類數(shù)量最多,然后先把精力花在這種類型的郵件上面羊赵。
  2. 有哪些線索或特征有助于算法正確鑒別這些郵件趟佃。比如通過分析扇谣,我們發(fā)現(xiàn)異常路由的郵件數(shù)量有多少,錯(cuò)誤拼寫的郵件有多少闲昭,異常標(biāo)點(diǎn)符號(hào)的郵件有多少罐寨。通過總結(jié)這些特征,決定我們應(yīng)該要把時(shí)間花在哪方面來改善算法性能序矩。

比如鸯绿,我們?cè)趯?shí)現(xiàn)垃圾郵件鑒別算法時(shí),我們需要決定 Dicount/Discounts/Discounted/Discouting 等單詞視為同一個(gè)單詞還是不同的單詞簸淀。如果要視為相同的單詞瓶蝴,可以使用詞干提取法 (Porter Stemmer) ,但使用詞干提取法一樣會(huì)帶來問題租幕,比如會(huì)錯(cuò)誤地把 universe/university 歸類為同一個(gè)單詞舷手。這個(gè)時(shí)候如何決策呢?

一個(gè)可行的辦法是分別計(jì)算使用了詞干提取法和不使用時(shí)候的交叉驗(yàn)證數(shù)據(jù)集成本 $J_{cv}(\theta)$ 和測(cè)試數(shù)據(jù)集成本 $J_{test}(\theta)$ 劲绪,這樣來判斷到底是使用更好還是不使用性能更好聚霜。

實(shí)際上,優(yōu)化算法過程中的很多償試都可以使用這個(gè)方法來判斷是否是有效的優(yōu)化策略珠叔。

處理有傾向性的數(shù)據(jù)

比如針對(duì)癌癥篩查算法蝎宇,根據(jù)統(tǒng)計(jì),普通腫瘤中癌癥的概率是 0.5% 祷安。我們有個(gè)機(jī)器學(xué)習(xí)算法姥芥,在交叉驗(yàn)證數(shù)據(jù)時(shí)得出的準(zhǔn)確率是 99.2%,錯(cuò)誤率是 0.8% 汇鞭。這個(gè)算法到底是好還是壞呢凉唐?如果努力改進(jìn)算法,最終在交叉驗(yàn)證數(shù)據(jù)集上得出的準(zhǔn)確率是 99.5%霍骄,錯(cuò)誤率是 0.5% 到底算法性能是提高了還是降低了呢台囱?

坦白講,如果單純從交叉驗(yàn)證數(shù)據(jù)集上測(cè)試準(zhǔn)確率的方法很難進(jìn)行判斷到底算法是變好了還是變壞了读整。因?yàn)檫@個(gè)事情的先驗(yàn)概率太低了簿训,假如我們寫了一個(gè)超級(jí)簡(jiǎn)單的預(yù)測(cè)函數(shù),總是返回 0米间,即總是認(rèn)為不會(huì)得癌癥强品,那么我們這個(gè)超級(jí)簡(jiǎn)單的預(yù)測(cè)函數(shù)在交叉驗(yàn)證數(shù)據(jù)集上得到的準(zhǔn)確率是 99.5%,錯(cuò)誤率是 0.5% 屈糊。因?yàn)榭傮w而言的榛,只有那 0.5% 真正得癌癥的可憐蟲被我們誤判了。

那么我們?cè)趺礃觼砗饬糠诸悊栴}的準(zhǔn)確性能呢逻锐?我們引入了另外兩個(gè)概念夫晌,查準(zhǔn)率 (Precision)召回率 (Recall)雕薪。還是以癌癥篩查為例:

預(yù)測(cè)數(shù)據(jù)/實(shí)際數(shù)據(jù) 實(shí)際惡性腫瘤 實(shí)際良性腫瘤
預(yù)測(cè)惡性腫瘤 TruePositive FalsePositive
預(yù)測(cè)良性腫瘤 FalseNegative TrueNegative
查準(zhǔn)率和召回率

在處理先驗(yàn)概率低的問題時(shí),我們總是把概率較低的事件定義為 1 晓淀,并且總是把 $y=1$ 作為 Positive 的預(yù)測(cè)結(jié)果蹦哼。有了這個(gè)公式,如果一個(gè)簡(jiǎn)單地返回 0 的預(yù)測(cè)函數(shù)要糊,那么它的查準(zhǔn)率和召回率都為 0纲熏。這顯然不是個(gè)好的預(yù)測(cè)模型。

TIPS

如何理解 True/FalsePositive/Negative 锄俄?True/False 表示預(yù)測(cè)結(jié)果是否正確局劲,而 Positive/Negative 表示預(yù)測(cè)結(jié)果是 1 (惡性腫瘤) 或 0 (良性腫瘤)。故奶赠,TruePositive 表示正確地預(yù)測(cè)出惡性腫瘤的數(shù)量鱼填;FalsePositive 表示錯(cuò)誤地預(yù)測(cè)出惡性腫瘤的數(shù)量;FalseNegative 表示錯(cuò)誤地預(yù)測(cè)出良性腫瘤的數(shù)量毅戈。

在查準(zhǔn)率和召回率之間權(quán)衡

假設(shè)我們想提高癌癥的查準(zhǔn)率苹丸,即只有在很有把握的情況下才預(yù)測(cè)為癌癥∥回憶我們?cè)谶壿嫽貧w算法里赘理,當(dāng) $h_\theta(x) >= 0.5$ 時(shí),我們就預(yù)測(cè) $y = 1$ 扇单,為了提高查準(zhǔn)率商模,可以把門限值從 0.5 提高到 0.8 之類的。這樣就提高了查準(zhǔn)率蜘澜,但這樣會(huì)降低召回率施流。同樣的道理,我們?nèi)绻胩岣哒倩芈时尚牛梢越档烷T限值瞪醋,從 0.5 降到 0.3 。這樣召回率就會(huì)提高装诡,但查準(zhǔn)率就會(huì)降低银受。所以在實(shí)際問題時(shí),可以要接實(shí)際問題慎王,去判斷是查準(zhǔn)率重要還是召回率重要蚓土,根據(jù)重要性去調(diào)整門限值宏侍。

如何評(píng)價(jià)算法的好壞

由于我們現(xiàn)在有兩個(gè)指標(biāo)赖淤,查準(zhǔn)率和如回率,如果有一個(gè)算法的查準(zhǔn)率是 0.5, 召回率是 0.4谅河;另外一個(gè)算法查準(zhǔn)率是 0.02, 召回率是 1.0咱旱;那么兩個(gè)算法到底哪個(gè)好呢确丢?

為了解決這個(gè)問題,我們引入了 $F_1Score$ 的概念

F1Score

其中 P 是查準(zhǔn)率吐限,R 是召回率鲜侥。這樣就可以用一個(gè)數(shù)值直接判斷哪個(gè)算法性能更好。典型地诸典,如果查準(zhǔn)率或召回率有一個(gè)為 0描函,那么 $F_1Score$ 將會(huì)為 0。而理想的情況下狐粱,查準(zhǔn)率和召回率都為 1 舀寓,則算出來的 $F_1Score$ 為 1。這是最理想的情況肌蜻。

自動(dòng)選擇門限值

前文介紹過互墓,門限值可以調(diào)節(jié)查準(zhǔn)率和召回率的高低。那么如何自動(dòng)選擇門限值以便讓算法的性能最優(yōu)呢蒋搜?我們可以使用交叉驗(yàn)證數(shù)據(jù)篡撵,算出使 $F_1Score$ 最大的門限值。這個(gè)值就是我們自動(dòng)選擇出來的最優(yōu)的門限值豆挽。

使用大量的數(shù)據(jù)集

Michele Banko and Eric Brill 在 2011 年用四種算法進(jìn)行了一個(gè)自然語言的機(jī)器學(xué)習(xí)訓(xùn)練育谬,結(jié)果發(fā)現(xiàn),數(shù)據(jù)量越大帮哈,訓(xùn)練出來的算法準(zhǔn)確性越高斑司。他們得出了下圖的結(jié)論。

Accuracy and data size

然后這個(gè)結(jié)論是些前提:有足夠的特征進(jìn)行機(jī)器學(xué)習(xí)但汞。怎么樣判斷是否有足夠的特征呢宿刮?我們可以讓這個(gè)領(lǐng)域的專家來人工預(yù)測(cè)。比如給出一個(gè)房子的面積私蕾,讓房產(chǎn)經(jīng)紀(jì)人預(yù)測(cè)其房?jī)r(jià)僵缺,他肯定無法正確地預(yù)測(cè)。因?yàn)樘卣鞑蛔悴劝龋茈y只根據(jù)房子的面積推算出房子的價(jià)格磕潮。

怎么樣從理論上證明這個(gè)結(jié)論呢?我們知道容贝,如果我們有足夠的特征來進(jìn)行預(yù)測(cè)自脯,意味著我們可以構(gòu)建足夠復(fù)雜的模型(比如神經(jīng)網(wǎng)絡(luò))來讓我們的預(yù)測(cè)函數(shù)有比較低的偏差 (Low Bais),即讓訓(xùn)練數(shù)據(jù)集成本 $J_{train}(\theta)$ 的值很小斤富。如果我們有足夠多的數(shù)據(jù)膏潮,就可以確保我們可以訓(xùn)練出一個(gè)低方差 (Low Variance) 的算法,即我們可以讓交叉驗(yàn)證數(shù)據(jù)集成本 $J_{cv}(\theta)$ 接近訓(xùn)練數(shù)據(jù)集成本 $J_{train}(\theta)$ 满力。這樣最終我們的測(cè)試數(shù)據(jù)集成本 $J_{test}(\theta)$ 也會(huì)靠近訓(xùn)練數(shù)據(jù)集成本 $J_{train}(\theta)$ 焕参。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末轻纪,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子叠纷,更是在濱河造成了極大的恐慌刻帚,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,591評(píng)論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件涩嚣,死亡現(xiàn)場(chǎng)離奇詭異崇众,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)航厚,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,448評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門校摩,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人阶淘,你說我怎么就攤上這事衙吩。” “怎么了溪窒?”我有些...
    開封第一講書人閱讀 162,823評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵坤塞,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我澈蚌,道長(zhǎng)摹芙,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,204評(píng)論 1 292
  • 正文 為了忘掉前任宛瞄,我火速辦了婚禮浮禾,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘份汗。我一直安慰自己盈电,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,228評(píng)論 6 388
  • 文/花漫 我一把揭開白布杯活。 她就那樣靜靜地躺著匆帚,像睡著了一般。 火紅的嫁衣襯著肌膚如雪旁钧。 梳的紋絲不亂的頭發(fā)上吸重,一...
    開封第一講書人閱讀 51,190評(píng)論 1 299
  • 那天,我揣著相機(jī)與錄音歪今,去河邊找鬼嚎幸。 笑死,一個(gè)胖子當(dāng)著我的面吹牛寄猩,可吹牛的內(nèi)容都是我干的嫉晶。 我是一名探鬼主播,決...
    沈念sama閱讀 40,078評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼车遂!你這毒婦竟也來了封断?” 一聲冷哼從身側(cè)響起斯辰,我...
    開封第一講書人閱讀 38,923評(píng)論 0 274
  • 序言:老撾萬榮一對(duì)情侶失蹤舶担,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后彬呻,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體衣陶,經(jīng)...
    沈念sama閱讀 45,334評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,550評(píng)論 2 333
  • 正文 我和宋清朗相戀三年闸氮,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了剪况。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,727評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡蒲跨,死狀恐怖译断,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情或悲,我是刑警寧澤孙咪,帶...
    沈念sama閱讀 35,428評(píng)論 5 343
  • 正文 年R本政府宣布,位于F島的核電站巡语,受9級(jí)特大地震影響翎蹈,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜男公,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,022評(píng)論 3 326
  • 文/蒙蒙 一荤堪、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧枢赔,春花似錦澄阳、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,672評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至执隧,卻和暖如春揩抡,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背镀琉。 一陣腳步聲響...
    開封第一講書人閱讀 32,826評(píng)論 1 269
  • 我被黑心中介騙來泰國(guó)打工峦嗤, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人屋摔。 一個(gè)月前我還...
    沈念sama閱讀 47,734評(píng)論 2 368
  • 正文 我出身青樓烁设,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子装黑,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,619評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容