機(jī)器學(xué)習(xí)-通俗易懂推導(dǎo)XGBoost公式

1俯画、前言

????xgboost是在gbdt基礎(chǔ)上進(jìn)行了升級(jí)箫老,所以xgboost也是通過每次擬合上次的殘差(上次實(shí)際值與目標(biāo)值之差),從而每次生成一棵樹(CART回歸樹)卖怜,最終將所有的樹加起來得到最終目標(biāo)键思。與gbdt的區(qū)別這里先不做介紹础爬,后續(xù)文章會(huì)涉及。

注意:XGBoost中基模型是CART樹吼鳞,這里的意思只是說基模型中的樹是二叉樹看蚜,與決策樹中CART樹的劃分屬性及劃分節(jié)點(diǎn)的選擇毫無關(guān)系,心里先有這個(gè)概念赔桌,不然后面不好理解供炎。

2渴逻、模型推導(dǎo)

2.1 模型預(yù)測(cè)結(jié)果

????先給出模型最終預(yù)測(cè)結(jié)果,假設(shè)第k次生成的CART樹(也可以稱為殘差樹)為f_{k}音诫,則經(jīng)過T輪之后(也就是一共有T棵樹)惨奕,最終模型對(duì)于樣本i的預(yù)測(cè)值為(x_i為第i個(gè)樣本的輸入值,T代表樹的數(shù)量)
\hat{y}_{i}=\sum_{t=1}^{T} f_{t}\left(x_{i}\right), f_{t} \in F

2.2 模型訓(xùn)練過程

????從上述公式可以看出竭钝,最終結(jié)果是對(duì)所有CART樹求和梨撞。xgboost是增量學(xué)習(xí)方法,即香罐,每一棵樹都必須在上一棵樹生成之后才可以繼續(xù)求得卧波,所以這里在代碼設(shè)計(jì)上也只能是串行執(zhí)行。
??針對(duì)每一棵樹是如何生成的呢庇茫?接著分析幽勒。
??首先,每次的訓(xùn)練的目標(biāo)是使預(yù)測(cè)值最接近真實(shí)值(即損失函數(shù)最小化)港令。損失函數(shù)常用下式表示:
\sum_{i=1}^{n} l\left(y_{i}, \hat{y}_{i}\right)
公式說明:其中\sum_{i=1}^{n}表示對(duì)n個(gè)樣本的損失值求和;l\left(y_{i}, \hat{y}_{i}\right)表示與預(yù)測(cè)值\hat{y}_{i}及真實(shí)值{y}_{i}有關(guān)的損失函數(shù)(該函數(shù)中真實(shí)值{y}_{i}是已知的锈颗,但是預(yù)測(cè)值\hat{y}_{i}隨著樹模型的不同而在變換顷霹,所以變量是\hat{y}_{i})。

??但是xgboost不是直接最小化上述損失函數(shù)作為訓(xùn)練的目標(biāo)击吱,而是要在上述公式基礎(chǔ)上加上樹的復(fù)雜度淋淀。為什么要加樹的復(fù)雜度?就是為了避免過擬合(在訓(xùn)練集上表現(xiàn)很好覆醇,但是在測(cè)試集或待預(yù)測(cè)數(shù)據(jù)上表現(xiàn)很差)朵纷,這里的復(fù)雜度就是常說的正則項(xiàng)
所以永脓,最后的目標(biāo)函數(shù)就變?yōu)椋?br> o b j=\sum_{i=1}^{n} l\left(y_{i}, \hat{y}_{i}\right)+\sum_{k=1}^{K} \Omega\left(f_{k}\right)
注:其中樹復(fù)雜度是k棵樹復(fù)雜度的求和袍辞。在模型求第k棵樹時(shí),其實(shí)前k-1棵樹的復(fù)雜度已經(jīng)知道了常摧。
所以搅吁,得到第t棵樹之后,總的損失值變?yōu)椋?br> o b j^{t}=\sum_{i=1}^{n} l\left(y_{i}, \hat{y}_{i}^{t}\right)+\sum_{k=1}^{t} \Omega\left(f_{k}\right)
公式說明:
其中落午,第t棵樹時(shí)谎懦,總模型的預(yù)測(cè)值是前t-1棵樹的預(yù)測(cè)值加上第t棵樹的預(yù)測(cè)值(f_{t}\left(x_{i}\right)代表第t棵樹):
\hat{y}_{i}^{t}=\hat{y}_{i}^{t-1}+f_{t}\left(x_{i}\right)
第t棵樹時(shí),模型總復(fù)雜度的值是前t-1棵樹的復(fù)雜度加上第t棵樹的復(fù)雜度
\sum_{k=1}^{t} \Omega\left(f_{k}\right)=\left(\sum_{k=1}^{t-1} \Omega\left(f_{k}\right)\right)+\Omega\left(f_{t}\right)=\operatorname{const}+\Omega\left(f_{t}\right)

