十七饮戳、更新預(yù)測
譯者:飛龍
協(xié)議:CC BY-NC-SA 4.0
自豪地采用谷歌翻譯
我們知道如何使用訓(xùn)練數(shù)據(jù)將一個(gè)點(diǎn)劃分為兩類之一。 我們的分類只是對類別的預(yù)測洞拨,基于最接近我們的新點(diǎn)的扯罐,訓(xùn)練點(diǎn)中最常見的類別。
假設(shè)我們最終發(fā)現(xiàn)了我們的新點(diǎn)的真實(shí)類別烦衣。 然后我們會知道我們的分類是否正確歹河。 另外掩浙,我們將會有一個(gè)新點(diǎn),可以加入到我們的訓(xùn)練集中秸歧,因?yàn)槲覀冎浪念悇e厨姚。 這就更新了我們的訓(xùn)練集。 所以键菱,我們自然希望谬墙,根據(jù)新的訓(xùn)練集更新我們的分類器。
本章將介紹一些簡單的情況经备,其中新的數(shù)據(jù)會使我們更新我們的預(yù)測拭抬。 雖然本章中的例子在計(jì)算方面較簡單,但是更新方法可以推廣到復(fù)雜的設(shè)定侵蒙,是機(jī)器學(xué)習(xí)最強(qiáng)大的工具之一造虎。
“更可能”的二分類器
讓我們嘗試使用數(shù)據(jù),將一個(gè)點(diǎn)劃分為兩個(gè)類別之一纷闺,選擇我們認(rèn)為更可能的類別算凿。 為此,我們不僅需要數(shù)據(jù)犁功,而且還要清楚地描述幾率是什么樣氓轰。
我們將從一個(gè)簡單的人造情況開始,開發(fā)主要的技術(shù)波桩,然后跳到更有趣的例子。
假設(shè)有個(gè)大學(xué)班級请敦,其組成如下:
- 60% 的學(xué)生為二年級镐躲,其余的 40% 是三年級
- 50% 二年級學(xué)生已經(jīng)聲明了他們的專業(yè)
- 80% 三年級學(xué)生已經(jīng)聲明了他們的專業(yè)
現(xiàn)在假設(shè)我從班上隨機(jī)挑選一個(gè)學(xué)生。 你能否用“更可能”的標(biāo)準(zhǔn)侍筛,將學(xué)生劃分為二年級或三年級萤皂?
你可以,因?yàn)檫@個(gè)學(xué)生是隨機(jī)挑選的匣椰,所以你知道這個(gè)學(xué)生是二年級的幾率是 60%裆熙。 這比三年級的 40% 的可能性更大,所以你會把學(xué)生劃分為二年級禽笑。
專業(yè)的信息是無關(guān)緊要的入录,因?yàn)槲覀円呀?jīng)知道班上二,三年的比例佳镜。
我們有了非常簡單的分類器僚稿! 但是現(xiàn)在假設(shè)我給了你一些被挑選的學(xué)生的更多信息:
這個(gè)學(xué)生已經(jīng)聲明了專業(yè)。
這個(gè)知識會改變你的分類嗎蟀伸?
基于新信息更新預(yù)測
現(xiàn)在我們知道學(xué)生已經(jīng)宣布了專業(yè)蚀同,重要的是要看看年級和專業(yè)聲明的關(guān)系缅刽。 二年級的學(xué)生比三年級多,這仍然正確蠢络。 但是衰猛,三年級的學(xué)生,比二年級的學(xué)生刹孔,聲明專業(yè)的比例更高啡省,這也是事實(shí)。 我們的分類器必須考慮到這兩個(gè)觀察芦疏。
為了使這個(gè)可視化冕杠,我們將使用students
表,它包含 100 個(gè)學(xué)生酸茴,每個(gè)學(xué)生一行分预,學(xué)生的年級和專業(yè)比例和數(shù)據(jù)中相同。
students.show(3)
Year | Major |
---|---|
Second | Undeclared |
Second | Undeclared |
Second | Undeclared |
(省略了 97 行)
為了檢查比例是否正確薪捍,我們使用pivot
笼痹,按照這兩個(gè)變量對每個(gè)學(xué)生進(jìn)行交叉分類。
students.pivot('Major', 'Year')
Year | Declared | Undeclared |
---|---|---|
Second | 30 | 30 |
Third | 32 | 8 |
https://gitee.com/wizardforcel/data8-textbook-zh/raw/master/img/17-1.png
總?cè)藬?shù)為 100 人酪穿,其中二年級 60 人凳干,三年級 40 人。 二年級中被济,每個(gè)專業(yè)類別有 50%救赐。 三年級的 40 人中,20% 是未聲明的只磷,80% 已聲明经磅。 因此,這 100 人的比例和我們問題中的班級相同钮追,我們可以假定预厌,我們的學(xué)生是從 100 名學(xué)生中隨機(jī)抽取的。
我們必須選擇學(xué)生最可能進(jìn)入的那一行元媚。當(dāng)我們對這個(gè)學(xué)生一無所知時(shí)轧叽,他或她可能在四個(gè)單元格中的任何一個(gè),因此更可能在第一行(二年級)刊棕,因?yàn)槟抢锇嗟膶W(xué)生炭晒。
但是現(xiàn)在我們知道這個(gè)學(xué)生已經(jīng)聲明了專業(yè),所以可能結(jié)果的空間已經(jīng)減少了:現(xiàn)在學(xué)生只能在兩個(gè)已聲明的單元格中的一個(gè)甥角。
這些單元格共有 62 名學(xué)生腰埂,其中 32 名是三年級。 這是一半以上蜈膨,即使不是太多屿笼。
所以牺荠,考慮到學(xué)生專業(yè)的新信息,我們必須更新我們的預(yù)測驴一,現(xiàn)在將學(xué)生劃分為三年級休雌。
我們的分類的正確幾率是多少? 對于所有聲明了專業(yè)的 32 個(gè)三年級肝断,我們是正確的杈曲,對于那 30 個(gè)二年級,我們是錯誤的胸懈。 因此担扑,我們的正確幾率大約是 0.516。
換句話說趣钱,我們正確幾率是聲明專業(yè)的學(xué)生中三年級的比例涌献。
32/(30+32)
0.5161290322580645
樹形圖
我們剛剛計(jì)算的比例基于 100 名學(xué)生。 但是班級沒有理由沒有 200 名學(xué)生首有,只要單元格中的所有比例都是正確的燕垃。 那么我們的計(jì)算就變成了64 /(60 + 64)
,就是 0.516井联。
所以計(jì)算只取決于不同類別的比例卜壕,而不是計(jì)數(shù)。 為了便于比較烙常,比例可以用樹形圖可視化轴捎,直接顯示在數(shù)據(jù)透視表下方。
students.pivot('Major', 'Year')
Year | Declared | Undeclared |
---|---|---|
Second | 30 | 30 |
Third | 32 | 8 |
像數(shù)據(jù)透視表一樣蚕脏,該圖將學(xué)生分成四個(gè)不同的組侦副,稱為“分支”。請注意蝗锥,“三年級已聲明”分支中的學(xué)生比例為0.4 x 0.8 = 0.32
跃洛,對應(yīng)于數(shù)據(jù)透視表中“三年級已聲明”單元格中的 32 名學(xué)生率触。 “二年級已聲明”分支中包含學(xué)生的0.6 x 0.5 = 0.3
终议,對應(yīng)于數(shù)據(jù)透視表中“二年級已聲明”單元格中的 30 個(gè)。
我們知道葱蝗,被挑選的學(xué)生屬于“已聲明”分支穴张。也就是說,學(xué)生在兩個(gè)頂層分支之一两曼。這兩個(gè)分支現(xiàn)在形成了我們的簡化概率空間皂甘,所有幾率的計(jì)算必須相對于這個(gè)簡化空間的總概率。
所以悼凑,考慮到學(xué)生已聲明專業(yè)偿枕,他們是三年級的幾率可以直接從樹中計(jì)算出來璧瞬。答案是相對于兩個(gè)“已聲明”分類的總比例,“三年級已聲明”分類的比例渐夸。
也就是說嗤锉,答案是和以前一樣,已聲明的學(xué)生中三年級的比例墓塌。
(0.4 * 0.8)/(0.6 * 0.5 + 0.4 * 0.8)
0.5161290322580645
貝葉斯法則
我們剛剛使用的方法來源于托馬斯·貝葉斯牧師(1701-1761)瘟忱。他的方法解決了所謂的“逆向概率”問題:假設(shè)有了新的數(shù)據(jù),如何更新之前發(fā)現(xiàn)的幾率苫幢?雖然貝葉斯生活在三個(gè)世紀(jì)之前访诱,但他的方法現(xiàn)在在機(jī)器學(xué)習(xí)中廣泛使用。
我們將在學(xué)生總體的背景下講述這個(gè)規(guī)則韩肝。首先触菜,一些術(shù)語:
先驗(yàn)概率。在我們知道所選學(xué)生的專業(yè)聲明狀態(tài)之前伞梯,學(xué)生是二年級的幾率是 60%玫氢,學(xué)生是三年級的幾率是 40%。這是兩個(gè)類別的先驗(yàn)概率谜诫。
可能性漾峡。這是專業(yè)狀態(tài)在給出學(xué)生類別情況下的幾率;因此可以從樹形圖中讀出喻旷。例如生逸,假設(shè)學(xué)生是二年級,已聲明的可能性是 0.5且预。
后驗(yàn)概率槽袄。這些是考慮專業(yè)聲明狀態(tài)的信息后,二年級的概率锋谐。我們計(jì)算了其中的一個(gè):
假設(shè)學(xué)生已經(jīng)聲明遍尺,學(xué)生是三年級的后驗(yàn)概率表示為 http://latex.codecogs.com/gif.latex?P%28%5Cmbox%7BThird%20Year%7D%20%7E%5Cbig%7B%7C%7D%7E%20%5Cmbox%7BDeclared%7D%29,計(jì)算如下涮拗。
另一個(gè)后驗(yàn)概率是:
(0.6 * 0.5)/(0.6 * 0.5 + 0.4 * 0.8)
0.4838709677419354
這大概是 0.484乾戏,還不到一半,與我們?nèi)甑姆诸愐恢隆?/p>
請注意三热,兩個(gè)后驗(yàn)概率的分母相同:新信息鼓择,也就是學(xué)生已聲明的幾率。
正因?yàn)槿绱司脱惾~斯方法有時(shí)被歸納為比例陳述:
公式非常便于高效地描述計(jì)算呐能。 但是在我們的學(xué)生示例這樣的情況中,不用公式來思考更簡單抑堡。 我們僅僅使用樹形圖摆出。
做出決策
貝葉斯規(guī)則的一個(gè)主要用途朗徊,是基于不完整的信息做出決策,并在新的信息到來時(shí)納入它們偎漫。本節(jié)指出了在決策時(shí)保持你的假設(shè)的重要性荣倾。
許多疾病的醫(yī)學(xué)檢測都會返回陽性或陰性結(jié)果。陽性結(jié)果意味著骑丸,根據(jù)檢測患者有疾病舌仍。陰性結(jié)果意味著,檢測的結(jié)論是患者沒有這種疾病通危。
醫(yī)學(xué)檢測經(jīng)過精心設(shè)計(jì)铸豁,非常準(zhǔn)確。但是很少有檢測是 100% 準(zhǔn)確的菊碟。幾乎所有檢測都有兩種錯誤:
假陽性是节芥,檢測結(jié)果為陽性,但患者沒有該疾病的錯誤逆害。
假陰性是头镊,檢測結(jié)果為陰性,但患者確實(shí)有這種疾病的錯誤魄幕。
這些錯誤可能會影響人們的決策相艇。假陽性可能引起焦慮和不必要的治療(在某些情況下,這是昂貴的或危險(xiǎn)的)纯陨。如果由于其陰性檢測結(jié)果坛芽,患者未接受治療,則假陰性可能具有更嚴(yán)重的后果翼抠。
罕見疾病的檢測
假設(shè)總體很大咙轩,疾病只占總體的一小部分。 下面的屬性圖總結(jié)了這種疾病的信息阴颖,以及它的醫(yī)學(xué)檢測活喊。
https://gitee.com/wizardforcel/data8-textbook-zh/raw/master/img/17-2.png
總的來說,只有千分之四的總體有這種疾病量愧。 檢測相當(dāng)準(zhǔn)確:假陽性幾率非常小钾菊,為 5/1000,但是假陰性更大(盡管還是很邢琅稀)结缚,為 1/100损晤。
個(gè)體可能知道也可能不知道他們是否患有這種疾踩砉住;通常情況下尤勋,人們會進(jìn)行檢測來確認(rèn)他們是否擁有喘落。
所以假設(shè)隨機(jī)從總體中挑選一個(gè)人并進(jìn)行檢測茵宪。 如果檢測結(jié)果是陽性的,你會如何分類:患病還是沒有患彩萜濉稀火?
我們可以通過應(yīng)用貝葉斯規(guī)則,和使用我們的“更可能”的分類器來回答這個(gè)問題赌朋。 鑒于該人已經(jīng)檢測出陽性凰狞,他或她患病的幾率是相對于Test Positive
分支中的總比例,頂層分支的比例沛慢。
(0.004 * 0.99)/(0.004 * 0.99 + 0.996*0.005 )
0.44295302013422816
鑒于這個(gè)人已經(jīng)檢測出陽性赡若,他或她有這種疾病的幾率是大約 44%。 所以我們將它們分類為:沒有疾病团甲。
這是一個(gè)奇怪的結(jié)論逾冬。 我們有一個(gè)相當(dāng)準(zhǔn)確的檢測,一個(gè)人檢測出陽性躺苦,我們的分類是...他們沒有這種疾采砟濉? 這似乎沒有任何意義匹厘。
面對一個(gè)令人不安的答案嘀趟,首先要做的是檢查計(jì)算。 上面的算法是正確的愈诚。 我們來看看是否可以用不同的方式得到相同的答案去件。
函數(shù)population
群體返回 100,000 名患者的結(jié)果表格,它的列展示了實(shí)際情況和檢測結(jié)果扰路。 檢測與樹中描述的相同尤溜。 但是有這種疾病的比例是這個(gè)函數(shù)的參數(shù)。
我們將 0.004 用作參數(shù)來調(diào)用population
汗唱,然后調(diào)用pivot
宫莱,對這十萬人中的每一個(gè)人進(jìn)行交叉分類。
population(0.004).pivot('Test Result', 'True Condition')
True Condition | Negative | Positive |
---|---|---|
Disease | 4 | 396 |
No Disease | 99102 | 498 |
表的單元格計(jì)數(shù)正確哩罪。 例如授霸,根據(jù)總體的描述,一千人中有四人患有這種疾病际插。 表格中有十萬人碘耳,所以 400 人應(yīng)該有這種病。 這就是表格所顯示的:4 + 396 = 400
框弛。在這 400 認(rèn)中辛辨,99% 獲得了陽性檢測結(jié)果:0.99 x 400 = 396
。
396/(396 + 498)
0.4429530201342282
這就是我們通過使用貝葉斯規(guī)則得到的答案。Positives
列中的計(jì)數(shù)顯示為什么它小于 1/2斗搞。 在陽性的人中指攒,更多的人沒有疾病而不是有疾病。
原因是僻焚,很大一部分人沒有這種疾病允悦。檢測出假陽性的一小部分人比真陽性要多。 這在樹形圖中更容易可視化:
https://gitee.com/wizardforcel/data8-textbook-zh/raw/master/img/17-2.png
真陽性的比例是總體一小部分(0.004)的很大一部分(0.99)虑啤。
假陽性的比例是總體很大一部分(0.996)的一小部分(0.005)隙弛。
這兩個(gè)比例是可比的;第二個(gè)大一點(diǎn)狞山。
所以驶鹉,鑒于隨機(jī)選擇的人檢測為陽性,我們將他們劃分為铣墨,更有可能沒有疾病室埋,是正確的。
主觀先驗(yàn)
正確并不總令人滿意伊约。將陽性患者劃分為不患有該疾病似乎仍然有些錯誤姚淆,對于這樣的精確檢測來說。由于計(jì)算是正確的屡律,我們來看看我們的概率計(jì)算的基礎(chǔ):隨機(jī)性假設(shè)腌逢。
我們的假設(shè)是,一個(gè)隨機(jī)選擇的人進(jìn)行了檢測超埋,并得到了陽性結(jié)果搏讶。但是這在現(xiàn)實(shí)中并沒有發(fā)生。因?yàn)樗麄冋J(rèn)為他們可能有疾病霍殴,或者因?yàn)樗麄兊尼t(yī)生認(rèn)為他們可能有疾病媒惕,人們?nèi)ソ邮軝z測。被檢測的人不是隨機(jī)選擇的總體的成員来庭。
這就是為什么妒蔚,我們對被檢測者的直覺與我們得到的答案不太相符。我們正在想象一個(gè)病人接受檢測的現(xiàn)實(shí)情況月弛,因?yàn)橛幸恍├碛勺屗麄冞@樣做肴盏,而計(jì)算基于隨機(jī)選擇的人進(jìn)行檢測。
所以讓我們在更現(xiàn)實(shí)的假設(shè)下重做我們的計(jì)算帽衙,即病人正在接受檢測菜皂,因?yàn)獒t(yī)生認(rèn)為病人有發(fā)病的機(jī)會。
這里需要注意的是厉萝,“醫(yī)生認(rèn)為有機(jī)會”是指醫(yī)生的意見恍飘,而不是總體中的比例榨崩。這被稱為主觀概率。在病人是否患有這種疾病的情況下常侣,這也是主觀的先驗(yàn)概率。
一些研究人員堅(jiān)持認(rèn)為弹渔,所有的概率必須是相對的頻率胳施,但主觀概率導(dǎo)出都是。候選人贏得下一次選舉的幾率肢专,大地震在下一個(gè)十年將會襲擊灣區(qū)的幾率舞肆,某個(gè)國家贏得下一屆足球世界杯的幾率:這些都不是基于相對頻率或長期的頻率。每個(gè)都包含主觀因素博杖。涉及它們的所有計(jì)算也都有主觀因素椿胯。
假設(shè)醫(yī)生的主觀意見是,患者有 5% 的幾率患病剃根。那么樹形圖中的先驗(yàn)概率將會改變:
https://gitee.com/wizardforcel/data8-textbook-zh/raw/master/img/17-3.png
鑒于病人檢測為陽性哩盲,他或她有這種疾病的幾率是由貝葉斯規(guī)則給出。
(0.05 * 0.99)/(0.05 * 0.99 + 0.95 * 0.005)
0.9124423963133641
改變先驗(yàn)的效果是驚人的狈醉。 即使病人患病的醫(yī)生的先驗(yàn)概率(5%)很低廉油,一旦患者檢測出陽性,患病的后驗(yàn)概率高達(dá) 91% 以上苗傅。
如果患者檢測出陽性抒线,醫(yī)生認(rèn)為患者患病是合理的。
確認(rèn)結(jié)果
雖然醫(yī)生的意見是主觀的渣慕,但我們可以產(chǎn)生一個(gè)人造總體嘶炭,5% 的人患有這種疾病,并且使用相同的檢測來進(jìn)行檢測逊桦。 然后眨猎,我們可以計(jì)算不同類別的人數(shù),看看這些計(jì)數(shù)是否與我們使用貝葉斯規(guī)則得到的答案一致强经。
我們可以使用population(0.05)
和pivot
構(gòu)建相應(yīng)的總體宵呛,并看看四個(gè)單元格中的計(jì)數(shù)。
population(0.05).pivot('Test Result', 'True Condition')
True Condition | Negative | Positive |
---|---|---|
Disease | 50 | 4950 |
No Disease | 94525 | 475 |
在這個(gè)人工創(chuàng)建的 10 萬人的總體中夕凝,有 5000 人(5%)患有這種疾病宝穗,其中 99% 的人檢測為陽性,導(dǎo)致 4950 人為真陽性码秉。 將其與 475 個(gè)假陽性相比:在陽性中逮矛,擁有疾病的比例與我們通過貝葉斯規(guī)則得到的結(jié)果相同。
4950/(4950 + 475)
0.9124423963133641
因?yàn)槲覀兛梢砸粋€(gè)具有合適比例的總體转砖,我們也可以使用模擬來確認(rèn)我們的答案是否合理须鼎。 pop_05
表包含 10 萬人的總體鲸伴,使用醫(yī)生的先驗(yàn)患病概率 5%,以及檢測的錯誤率來生成晋控。 我們從總體中抽取一個(gè)規(guī)模為 10,000 的簡單隨機(jī)樣本汞窗,并提取positive
表,僅包含樣本中陽性檢測結(jié)果的個(gè)體赡译。
pop_05 = population(0.05)
sample = pop_05.sample(10000, with_replacement=False)
positive = sample.where('Test Result', are.equal_to('Positive'))
在這些陽性結(jié)果中仲吏,真實(shí)比例是多少? 那是擁有這種疾病的陽性的比例:
positive.where('True Condition', are.equal_to('Disease')).num_rows/positive.num_rows
0.9131205673758865
運(yùn)行這兩個(gè)單元格幾次蝌焚,你會發(fā)現(xiàn)裹唆,陽性中真陽性的比例位于我們通過貝葉斯規(guī)則計(jì)算的值 0.912 周圍。
你也可以以不同參數(shù)調(diào)用population
函數(shù)只洒,來改變先驗(yàn)患病概率许帐,并查看后驗(yàn)概率如何受到影響。