《Machine Learning in Action》—— 白話貝葉斯,“恰瓜群眾”應(yīng)該恰好瓜還是恰壞瓜

概率論坦刀,可以說是在機(jī)器學(xué)習(xí)當(dāng)中扮演了一個非常重要的角色了愧沟。Taoye對概率論知識的掌握目前也還僅僅只是停留在本科期間所接觸到的,而且還都已經(jīng)忘了不少求泰⊙朐快速的復(fù)習(xí)回顧一下之后,用來理解機(jī)器學(xué)習(xí)中的貝葉斯算法渴频,還是足夠的芽丹。

手撕機(jī)器學(xué)習(xí)系列文章目前已經(jīng)更新了支持向量機(jī)SVM、決策樹卜朗、K-近鄰(KNN)拔第,現(xiàn)在我們來玩玩貝葉斯算法,其他機(jī)器學(xué)習(xí)系列文章可根據(jù)自己需求來食用(持續(xù)更新中):

本篇文章主要包括以下幾個部分的內(nèi)容:

  • 到底啥是貝葉斯埋心,很厲害嘛???主要介紹了貝葉斯的一些基礎(chǔ)知識,然后寫了下筆者對貝葉斯的個人看法忙上,這個部分的內(nèi)容不難拷呆,認(rèn)真閱讀應(yīng)該都能理解
  • 介紹貝葉斯決策所涉及到的一些理論,其中包括條件概率疫粥、全概率茬斧、貝葉斯推斷等內(nèi)容,并且通過幾個比較生動的案例或是題目幫助大家對理論的理解梗逮。這里需要特別值得注意的是:最后一個案例(罐子和石頭)務(wù)必要理解清楚貝葉斯真正所要表達(dá)的實際意義项秉。
  • 這第三部分的內(nèi)容主要是通過一個西瓜的案例來給大伙進(jìn)行一下貝葉斯實戰(zhàn),Taoye命名為:“吃瓜群眾”應(yīng)該恰好瓜還是壞瓜慷彤。此“吃瓜群眾”就單純字面上的意思伙狐,而非網(wǎng)絡(luò)用語之“梗”瞬欧。另外,在這部分內(nèi)容里面罢防,還會詳細(xì)介紹標(biāo)稱型數(shù)據(jù)和數(shù)值型數(shù)據(jù)的具體處理方式艘虎,以及常用的“平滑”處理——拉普拉斯修正。當(dāng)然了咒吐,這部分內(nèi)容還是會照常給大家通過代碼的形式來實戰(zhàn)這個案例野建。

一、到底啥是貝葉斯恬叹,很厲害嘛???

貝葉斯定理由英國數(shù)學(xué)家貝葉斯 ( Thomas Bayes 1702-1761 ) 發(fā)展候生,用來描述兩個條件概率之間的關(guān)系,比如 P(A|B) 和 P(B|A)绽昼。按照乘法法則唯鸭,可以立刻導(dǎo)出:P(A∩B) = P(A)P(B|A)=P(B)P(A|B)。如上公式也可變形為:P(A|B)=P(B|A)*P(A)/P(B)硅确。

托馬斯·貝葉斯(Thomas Bayes目溉,1702-1761),18世紀(jì)英國神學(xué)家菱农、數(shù)學(xué)家缭付、數(shù)理統(tǒng)計學(xué)家和哲學(xué)家,概率論理論創(chuàng)始人循未,貝葉斯統(tǒng)計的創(chuàng)立者陷猫,“歸納地”運(yùn)用數(shù)學(xué)概率,“從特殊推論一般、從樣本推論全體”的第一人绣檬。

放一張大佬的圖片鎮(zhèn)文:

圖片來源網(wǎng)絡(luò)

對于貝葉斯算法來講足陨,其優(yōu)點是在簡單易懂,學(xué)習(xí)效率高河咽,數(shù)據(jù)較少的情況下仍然有效钠右,并且可以處理多分類問題。

至于缺點嘛忘蟹,在貝葉斯算法中飒房,假設(shè)屬性與屬性之間是有一定的相關(guān)性的,這個時候計算量相對會比較復(fù)雜媚值,而且處理起來也不是那么的容易狠毯。所以就衍生出了樸素貝葉斯來降低屬性與屬性之間的關(guān)系(一句話,沒有任何關(guān)系)褥芒,也就是屬性之間是完全獨立的嚼松,但我們知道在實際問題中,屬性之間很難做到完全獨立锰扶。即使這樣献酗,樸素貝葉斯依然會有廣的應(yīng)用。

上面所提到的屬性之間是獨立的坷牛,這句話應(yīng)該怎么來理解呢罕偎??京闰?

獨立性可以說是概率論當(dāng)中的逞占埃客了。就是說蹂楣,兩者之間沒有什么任何關(guān)系俏站,我不管你,請你也不要管我痊土,你過你的獨木橋肄扎,我走我的陽光道,單人做的事情都不會對他人造成任何的影響施戴。(需要重點理解)

關(guān)于對上述的理解反浓,如有些許疑惑也沒關(guān)系,Taoye會在下面通過案例來詳細(xì)介紹的赞哗,以幫助大家對獨立性的理解雷则。

另外,在《機(jī)器學(xué)習(xí)實戰(zhàn)》這本書中肪笋,還提到了該算法的適用數(shù)據(jù)類型為標(biāo)稱型數(shù)據(jù)月劈。但從實際來講度迂,除了適用標(biāo)稱型數(shù)據(jù)來之外,還能適用數(shù)值型數(shù)據(jù)猜揪。

這里稍微解釋下標(biāo)稱型數(shù)據(jù)和數(shù)值型數(shù)據(jù): 標(biāo)稱型數(shù)據(jù)一般用來表示離散屬性惭墓,比如身高我們不對其做具體的多少cm,而是高和矮兩種結(jié)果而姐。而數(shù)值型數(shù)據(jù)一般針對于連續(xù)屬性腊凶,比如身高我們可以具體到:170cm、175cm拴念、180cm等等钧萍。