注意:由于訓(xùn)練第t棵樹時(shí)溃斋,前面的t-1棵樹已經(jīng)全部訓(xùn)練好了界拦,其參數(shù)已經(jīng)確定,所以前面樹的復(fù)雜度也已經(jīng)確定梗劫,這里用const表示享甸。
目標(biāo)函數(shù)變?yōu)椋?br> o b j=\sum_{i=1}^{n} l\left(y_{i}, \hat{y}_{i}^{t-1}+f_{t}\left(x_{i}\right)\right)+\operatorname{const}+\Omega\left(f_{t}\right)

目標(biāo)函數(shù)中的損失函數(shù)部分(第一部分):

??二階泰勒公式:
f(x+\Delta x) \approx f(x)+f^{\prime}(x) \Delta x+\frac{1}{2} f^{\prime \prime}(x) \Delta x^{2}
??我們把\hat{y}_{i}^{t-1}當(dāng)作x截碴,f_{t}\left(x_{i}\right)當(dāng)作\Delta x,則損失函數(shù)的第一部分變?yōu)椋?br> \sum_{i=1}^{n} l\left(y_{i}, \hat{y}_{i}^{t}\right)=\sum_{i=1}^{n} l\left(y_{i}, \hat{y}_{i}^{t-1}+f_{t}\left(x_{i}\right)\right)
\approx \sum_{i=1}^{n}\left[l\left(y_{i}, \hat{y}_{i}^{t-1}\right)+\frac{\partial l\left(y_{i}, \hat{y}_{i}^{t-1}\right)}{\partial \hat{y}_{i}^{t-1}} f_{t}\left(x_{i}\right)+\frac{1}{2} \frac{\partial^{2} l\left(y_{i}, \hat{y}_{i}^{t-1}\right)}{\partial\left(\hat{y}_{i}^{t-1}\right)^{2}}\left(f_{t}\left(x_{i}\right)\right)^{2}\right]
\approx \sum_{i=1}^{n}\left[l\left(y_{i}, \hat{y}_{i}^{t-1}\right)+g_{i} f_{t}\left(x_{i}\right)+\frac{1}{2} h_{i}\left(f_{t}\left(x_{i}\right)\right)^{2}\right]
公式說明:
(1)針對(duì)上式枪萄,一定會(huì)有人對(duì)l\left(y_{i}, \hat{y}_{i}^{t-1}\right) 產(chǎn)生疑惑隐岛,為什么將\hat{y}_{i}^{t-1}當(dāng)作x后,函數(shù)中怎么還有\mathcal{y}_{i}瓷翻?
這里注意聚凹,損失函數(shù)l(*)中的\mathcal{y}_{i}是樣本i的真實(shí)值,所以該值是常量齐帚,函數(shù)l(*)只是與\mathcal{y}_{i}有關(guān)妒牙,但是在求第t棵樹時(shí),前面t-1棵樹已經(jīng)確定了对妄,所以l\left(y_{i}, \hat{y}_{i}^{t-1}\right)就是前t-1棵樹與真實(shí)值的一個(gè)誤差值湘今,是一個(gè)常量;
(2)公式中g_{i}=\frac{\partial l\left(y_{i}, \hat{y}_{i}^{t-1}\right)}{\partial \hat{y}_{i}^{t-1}}剪菱,h_{i}=\frac{\partial^{2} l\left(y_{i}, \hat{y}_{i}^{t-1}\right)}{\partial\left(\hat{y}_{i}^{t-1}\right)^{2}}到底什么含義摩瞎?
其中g_{i},也就是\frac{\partial l\left(y_{i}, \hat{y}_{i}^{t-1}\right)}{\partial \hat{y}_{i}^{t-1}}只是損失函數(shù)l(*)對(duì)預(yù)測(cè)值(上面已經(jīng)提過,預(yù)測(cè)值是變量)求導(dǎo)后孝常,將第t棵樹之前的預(yù)測(cè)值(前面所有樹預(yù)測(cè)值的和)帶進(jìn)去之后的結(jié)果旗们;如果還不理解,借助網(wǎng)上一個(gè)例子:

g_{i}例子:
在一個(gè)分類任務(wù)中构灸,假設(shè)前5棵樹已經(jīng)知道上渴,現(xiàn)在要確定第6個(gè)樹,損失函數(shù)為:
L(\theta)=\sum_{i}\left[y_{i} \ln \left(1+e^{-\hat{y}_{i}}\right)+\left(1-y_{i}\right) \ln \left(1+e^{\hat{y}_{i}}\right)\right]
現(xiàn)有一個(gè)樣本喜颁,真實(shí)標(biāo)簽為1稠氮,但是前5棵樹預(yù)測(cè)的值為-1,由于y_{i}=1半开,所以對(duì)于該樣本隔披,損失函數(shù)變?yōu)椋?br> \ln \left(1+e^{-\hat{y}_{i}}\right)
則,
g_{i}就應(yīng)該是上式對(duì)\hat{y}_{i}求導(dǎo)后寂拆,將前5棵樹總預(yù)測(cè)值-1帶入求導(dǎo)后公式锹锰,得到的結(jié)果值:
求導(dǎo)得:
\frac{1}{ \left(1+e^{-\hat{y}_{i}}\right)}*\left(e^{-\hat{y}_{i}}\right)*(-1) = \frac{-e^{-\hat{y}_{i}}}{1+e^{-\hat{y}_{i}}}
令上式中\hat{y}_{i}=-1,帶入后求得-0.27漓库,也就是g_{i}=-0.27恃慧。
同理,h_{i}是二次求導(dǎo)的結(jié)果渺蒿。

通過以上分析可知:
(1)對(duì)于N個(gè)樣本痢士,則會(huì)有N個(gè)g_{i}h_{i}需要求;
(2)每一個(gè)樣本可以求得一個(gè)g_{i}與一個(gè)h_{i},所以這里可以以并行的方式求取各個(gè)樣本對(duì)應(yīng)的g_{i}h_{i}(這也是XGBoost快的原因之一)怠蹂;
(3)對(duì)于每棵樹的求取過程中善延,涉及到對(duì)損失函數(shù)的二次求導(dǎo),所以XGBoost可以自定義損失函數(shù)城侧,只需損失函數(shù)二次可微即可豆茫。
此時(shí)炮温,目標(biāo)函數(shù)變?yōu)椋?br> O b j^{(t)} \approx \sum_{i=1}^{n}\left[g_{i} f_{t}\left(x_{i}\right)+\frac{1}{2} h_{i}\left(f_{t}\left(x_{i}\right)\right)^{2}\right]+\operatorname{const}+\Omega\left(f_{t}\right)
公式說明:因?yàn)?img class="math-inline" src="https://math.jianshu.com/math?formula=l%5Cleft(y_%7Bi%7D%2C%20%5Chat%7By%7D_%7Bi%7D%5E%7Bt-1%7D%5Cright)" alt="l\left(y_{i}, \hat{y}_{i}^{t-1}\right)" mathimg="1">就是前t-1棵樹與真實(shí)值的一個(gè)誤差值方援,是一個(gè)常量窥浪,故最小化目標(biāo)函數(shù)可以將其移除骨稿。

目標(biāo)函數(shù)中樹復(fù)雜度辙浑,正則項(xiàng)(第二部分):

??上式中,f_{t}\left(x\right)到底是什么?通過前文分析,就是代表一棵樹模型腮介,設(shè)想一下,樹模型就是給定一個(gè)輸入樣本x_i腾节,經(jīng)過模型之后會(huì)將其劃分到某個(gè)葉子節(jié)點(diǎn)上庆冕,并會(huì)給出該葉子節(jié)點(diǎn)預(yù)測(cè)值。所以f_{t}\left(x\right)可以用下式表示:
f_{t}(x)=w_{q(x)}, w \in R^{T}, q : R^v75swnu \rightarrow\{1,2, \cdots, T\}
公式說明:q_x代表一個(gè)樣本輸入之后會(huì)劃分到哪個(gè)葉子節(jié)點(diǎn)上(可以理解為樹的結(jié)構(gòu))劈榨,w_{q(x)}就是一個(gè)樣本經(jīng)過樹模型f_{t}\left(x\right)之后具體預(yù)測(cè)值访递。
正則項(xiàng):XGBoost定義正則項(xiàng)為:
\Omega\left(f_{t}\right)=\gamma T+\frac{1}{2} \lambda \sum_{j=1}^{T} w_{j}^{2}
公式說明:其中w_{j}代表一棵樹中第j個(gè)葉子節(jié)點(diǎn)的預(yù)測(cè)值;T代表一棵樹共有T個(gè)葉子節(jié)點(diǎn)同辣;\gamma\lambda是自定義的值拷姿,在使用模型時(shí)可以設(shè)置,如果\gamma大旱函,則樹的葉子節(jié)點(diǎn)數(shù)越多响巢,則懲罰越大,\lambda則會(huì)懲罰葉子節(jié)點(diǎn)總的預(yù)測(cè)值(理想情況下棒妨,模型是希望一步一步慢慢去逼近真實(shí)值抵乓,而不是一步逼近太多,導(dǎo)致后面可逼近范圍太小)灾炭。
特別說明:上述公式\Omega\left(f_{t}\right)是針對(duì)所有樣本計(jì)算的結(jié)果茎芋。