在貝葉斯算法中,不同類型的數(shù)據(jù)政鼠,我們會有不一樣的方式來處理风瘦。對于標(biāo)稱型數(shù)據(jù)來講公般,可以直接通過頻率來處理万搔,高的人有幾個?官帘?瞬雹?矮的人有幾個?刽虹?挖炬?而對于數(shù)值型數(shù)據(jù)或者說是連續(xù)性數(shù)據(jù)來講,我們一般考慮概率密度函數(shù)來處理状婶,假設(shè)連續(xù)性數(shù)據(jù)滿足高斯分布。(這里不理解也沒關(guān)系馅巷,我們后面會詳細(xì)來摳摳高斯分布在這里的應(yīng)用)

以上就是關(guān)于貝葉斯算法所涉及到的一些基礎(chǔ)概念了膛虫,Taoye盡可能做到白話了,對于有基礎(chǔ)的讀者來講應(yīng)該不是很難理解钓猬。有些許疑問也沒關(guān)系稍刀,下面我們來具體看看貝葉斯究竟是何方神圣?敞曹?账月?

二、貝葉斯決策相關(guān)理論

條件概率:

關(guān)于條件概率澳迫,其實早在中學(xué)時期就有接觸過吧局齿,我還猶新記得當(dāng)時Taoye學(xué)這部分內(nèi)容的時候賊起勁,上課總是與老師瘋狂互動橄登。

先這樣抓歼,再那樣讥此,最后再這樣搞一下不就解決了嘛,小意思啦

Taoye還特意給大家找出了這本書谣妻,就是數(shù)學(xué) 選修2-3萄喳。如果有機(jī)會再夕拾這本書的話,一定會非常的有意思蹋半,想想就有點刺激他巨。總共分為A减江、B版兩本染突,喏,就是紫色皮皮和藍(lán)色皮皮的這本“神書”(有機(jī)會一定要夕拾一哈):

<img src="https://gitee.com/tianxingjian123/my-images-repository/raw/master/img/bayes_5.jpg" width="500">

好了您市,好了觉痛,我們來快速回顧一下條件概率吧!

image

上圖的術(shù)語茵休,我們可以把它叫做文氏圖薪棒、Venn圖纯陨、溫氏圖凶杖、維恩圖羡鸥、范氏圖力试,都行雳刺。它主要用來幫助我們理解集合與集合之間的關(guān)系扶欣,根據(jù)上圖吠各,我們可以很清楚的看到在B事件發(fā)生的情況下蕴轨,事件A發(fā)生的概率P(A|B)(不明的話可以把它理解成面積唠雕,是不是秒懂贸营??岩睁?):

P(A|B) = \frac{P(A \cap B)}{P(B)} \tag{2-1}


為了表達(dá)對“神書”的敬意钞脂,我們從其中抽一道題目來看看吧~~~

題目來源:人教版高中數(shù)學(xué)B版選修2-3

Q:拋擲紅、藍(lán)兩顆骰子捕儒,設(shè)事件B=“藍(lán)色骰子的點數(shù)為3或6”冰啃,事件A=“兩顆骰子的點數(shù)之和大于8”,那么問題來了刘莹,在已知藍(lán)色骰子的點數(shù)為3或6的時候阎毅,事件A發(fā)生的概率是多少呢?

我們知道点弯,每顆篩子有6種可能扇调,拋擲兩顆篩子總共有36種可能(6x6=36),對吧抢肛?而事件A和事件B同時發(fā)生的可能有5種肃拜,即P(A \cap B)=\frac{5}{36}痴腌,而事件A發(fā)生的可能有12種,所以P(A)=\frac{12}{36}燃领,所以我們可以得到P(A|B)的值如下:

\begin{aligned} P(A|B) & = \frac{P(A \cap B)}{P(B)} \\ & = \frac{\frac{5}{36}}{\frac{12}{36}}=\frac{5}{12} \end{aligned}


怎么樣士聪,挺簡單的吧?上述的條件概率的表達(dá)形式是我們中學(xué)時所接觸到的猛蔽,而在貝葉斯算法中的條件概率則稍微有點不同剥悟,只是做了小小的變動。

是醬紫的

前面我們不是得到了P(A|B) = \frac{P(A \cap B)}{P(B)}嘛曼库,變動后即:

P(A \cap B) = P(A|B) * P(B) \tag{2-2}

同理:

P(A \cap B) = P(B|A) * P(A) \tag{2-3}

所以:

P(A|B) * P(B) = P(B|A) * P(A) \tag{2-4}

即:

P(A|B) = \frac{P(B|A) * P(A)}{P(B)} \tag{2-5}

其中区岗,式2-5就是我們貝葉斯當(dāng)中得所使用的到的條件概率公式。

全概率公式:

假設(shè)樣本空間S毁枯,是兩個事件A與A'的和慈缔,如下圖:

image

上圖中,事件A和事件A'共同構(gòu)成了樣本空間S种玛。

這種情況下藐鹤,事件B能劃分成兩個部分。如下圖:

image

即:

P(B) = P(B \cap A) + P(B \cap A^{'}) \tag{2-6}

由上面的推導(dǎo)可知:

P(B \cap A) = P(B|A)P(A) \tag{2-7}

所以

P(B) = P(B|A)P(A) + P(B|A^{'})P(A^{'}) \tag{2-8}

這就是全概率公式赂韵。它的含義是娱节,如果A和A'構(gòu)成樣本空間的一個劃分,那么事件B的概率祭示,就等于A和A'的概率分別乘以B對這兩個事件的條件概率之和肄满。

將這個全概率公式代入到上面的條件概率公式中,就可以得到條件概率的另一種寫法:

P(A|B) = \frac{P(B|A)P(A)}{P(B|A)P(A) + P(B|A^{'})P(A^{'})} \tag{2-9}

貝葉斯推斷

對條件概率公式進(jìn)行變形质涛,可以得到如下形式:

P(A|B) = P(A)\frac{P(B|A)}{P(B)} \tag{2-10}

我們把P(A)稱為"先驗概率"(Prior probability)稠歉,即在B事件發(fā)生之前,我們對A事件概率的一個判斷汇陆,也就是說這個時候單純的考慮事件A轧抗,與事件B無關(guān)。
P(A|B)稱為"后驗概率"(Posterior probability)瞬测,即在B事件發(fā)生之后,我們對A事件概率的重新評估纠炮,這個時候就要考慮事件B了月趟。
P(B|A)/P(B)稱為"可能性函數(shù)"(Likelyhood),這是一個調(diào)整因子恢口,使得預(yù)估概率更接近真實概率孝宗。

所以,條件概率可以理解成下面的式子:

后驗概率「纭= 先驗概率 x 調(diào)整因子

這就是貝葉斯推斷的含義因妇。我們先預(yù)估一個"先驗概率"问潭,然后加入實驗結(jié)果,看這個實驗到底是增強(qiáng)還是削弱了"先驗概率"婚被,由此得到更接近事實的"后驗概率"狡忙。

在這里,如果"可能性函數(shù)"P(B|A)/P(B)>1址芯,意味著"先驗概率"被增強(qiáng)灾茁,事件A的發(fā)生的可能性變大;如果"可能性函數(shù)"=1谷炸,意味著B事件無助于判斷事件A的可能性北专;如果"可能性函數(shù)"<1,意味著"先驗概率"被削弱旬陡,事件A的可能性變小拓颓。

上述內(nèi)容,來自于阮一峰老師的網(wǎng)絡(luò)日志: http://www.ruanyifeng.com/blog/2011/08/bayesian_inference_part_one.html

為了加深對貝葉斯推斷的理解描孟,我們來看看下面的一個例子:


例子參考于:《機(jī)器學(xué)習(xí)實戰(zhàn)》

現(xiàn)在有完全一樣的1驶睦、2號兩個罐子,其中1號罐有4塊石頭画拾,分別是2白2黑啥繁;2號罐子有3塊石頭,分別1白2黑∏嗯祝現(xiàn)在隨機(jī)選擇一個罐子旗闽,從中抓起1塊石頭,發(fā)現(xiàn)是白色的蜜另,請問這塊白色石頭更可能來自于哪一個罐子适室??举瑰?

image

這道題目是Taoye根據(jù)《機(jī)器學(xué)習(xí)實戰(zhàn)》這本書上的例子進(jìn)行改動的捣辆,主要是為了方便大家更容易理解貝葉斯在分類問題中的應(yīng)用。注意這道題問的是:更可能來自于哪一個罐子此迅?

總共就兩個罐子汽畴,不是1號罐子就是2號罐子,而更可能描述的是一個可能性耸序,其實就相當(dāng)于一個分類問題忍些。來自哪一個罐子的可能性更大,我們最終就把這個白石頭歸類于哪一個罐子坎怪。

<font color="red">換句話講罢坝,我們可以把石頭的顏色表示為樣本的屬性特征,而罐子的類別則表示為樣本所對應(yīng)的標(biāo)簽搅窿。(這種問題的轉(zhuǎn)化思維一定要引起重視)至此的話嘁酿,我們就可以分別計算出來自于1隙券、2號罐子的概率,哪一個更大闹司,那么就將該石頭歸類于那一個罐子娱仔。</font>

我們不妨通過上述的條件概率公式來進(jìn)行分析,條件概率重現(xiàn)如下:

P(A|B) = P(A)\frac{P(B|A)}{P(B)}

對此开仰,我們令事件A=“來自1號罐子”拟枚,事件B=“選中了白色石頭”。

則我們可以知道众弓,因為2個罐子是完全一樣的恩溅,所以:

P(A) = \frac{1}{2}

P(B|A)表示的是在1號罐子中選中白色石頭的概率,我們知道1號罐子中有四塊石頭谓娃,其中有兩塊是白色的脚乡,所以:

P(B|A) = \frac{2}{4}=\frac{1}{2}

P(B)很簡單,就是在全局中選中白色石頭的概率滨达,全局有7塊奶稠,其中白色石頭有3塊,所以:

P(B) = \frac{3}{7}

綜上捡遍,我們就可以得到我們的條件概率結(jié)果锌订,即在發(fā)現(xiàn)是白色的前提下,這塊石頭來自1號罐子的概率為:

\begin{aligned} P(A|B) & = P(A)\frac{P(B|A)}{P(B)} \\ & = \frac{1}{2}\frac{\frac{1}{2}}{\frac{3}{7}}=\frac{7}{12} \end{aligned}

同理可知画株,假設(shè)事件C=“來自2號罐子”辆飘,我們可以計算出此時的條件概率:

\begin{aligned} P(C|B) & = P(A)\frac{P(C|A)}{P(C)} \\ & = \frac{1}{2}\frac{\frac{1}{3}}{\frac{3}{7}}=\frac{7}{18} \end{aligned}

<font color="red">對于這道題來講,先驗概率P(A)=P(C)=\frac{1}{2}谓传,經(jīng)過調(diào)整因子(可能性函數(shù))處理之后得到的后驗概率P(A|B)=\frac{7}{12}蜈项,而P(C|B)=\frac{7}{18}。也就是說在取出一個白石頭之前续挟,事件A和事件C的可能性是相同的紧卒,而在取出一個白石頭之后,事件A的可能性得到了增強(qiáng)诗祸,而事件C的可能性得到了的減弱跑芳。且P(A|B) > P(C|B),為此直颅,我們更情愿將取到的這個白球歸類于1號罐子博个。</font>

上面這段話,各位讀者一定要重點理解清楚际乘,這個對于理解樸素貝葉斯的實際意義有著非常重要的作用。我們可以這樣說:在被檢測樣本的各個屬性已知的前提下漂佩,我們需要通過貝葉斯算法來計算該樣本分別為各類別的概率情況脖含,以此來判斷該被檢測樣本的最終分類罪塔。

不知道各位讀者有沒有注意噢,對于上述問題养葵,白球的歸類不是1號罐就是2號罐征堪,按道理來講P(A|B)+P(C|B)=1,然而我們發(fā)現(xiàn)关拒,將計算出來的這兩個值相加之后并沒有等于1佃蚜,這不是完全不講道理嘛,真的是討厭着绊。谐算。。

首先归露,值得肯定的是洲脂,存在這種疑問的讀者非常的棒,說明在閱讀的過程有認(rèn)真的在思考剧包。其實恐锦,有這疑問的讀者忽視了“域”的問題,我們所理解的P(A|B)+P(C|B)=1是在整體“域”當(dāng)中疆液,也就是7個石頭一铅,而考慮條件概率的時候,“域”就已經(jīng)發(fā)生了改變堕油,此時的“域”就不再是一個整體了潘飘,而是被分割成了兩個子“域”,所以此時計算的兩個概率和并不會一定為1馍迄。(重點理解)

<font color="red">關(guān)于上述“域”的問題福也,為Taoye在學(xué)習(xí)過程中獨立思考所得,暫時沒有參考任何的權(quán)威資料攀圈,所以不能完全保證上述說法的正確性暴凑。如有問題,還請各位讀者不吝賜教赘来,在下方留言或是私聊Taoye现喳。</font>

最后再提醒一句,將這道題的真正意義搞懂犬辰,對于理解貝葉斯算法真的尤為重要嗦篱。


三、貝葉斯實戰(zhàn)之恰瓜群眾應(yīng)該恰好瓜還是壞瓜

在本節(jié)內(nèi)容中幌缝,我們主要用周志華老師的西瓜書上的一個例子來理解下貝葉斯的應(yīng)用灸促,隨后會通過代碼的形式來解決問題。總體上的過程與上述例子大致相同浴栽,主要在于讀者對于不同的問題要學(xué)會變通荒叼,要學(xué)會對問題的轉(zhuǎn)換。就像《周易》里說的那樣典鸡,窮則變被廓,變則通,通則久萝玷。這一點還是挺重要的嫁乘,尤其是對于我們學(xué)生來講。

下面我們開始進(jìn)入到正題球碉。

例子參考于:周志華-《機(jī)器學(xué)習(xí)》第四章

為了讓讀者在閱讀的過程中不是那么的無趣蜓斧,或是能更好的進(jìn)入到這個案例,Taoye編個簡短的故事來作為引子吧汁尺。

<font color="red">注意:此“吃瓜群眾”就單純字面上的意思法精,而非網(wǎng)絡(luò)用語之“梗”痴突。</font>

從前有座山搂蜓,山上有座廟,廟里有位吃瓜群眾在吃瓜辽装。(唱起來還挺順口的帮碰,hhhhhh)

同時,廟里面也有成千上百的西瓜可供吃瓜群眾食用拾积。一開始的時候殉挽,吃瓜群眾還是非常開心的,一口一個西瓜吞吞的下肚拓巧。但是這西瓜恰到一定數(shù)量的時候斯碌,他發(fā)現(xiàn)有的瓜是好瓜,而有的瓜是壞瓜肛度,當(dāng)時就困惑著:我滴乖乖傻唾,這壞瓜該不會是過期了吧?承耿?冠骄?

那咋行呢?我要每次恰之前能夠挑選出壞瓜才行加袋,至少說挑選出好瓜的概率要比壞瓜大才可以吧凛辣。為此,他收集了之前恰西瓜時候的一些屬性特征以及對應(yīng)標(biāo)簽职烧,以此來作為他判別好瓜還是壞瓜的依據(jù)扁誓。

吃瓜群眾收集到的西瓜數(shù)據(jù)如下所示:

<img src="https://gitee.com/tianxingjian123/my-images-repository/raw/master/img/bayes_9.jpg" width="600">

這個數(shù)據(jù)樣本集總共有17個西瓜防泵,其中好瓜有8個,壞瓜有9個。

這個吃瓜群眾的案例相較于前面罐子石頭的來講就復(fù)雜一點點,但也只是一點點而已幻捏。這里涉及到了多個屬性特征宏所,而且除了標(biāo)稱型數(shù)據(jù)之外,還有數(shù)值型數(shù)據(jù)壹堰,這些不同類型的數(shù)據(jù)我們需要怎么處理呢拭卿??贱纠?另外還有一點需要說的是峻厚,假如說我們的檢測西瓜中的特征值在17個樣本里面不存在,那么這個時候又應(yīng)該需要怎么處理呢谆焊?惠桃??

以上所提到的都是我們這節(jié)內(nèi)容中所需要解決的問題辖试。

  • 屬性問題的解決

在前面罐子石頭的案例中辜王,我們的屬性特征只有顏色一個,而在這個吃瓜群眾的案例里面罐孝,屬性特征卻有色澤呐馆、根蒂、敲聲莲兢、紋理汹来、臍部、觸感改艇、密度收班、含糖率8個。

通過前面幾篇手撕機(jī)器學(xué)習(xí)的文章來看谒兄,我們可以知道摔桦,當(dāng)一個樣本數(shù)據(jù)中的屬性特征有多個的時候,這個時候我們可以把這多個屬性特征看做是一個整體舵变,什么整體呢酣溃??纪隙?沒錯赊豌,就是一個特征向量。

我們不妨將這里的特征向量表示為x=(色澤,根蒂,敲聲,紋理,臍部,觸感,密度,含糖率)绵咱,而好瓜碘饼、壞瓜標(biāo)簽表示為c熙兔,則在已知一個被檢測西瓜樣本的屬性特征的前提下,我們要來判斷這個瓜是好瓜還是壞瓜艾恼,則通過貝葉斯定理住涉,我們有

P(c|x)=\frac{P(c)P(x|c)}{P(x)} \tag{3-1}

通過上式,我們不不難發(fā)現(xiàn)钠绍,基于貝葉斯公式3-1來估計后驗概率P(c|x)的主要困難在于:類條件概率P(x|c)是所有屬性上的聯(lián)合概率舆声,很難從有限的訓(xùn)練樣本中直接估計而得。還有一點就是柳爽,這種形式的表示就相當(dāng)于笛卡爾積媳握,這個對計算也不是很友好。(關(guān)于笛卡爾積磷脯,讀者可自行了解蛾找,后期有機(jī)會的話Taoye也會來介紹)

為了避開上述這個問題,“樸素貝葉斯分類器”就采用了“屬性條件獨立性假設(shè)”:對已知類別赵誓,假設(shè)所有屬性相互獨立打毛,互相不會產(chǎn)生任何的影響。這個時候俩功,我們再來重新閱讀前面所說到的一句話: 我不管你幻枉,請你也不要管我,你過你的獨木橋诡蜓,我走我的陽光道展辞,單人做的事情都不會對他人造成任何的影響。

是不是獨立的理解有點感覺了万牺?罗珍??

基于屬性條件獨立性假設(shè)脚粟,式子3-1覆旱,我們可以重寫為:

P(c|x)=\frac{P(c)P(x|c)}{P(x)}=\frac{P(c)}{P(x)}\Pi_{i=1}^8P(x_i|c) \tag{3-2}

而我們知道,對于一個檢測西瓜樣本來講核无,該樣本每一個屬性特征值在每個樣本類別里計算得到的結(jié)果都是一樣的扣唱,比如說對于好瓜與壞瓜的判別來講,計算得到的P(x)都是相同的团南。換句話講噪沙,P(x)的計算結(jié)果并不會對不同標(biāo)簽計算后驗概率結(jié)果產(chǎn)生任何的影響,也就是說吐根,要想判別這個是好瓜還是壞瓜正歼,我們沒有必要去計算P(x)的值,這是畫蛇添腳拷橘、多此一舉局义。對此喜爷,我們得到如下所示:

h_{nb}(x) = arg \ maxP(c)\Pi_{i=1}^8P(x_i|c) \tag{3-3}

這也就是我們的樸素貝葉斯的表達(dá)式,表達(dá)的意思就是比較不同類別時候的P(c)\Pi_{i=1}^8P(x_i|c)萄唇,值最大者所對應(yīng)的標(biāo)簽就是我們想要的分類結(jié)果檩帐。

不難吧?另萤?湃密?應(yīng)該能看懂吧?四敞?勾缭?也應(yīng)該能理解吧?目养??感覺解釋的已經(jīng)很白話了 (ノへ ̄毒嫡、)

  • 不同數(shù)據(jù)類型的處理方式

我們觀察數(shù)據(jù)癌蚁,可以發(fā)現(xiàn)樣本的屬性特征有兩類,一類是標(biāo)稱型屬性數(shù)據(jù):色澤兜畸、根蒂努释、敲聲、紋理咬摇、臍部伐蒂、觸感,另一類是數(shù)值型數(shù)據(jù):密度肛鹏、含糖率逸邦。我們可以把標(biāo)稱型數(shù)據(jù)理解成離散型的,而把數(shù)值型數(shù)據(jù)理解成連續(xù)型的在扰,而在貝葉斯算法中缕减,不同類型的數(shù)據(jù)會有不同的處理方式。

對于離散屬性來講芒珠,令D_{c,x_i}表示D_c中在第i屬性上取值為x_i的樣本組成的集合桥狡,則條件概率P(x_i|c)可以估計為:

P(x_i|c)=\frac{|D_{c,x_i}|}{|D_c|} \tag{3-4}

換言之,就是頻率的一種計算皱卓。

而對于連續(xù)屬性來講裹芝,我們可以考慮概率密度函數(shù),假定p(x_i|c)服從N(u_{c,i},\sigma_{c,i}^2)娜汁,其中u_{c,i}\sigma_{c,i}^2分別是第c類樣本在第i個屬性上取值的均值和方差嫂易,則有:

p(x_i|c)=\frac{1}{\sqrt{2\pi}\sigma_{c,i}}exp(-\frac{(x_i-u_{c,i})^2}{2\sigma_{c,i}^2}) \tag{3-5}

也就是說此時的p(x_i|c)就相當(dāng)于把數(shù)據(jù)樣本集中所對應(yīng)特征的所有數(shù)值型數(shù)據(jù)服從高斯分布,依次來計算p(x_i|c)的結(jié)果

ok掐禁,這兩個問題搞懂了之后炬搭,我們就可以來計算下吃瓜群眾所恰西瓜的好壞了

我們不妨假設(shè)此時恰瓜群眾此時拿到的一個西瓜所對應(yīng)屬性特征如下蜈漓,我們通過貝葉斯來判斷該西瓜的好壞:

image

我們首先計算先驗概率P(c),由于總共有17個瓜宫盔,其中好瓜8個融虽,壞瓜9個,所以有:

\begin{aligned} & P(好瓜=是)=\frac{8}{17}=0.471 \\ & P(好瓜=否)=\frac{9}{17}=0.529 \end{aligned}

之后灼芭,為每個屬性估計條件概率P(x_i|c)

\begin{aligned} & P_{青綠|是}=P(色澤=青綠|好瓜=是)=\frac{3}{8}=0.375 \\ & P_{青綠|否}=P(色澤=青綠|好瓜=否)=\frac{3}{9}=0.333 \\ & P_{蜷縮|是}=P(根蒂=蜷縮|好瓜=是)=\frac{5}{8}=0.625 \\ & P_{蜷縮|否}=P(根蒂=蜷縮|好瓜=否)=\frac{3}{9}=0.333 \\ & P_{濁響|是}=P(敲聲=濁響|好瓜=是)=\frac{6}{8}=0.750 \\ & P_{濁響|否}=P(敲聲=濁響|好瓜=否)=\frac{4}{9}=0.444 \\ & P_{清晰|是}=P(紋理=清晰|好瓜=是)=\frac{7}{8}=0.875 \\ & P_{清晰|否}=P(紋理=清晰|好瓜=否)=\frac{2}{9}=0.222 \\ & P_{凹陷|是}=P(臍部=凹陷|好瓜=是)=\frac{6}{8}=0.625 \\ & P_{凹陷|否}=P(臍部=凹陷|好瓜=否)=\frac{2}{9}=0.222 \\ & P_{硬滑|是}=P(觸感=硬滑|好瓜=是)=\frac{6}{8}=0.750 \\ & P_{硬滑|否}=P(觸感=硬滑|好瓜=否)=\frac{6}{9}=0.667 \\ \end{aligned}

\begin{aligned} P_{密度:0.697|是} & =P(密度=0.697|好瓜=是) \\ & = \frac{1}{\sqrt{2\pi}0.129}exp(-\frac{(0.697-0.574)^2}{2*0.129^2}) \\ & = 1.962 \\ P_{密度:0.697|否} & =P(密度=0.697|好瓜=否) \\ & = \frac{1}{\sqrt{2\pi}0.195}exp(-\frac{(0.697-0.496)^2}{2*0.195^2}) \\ & = 1.194 \\ P_{含糖:0.460|是} & =P(含糖=0.460|好瓜=是) \\ & = \frac{1}{\sqrt{2\pi}0.101}exp(-\frac{(0.460-0.279)^2}{2*0.101^2}) \\ & = 0.669 \\ P_{含糖:0.460|否} & =P(含糖=0.460|好瓜=否) \\ & = \frac{1}{\sqrt{2\pi}0.108}exp(-\frac{(0.460-0.154)^2}{2*0.108^2}) \\ & = 0.42 \\ \end{aligned}

這里有必要說一點:在周志華西瓜書中P_{凹陷|是}計算結(jié)果是有錯誤的有额,實際結(jié)果應(yīng)該是0.625,而非0.750彼绷,讀者可自行計算從而驗證

于是巍佑,我們可以計算得到該瓜是好瓜和壞瓜的可能性如下

\begin{aligned} & P(好瓜=是)*P_{青綠|是}*P_{蜷縮|是}*P_{濁響|是}*P_{清晰|是} \\ & \quad \quad \quad \quad \quad \quad *P_{凹陷|是}*P_{硬滑|是}*P_{密度:0.697|是}*P_{含糖:0.460|是}=0.046 \\ & P(好瓜=否)*P_{青綠|否}*P_{蜷縮|否}*P_{濁響|否}*P_{清晰|否}\\ & \quad \quad \quad \quad \quad \quad*P_{凹陷|否}*P_{硬滑|否}*P_{密度:0.697|否}*P_{含糖:0.460|否}=4.36*10^{-5} \end{aligned}

由計算可以得到,0.046>4.36*10^{-5}寄悯,所以我們理應(yīng)將這個判別樣本歸類于“好瓜”

下面萤衰,我們不妨通過代碼來描述上述貝葉斯的判別過程。

首先猜旬,建立一個establish_data方法用于準(zhǔn)備數(shù)據(jù):

<img src="https://gitee.com/tianxingjian123/my-images-repository/raw/master/img/bayes_13_.png" width="300">

定義一個calc_label_countcalc_p_c方法脆栋,分別用于統(tǒng)計不同類別標(biāo)簽的數(shù)量,以及計算各類別在數(shù)據(jù)樣本集中的頻率洒擦,即各類別的P(c)值:

<img src="https://gitee.com/tianxingjian123/my-images-repository/raw/master/img/bayes_14.png" width="400">

程序運(yùn)行結(jié)果如下椿争,可見與我們前面手動計算的結(jié)果一致

image

根據(jù)上述貝葉斯分類的流程,還需定義一個calc_dispersed_p_xi_c方法以及calc_continuity_p_xi_c來分別計算P(x_i|c)的值熟嫩,方法分別對應(yīng)著離散型數(shù)據(jù)和連續(xù)型數(shù)據(jù)

不過有一點還需要說明的是秦踪,在計算連續(xù)型數(shù)據(jù)的P(x_i,c)的時候,我們還應(yīng)該提前得知數(shù)據(jù)的均值以及方差掸茅,為此還需定義一個calc_mean_standard方法來實現(xiàn)這個功能椅邓,該三個核心方法的具體代碼如下(都挺簡單的):

<img src="https://gitee.com/tianxingjian123/my-images-repository/raw/master/img/bayes_15.png" width="400">

運(yùn)算結(jié)果如下圖所示:

image

可以看到,此時的貝葉斯算法判斷該瓜為好瓜昧狮,與我們實際的標(biāo)簽一致希坚,說明預(yù)測正確。當(dāng)然了陵且,這個代碼只是預(yù)測了一個西瓜樣本裁僧,讀者可自行根據(jù)程序代碼預(yù)測多個樣本西瓜,從而判斷該貝葉斯的正確率慕购。

完整代碼:

import numpy as np

"""
    Author: Taoye
    微信公眾號: 玩世不恭的Coder
    Explain: 用于生成樣本的屬性特征以及對應(yīng)的標(biāo)簽
    Return:
        x_data: 數(shù)據(jù)樣本的屬性聊疲,其中包括8個屬性
        y_label: 樣本屬性所對應(yīng)的標(biāo)簽
"""
def establish_data():
    x_data = [[1, 1, 1, 1, 1, 1, 0.697, 0.460],
             [2, 1, 2, 1, 1, 1, 0.774, 0.376],
             [2, 1, 1, 1, 1, 1, 0.634, 0.264],
             [1, 1, 2, 1, 1, 1, 0.608, 0.318],
             [3, 1, 1, 1, 1, 1, 0.556, 0.215],
             [1, 2, 1, 1, 2, 2, 0.403, 0.237],
             [2, 2, 1, 2, 2, 2, 0.481, 0.149],
             [2, 2, 1, 1, 2, 1, 0.437, 0.211],
             [2, 2, 2, 2, 2, 1, 0.666, 0.091],
             [1, 3, 3, 1, 3, 2, 0.243, 0.267],
             [3, 3, 3, 3, 3, 1, 0.245, 0.057],
             [3, 1, 1, 3, 3, 2, 0.343, 0.099],
             [1, 2, 1, 2, 1, 1, 0.639, 0.161],
             [3, 2, 2, 2, 1, 1, 0.657, 0.198],
             [2, 2, 1, 1, 2, 2, 0.360, 0.370],
             [3, 1, 1, 3, 3, 1, 0.593, 0.042],
             [1, 1, 2, 2, 2, 1, 0.719, 0.103]]
    y_label = [0, 0, 0, 0, 0, 0, 0, 0,
              1, 1, 1, 1, 1, 1, 1, 1, 1]
    return np.array(x_data), np.array(y_label)

"""
    Author: Taoye
    微信公眾號: 玩世不恭的Coder
    Explain: 用于統(tǒng)計不同標(biāo)簽的樣本數(shù)量
    Parameters:
        y_label: 樣本屬性所對應(yīng)的標(biāo)簽
    Return:
        label_count: 不同樣本標(biāo)簽的數(shù)量
"""
def calc_label_count(y_label):
    label_count_0, label_count_1 = 0, 0; data_number = y_label.shape[0]
    for label in y_label:    # 遍歷y_label,統(tǒng)計不同類別的數(shù)量
        if int(label) == 0: label_count_0 += 1
        if int(label) == 1: label_count_1 += 1
    return label_count_0, label_count_1

"""
    Author: Taoye
    微信公眾號: 玩世不恭的Coder
    Explain: 用于計算各類別在數(shù)據(jù)樣本集中的頻率沪悲,即各類別的$P(c)$值:
    Parameters:
        y_label: 樣本屬性所對應(yīng)的標(biāo)簽
    Return:
        pc: 指定對應(yīng)標(biāo)簽的頻率值
"""
def calc_p_c(y_label):
    data_number = y_label.shape[0]
    label_count_0, label_count_1 = calc_label_count(y_label)
    return label_count_0 / data_number, label_count_1 / data_number

"""
    Author: Taoye
    微信公眾號: 玩世不恭的Coder
    Explain: 用于計算各類別在數(shù)據(jù)樣本集中的頻率获洲,即各類別的$P(c)$值,主要用于標(biāo)稱型數(shù)據(jù)
    Parameters:
        y_label: 樣本屬性所對應(yīng)的標(biāo)簽
    Return:
        pc: 指定對應(yīng)標(biāo)簽的頻率值
"""
def calc_dispersed_p_xi_c(test_data, x_data, y_label, attribute_index):
    label_count_0, label_count_1  = calc_label_count(y_label)
    attribute_count_0, attribute_count_1 = 0, 0
    for item in x_data[:label_count_0]:
        if test_data[attribute_index] == item[attribute_index]:
            attribute_count_0 += 1
    for item in x_data[label_count_0:]:
        if test_data[attribute_index] == item[attribute_index]:
            attribute_count_1 += 1
    return attribute_count_0 / label_count_0, attribute_count_1 / label_count_1

"""
    Author: Taoye
    微信公眾號: 玩世不恭的Coder
    Explain: 用于計算均值和標(biāo)準(zhǔn)差
"""
def calc_mean_standard(x_data):
    mean_value_0, mean_value_1 = np.mean(x_data[:8, 6:8], axis = 0), np.mean(x_data[8:, 6:8], axis = 0)
    std_value_0, std_value_1 = np.std(x_data[:8, 6:8], axis = 0), np.std(x_data[8:, 6:8], axis = 0)
    return mean_value_0, mean_value_1, std_value_0, std_value_1

"""
    Author: Taoye
    微信公眾號: 玩世不恭的Coder
    Explain: 將數(shù)據(jù)進(jìn)行高斯轉(zhuǎn)化
"""
def calc_gaussian(data, mean_value, std_value):
    return (1 / (np.sqrt(2*np.pi) * std_value)) * (np.e ** ((- (data - mean_value) ** 2) / (2 * (std_value) ** 2)))

"""
    Author: Taoye
    微信公眾號: 玩世不恭的Coder
    Explain: 計算數(shù)值型數(shù)據(jù)的p_xi_c
"""
def calc_continuity_p_xi_c(test_data, x_data):
    mean_value_0, mean_value_1, std_value_0, std_value_1 = calc_mean_standard(x_data)  
    pxi_density_0 = calc_gaussian(test_data[6], mean_value_0[0], std_value_0[0])
    pxi_density_1 = calc_gaussian(test_data[6], mean_value_1[0], std_value_1[0])
    pxi_sugar_0 = calc_gaussian(test_data[7], mean_value_0[1], std_value_0[1])
    pxi_sugar_1 = calc_gaussian(test_data[7], mean_value_1[1], std_value_1[1])
    return pxi_density_0, pxi_density_1, pxi_sugar_0, pxi_sugar_1

if __name__ == "__main__":
    test_data = [1, 1, 1, 1, 1, 1, 0.697, 0.460]
    x_data, y_label = establish_data()
    attr0 = calc_dispersed_p_xi_c(test_data, x_data, y_label, 0)
    attr1 = calc_dispersed_p_xi_c(test_data, x_data, y_label, 1)
    attr2 = calc_dispersed_p_xi_c(test_data, x_data, y_label, 2)
    attr3 = calc_dispersed_p_xi_c(test_data, x_data, y_label, 3)
    attr4 = calc_dispersed_p_xi_c(test_data, x_data, y_label, 4)
    attr5 = calc_dispersed_p_xi_c(test_data, x_data, y_label, 5)
    print("標(biāo)稱型數(shù)據(jù)的P_{(x_i,c)}:", attr0, attr1, attr2, attr3, attr4, attr5)
    pxi_density_0, pxi_density_1, pxi_sugar_0, pxi_sugar_1 = calc_continuity_p_xi_c(test_data, x_data)
    print("數(shù)值型數(shù)據(jù)的P_{(x_i,c)}:", pxi_density_0, pxi_density_1, pxi_sugar_0, pxi_sugar_1)
    p1, p2 = calc_p_c(y_label)
    print("數(shù)據(jù)樣集中的各類別的概率情況分別為:", p1, p2)
    p_good_melon = p1 * attr0[0] * attr1[0] * attr2[0] * attr3[0] * attr4[0] * attr5[0] * pxi_density_0 * pxi_sugar_0
    p_bad_melon = p2 * attr0[1] * attr1[1] * attr2[1] * attr3[1] * attr4[1] * attr5[1] * pxi_density_1 * pxi_sugar_1
    print("分類為好瓜和壞瓜的可能性分別為:", p_good_melon, p_bad_melon)
    print("恰瓜群眾拿到這個是好瓜") if p_good_melon >= p_bad_melon else print("恰瓜群眾拿到這個是好瓜")

在本節(jié)開始的時候殿如,我們提出了三個問題贡珊,其中已經(jīng)已經(jīng)解決了兩個最爬,現(xiàn)在我們來解決最后一個問題。

  • 假如說我們的檢測西瓜中的特征值在17個樣本里面都不存在门岔,那么這個時候又應(yīng)該需要怎么處理呢爱致??寒随?

就是說糠悯,若某個屬性值在訓(xùn)練集中沒有與某個類同時出現(xiàn),則我們根據(jù)前面所提到的樸素貝葉斯進(jìn)行判別將會出現(xiàn)問題妻往。例如互艾,在使用西瓜數(shù)據(jù)集訓(xùn)練樸素貝葉斯的時候,對一個“敲聲=清脆”的測試樣例讯泣,有:

P_{清脆|是}=P(敲聲=清脆|好瓜=是)=\frac{0}{8}=0

由連乘式計算出的概率值為0纫普,因此,無論該樣本的其他屬性特征是什么好渠,哪怕在其他屬性上明顯是好瓜昨稼,分類的結(jié)果都是“好瓜=否”,這個顯然不是很合理晦墙。

為了避免其他屬性攜帶的信息被訓(xùn)練集中未出現(xiàn)的屬性值“抹去”,在估計概率值時通常要進(jìn)行“平滑”操作肴茄,常用的是“拉普拉斯修正”晌畅。具體來說,令N表示訓(xùn)練集D中可能的類別數(shù)寡痰,N_i表示第i個屬性可能的取值數(shù)抗楔,則此時的式子3-4和3-5分別修正為:

\hat{P}(c) = \frac{|D_c| + 1}{|D| + N} \\ \hat{P}(x_i|c)=\frac{|D_{c,x_i}|+1}{|D_c|+N_i}

例如,在本節(jié)例子中拦坠,類先驗概率可估計為:

\hat{P}(好瓜=是)=\frac{8+1}{17+2}连躏,\hat{P}(好瓜=否)=\frac{9+1}{17+2}=0.526

這個拉普拉斯修正沒什么難點,主要是處理單個屬性在數(shù)據(jù)樣本中不存在的問題贞滨,讀者可根據(jù)拉普拉斯修正的方式來將上述完整代碼進(jìn)行改進(jìn)入热。

關(guān)于貝葉斯算法,其實后面還有些內(nèi)容晓铆,限于篇幅原因勺良,我們留著后面有機(jī)會再來肝。

如果這篇文章對您有所幫助骄噪,點個贊尚困、分享下吧~~~

這篇文章就不嘮嗑了。

我是Taoye链蕊,愛專研事甜,愛分享谬泌,熱衷于各種技術(shù),學(xué)習(xí)之余喜歡下象棋逻谦、聽音樂掌实、聊動漫,希望借此一畝三分地記錄自己的成長過程以及生活點滴跨跨,也希望能結(jié)實更多志同道合的圈內(nèi)朋友潮峦,更多內(nèi)容歡迎來訪微信公主號:玩世不恭的Coder。

我們下期再見勇婴,拜拜~~~

參考資料:

<font style="font-size:13px;opacity:0.7">[1] 《機(jī)器學(xué)習(xí)實戰(zhàn)》:Peter Harrington 人民郵電出版社</font>
<font style="font-size:13px;opacity:0.7">[2] 《統(tǒng)計學(xué)習(xí)方法》:李航 第二版 清華大學(xué)出版社</font>
<font style="font-size:13px;opacity:0.7">[3] 《機(jī)器學(xué)習(xí)》:周志華 清華大學(xué)出版社</font>
<font style="font-size:13px;opacity:0.7">[4] 人教版高中數(shù)學(xué)B版選修2-3</font>
<font style="font-size:13px;opacity:0.7">[5] 貝葉斯推斷及其互聯(lián)網(wǎng)應(yīng)用:http://www.ruanyifeng.com/blog/2011/08/bayesian_inference_part_one.html</font>

推薦閱讀

《Machine Learning in Action》—— 女同學(xué)問Taoye忱嘹,KNN應(yīng)該怎么玩才能通關(guān)
《Machine Learning in Action》—— 懂的都懂,不懂的也能懂耕渴。非線性支持向量機(jī)
《Machine Learning in Action》—— hao朋友拘悦,快來玩啊,決策樹呦
《Machine Learning in Action》—— Taoye給你講講決策樹到底是支什么“鬼”
《Machine Learning in Action》—— 剖析支持向量機(jī)橱脸,優(yōu)化SMO
《Machine Learning in Action》—— 剖析支持向量機(jī)础米,單手狂撕線性SVM
print( "Hello,NumPy添诉!" )
干啥啥不行屁桑,吃飯第一名
Taoye滲透到一家黑平臺總部,背后的真相細(xì)思極恐
《大話數(shù)據(jù)庫》-SQL語句執(zhí)行時栏赴,底層究竟做了什么小動作蘑斧?

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市须眷,隨后出現(xiàn)的幾起案子竖瘾,更是在濱河造成了極大的恐慌,老刑警劉巖花颗,帶你破解...
    沈念sama閱讀 211,042評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件捕传,死亡現(xiàn)場離奇詭異,居然都是意外死亡扩劝,警方通過查閱死者的電腦和手機(jī)庸论,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,996評論 2 384
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來棒呛,“玉大人葡公,你說我怎么就攤上這事√跛” “怎么了催什?”我有些...
    開封第一講書人閱讀 156,674評論 0 345
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經(jīng)常有香客問我蒲凶,道長气筋,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,340評論 1 283
  • 正文 為了忘掉前任旋圆,我火速辦了婚禮宠默,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘灵巧。我一直安慰自己搀矫,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 65,404評論 5 384
  • 文/花漫 我一把揭開白布刻肄。 她就那樣靜靜地躺著瓤球,像睡著了一般。 火紅的嫁衣襯著肌膚如雪敏弃。 梳的紋絲不亂的頭發(fā)上卦羡,一...
    開封第一講書人閱讀 49,749評論 1 289
  • 那天,我揣著相機(jī)與錄音麦到,去河邊找鬼绿饵。 笑死夷恍,一個胖子當(dāng)著我的面吹牛厘擂,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播草慧,決...
    沈念sama閱讀 38,902評論 3 405
  • 文/蒼蘭香墨 我猛地睜開眼粹淋,長吁一口氣:“原來是場噩夢啊……” “哼吸祟!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起廓啊,我...
    開封第一講書人閱讀 37,662評論 0 266
  • 序言:老撾萬榮一對情侶失蹤欢搜,失蹤者是張志新(化名)和其女友劉穎封豪,沒想到半個月后谴轮,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,110評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡吹埠,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,451評論 2 325
  • 正文 我和宋清朗相戀三年第步,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片缘琅。...
    茶點故事閱讀 38,577評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡粘都,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出刷袍,到底是詐尸還是另有隱情翩隧,我是刑警寧澤,帶...
    沈念sama閱讀 34,258評論 4 328
  • 正文 年R本政府宣布呻纹,位于F島的核電站堆生,受9級特大地震影響专缠,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜淑仆,卻給世界環(huán)境...
    茶點故事閱讀 39,848評論 3 312
  • 文/蒙蒙 一涝婉、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧蔗怠,春花似錦墩弯、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,726評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至怠惶,卻和暖如春涨缚,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背策治。 一陣腳步聲響...
    開封第一講書人閱讀 31,952評論 1 264
  • 我被黑心中介騙來泰國打工脓魏, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人通惫。 一個月前我還...
    沈念sama閱讀 46,271評論 2 360
  • 正文 我出身青樓茂翔,卻偏偏與公主長得像,于是被迫代替她去往敵國和親履腋。 傳聞我的和親對象是個殘疾皇子珊燎,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,452評論 2 348

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