目標(biāo)函數(shù)再次升級(jí)(關(guān)鍵時(shí)刻):

??通過對(duì)兩部分分析,得到:
\begin{aligned} O b j^{(t)} & \approx \sum_{i=1}^{n}\left[g_{i} w_{q\left(x_{i}\right)}+\frac{1}{2} h_{i} w_{q\left(x_{i}\right)}^{2}\right]+\gamma T+\frac{1}{2} \lambda \sum_{j=1}^{T} w_{j}^{2} \\ &=\sum_{j=1}^{T}\left[\left(\sum_{i \in I_{j}} g_{i}\right) w_{j}+\frac{1}{2}\left(\sum_{i \in I_{j}} h_{i}+\lambda\right) w_{j}^{2}\right]+\gamma T \end{aligned}
公式說明:一定有人會(huì)慌了蜈出,不明白為什么田弥,不要慌,仔細(xì)看下面分析铡原。(1)公式中n表示共有n個(gè)樣本偷厦,T表示待求樹模型共有T個(gè)葉節(jié)點(diǎn);(2)w_{q\left(x_{i}\right)}表示樣本x_i經(jīng)過待求樹模型之后的預(yù)測(cè)值燕刻,w_{j}代表一棵樹中第j個(gè)葉子節(jié)點(diǎn)的預(yù)測(cè)值只泼;(3)\sum_{i=1}^{n}\left[g_{i} w_{q\left(x_{i}\right)}\right.]表示每一個(gè)樣本預(yù)測(cè)值乘以對(duì)應(yīng)的g_i之后的求和(這里在求和過程中會(huì)涉及到每一個(gè)葉子節(jié)點(diǎn));
所以公式轉(zhuǎn)換可以理解為:{先對(duì)每一個(gè)樣本求預(yù)測(cè)值乘以對(duì)應(yīng)的g_i(即g_{i} w_{q\left(x_{i}\right)})卵洗,然后對(duì)所有的樣本求和(即\sum_{i=1}^{n}\left[g_{i} w_{q\left(x_{i}\right)}\right.]}轉(zhuǎn)變?yōu)閧先求所有樣本在第j個(gè)葉子節(jié)點(diǎn)上的預(yù)測(cè)值请唱,然后乘以所有樣本在j節(jié)點(diǎn)上g_i的和,最后對(duì)所有節(jié)點(diǎn)求和}
本人能力有些过蹂,對(duì)于這部分暫時(shí)還沒有想到更好的方法來解釋十绑,后續(xù)想到會(huì)持續(xù)更新,如果讀者有什么好的解釋可以告知酷勺,感謝本橙!

對(duì)上述目標(biāo)函數(shù)再一次升級(jí),得:
\mathrm{obj}^{(t)}=\sum_{j=1}^{T}\left[G_{j} w_{j}+\frac{1}{2}\left(H_{j}+\lambda\right) w_{j}^{2}\right]+\gamma T
公式說明:其中G_{j}H_{j}就是在每個(gè)葉子節(jié)點(diǎn)上g_{i}h_{i}在各個(gè)樣本上的求和脆诉。

堅(jiān)持一下甚亭,馬上結(jié)束了。
??我們的最終目的就是使上述的目標(biāo)函數(shù)最小化击胜,則對(duì)上式求導(dǎo)(上式對(duì)變量w_{j}求偏導(dǎo))亏狰,并使其得0,得:
G_{j}+\left(H_{j}+\lambda\right) w_{j}=0
所以:
w_{j}=\frac{-G_{j}}{H_{j}+\lambda}
帶入原式潜的,得:
Obj=-\frac{1}{2} \sum_{j=1}^{T} \frac{G_{j}^{2}}{H_{j}+\lambda}+\gamma T
公式說明:最終的O b j只是表示一棵樹的預(yù)測(cè)結(jié)果距離真實(shí)值的距離骚揍,與其他值無關(guān)(比如與每個(gè)葉子節(jié)點(diǎn)具體取值無關(guān))字管。
??通過上式啰挪,便可以求出樹的每個(gè)葉子節(jié)點(diǎn)的具體值w_{j},但是到這里結(jié)束了嗎嘲叔?還沒有亡呵,還需要求每棵樹到底應(yīng)該以哪個(gè)屬性(特征)的哪個(gè)分割點(diǎn)進(jìn)行劃分。
??在決策樹中是怎么劃分的呢硫戈?可以參考我的另一篇文章文章锰什。總的來看,就是選擇一個(gè)使得劃分之后的數(shù)據(jù)純度提升最大的屬性及分割點(diǎn)汁胆。XGBoost是選擇使得劃分之后損失減小最大(損失值的增益Gain)的屬性及分割點(diǎn)梭姓。
舉例說明:
??例子來源陳天奇大師論文,有興趣讀者可以自行查閱相關(guān)資料嫩码,這里就不再詳細(xì)介紹該例子誉尖。
??如果對(duì)于一棵樹,現(xiàn)在要求屬性為年齡的最佳分割點(diǎn)铸题,如下圖:

年齡的分割點(diǎn)

從圖中可以看出铡恕,假設(shè)以豎線為分割線,則:
分割前的損失值為:

-\frac{1}{2}*\frac{\left(G_{L}+G_{R}\right)^{2}}{H_{L}+H_{R}+\lambda}+\gamma T

其中丢间,T=1探熔,劃分之前只有一個(gè)葉子節(jié)點(diǎn)。
分割后的損失值為:

(-\frac{1}{2}*\frac{G_{L}^{2}}{H_{L}+\lambda})+(-\frac{1}{2}*\frac{G_{R}^{2}}{H_{R}+\lambda})+\gamma T =-\frac{1}{2}\left[\frac{G_{L}^{2}}{H_{L}+\lambda}+\frac{G_{R}^{2}}{H_{R}+\lambda}\right]+\gamma T

其中T=2烘挫,因?yàn)閯澐种缶妥兂蓛蓚€(gè)葉子節(jié)點(diǎn)诀艰。
則用分割前損失減去分割后損失值,得:

Gain=\frac{1}{2}\left[\frac{G_{L}^{2}}{H_{L}+\lambda}+\frac{G_{R}^{2}}{H_{R}+\lambda}-\frac{\left(G_{L}+G_{R}\right)^{2}}{H_{L}+H_{R}+\lambda}\right]-\gamma

公式說明:該公式代表根據(jù)劃分屬性及劃分節(jié)點(diǎn)對(duì)樣本劃分之后其損失值減小了多少墙牌,所以每次選擇最大的Gain值對(duì)應(yīng)的劃分屬性及劃分節(jié)點(diǎn)即可涡驮,這里求計(jì)算各個(gè)劃分屬性及節(jié)點(diǎn)是并行計(jì)算的。

3喜滨、最后說明

(1)文章開篇已經(jīng)說過捉捅,這里再次強(qiáng)調(diào)。XGBoost中基模型是CART樹虽风,這里的意思只是說基模型中的樹是二叉樹棒口,要與決策樹中CART樹的劃分屬性及劃分節(jié)點(diǎn)的選擇毫無關(guān)系;
(2)模型中既然是對(duì)每次預(yù)測(cè)結(jié)果求和辜膝,則說明每次預(yù)測(cè)結(jié)果是一個(gè)回歸值无牵,而不是類別值,不然求和是無意義的厂抖。

以上內(nèi)容如有理解不當(dāng)茎毁,請(qǐng)指出,謝謝忱辅!另七蜘,文章中有些內(nèi)容來源于一些書籍或其他博客,這里就不一一列舉墙懂,如有侵權(quán)橡卤,請(qǐng)與我聯(lián)系刪除。

最后編輯于
?著作權(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
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)索烹。三九已至工碾,卻和暖如春,著一層夾襖步出監(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