吳恩達(dá)機(jī)器學(xué)習(xí)Coursera-week9

Density Estimation

這個(gè)章節(jié)主要講述了非監(jiān)督機(jī)器學(xué)習(xí)中的異常檢測(cè)算法(anomaly algorithm)菱魔,其原理實(shí)際是利用了在工程、產(chǎn)品的檢測(cè)中减牺,大部分正常產(chǎn)品的各個(gè)feature是服從正態(tài)分布(高斯分布)的豌习,所以給定一個(gè)樣本存谎,我們可以計(jì)算其各個(gè)feature為正常值的概率拔疚,并設(shè)定一個(gè)閾值?,當(dāng)樣本為正常值的概率P大于?時(shí)既荚,我們就認(rèn)為是正常的稚失,當(dāng)這個(gè)P小于?時(shí)我們就認(rèn)為其是異常的。

關(guān)于density estimation的解釋可以參考wiki - density estimation

Problem Motivation

作者在這一小節(jié)主要講了一些實(shí)際應(yīng)用的例子恰聘。

  • 飛機(jī)引擎檢測(cè)
  • 欺詐用戶
  • 數(shù)據(jù)中心的異常檢測(cè)

Gaussian Distribution

這一小節(jié)主要講高斯分布句各,重點(diǎn)就是下圖中的公式和高斯分布圖:


1.1-Gaussian Distribution

高斯密度函數(shù)中有兩個(gè)需要計(jì)算的值吸占,一個(gè)是均值μ,另一個(gè)是平方差??2凿宾,其計(jì)算公式如下:

1.2-Gaussian compution

Algorithm

前面我們已經(jīng)說了矾屯,重點(diǎn)是計(jì)算樣本為正常值的概率P,其計(jì)算就需要如下公式:


1.3-probability compution
  • 針對(duì)每一個(gè)feature的維度都需要進(jìn)行高斯計(jì)算初厚,從而算出μ和??2件蚕,然后針對(duì)不同的樣本x來計(jì)算出P
  • 這里引入了一個(gè)新的數(shù)學(xué)符號(hào)Π,這是意味著相乘的關(guān)系

那么产禾,整個(gè)異常檢測(cè)算法的流程如下:


1.4- anomaly detection algorithm

Building an Anomaly Detection System

這個(gè)章節(jié)重點(diǎn)講了工程實(shí)踐中具體是怎么訓(xùn)練我們的模型排作。

Developing and evaluating an anomaly detection system

首先,作者將了如何將我們的樣本分為training set, cross validation set和testing set亚情,舉例如下:


2.1-sample sets
  • 要將異常樣本放到CV和test集中

那么最終這個(gè)?如何選擇呢妄痪?重點(diǎn)就是要根據(jù)我們的precision/recall rate, F-score來選擇這個(gè)?值,而不能使用error rate楞件,這是由于我們的樣本集是數(shù)據(jù)傾斜的(skewed)衫生,即負(fù)樣本數(shù)遠(yuǎn)大于正樣本數(shù),所以需要使用precision/recall rate, F-score, 如下圖:


2.2-choosing ?

Anomaly Detection vs. Supervised Learning

本小節(jié)重點(diǎn)講了在哪些情況下使用anomaly detection履因,哪些情況下使用supervised learning障簿。其主要區(qū)別如下:


2.3-anomaly detection vs. supervised learning
  • 當(dāng)y=1(即異常樣本)的樣本非常少的時(shí)候我們很難通過訓(xùn)練讓supervised learning算法“學(xué)習(xí)”到什么時(shí)候?yàn)?;相比較而言如果有大量y=0的樣本我們就可以計(jì)算其高斯分布情況栅迄,從而識(shí)別其為正常值的概率站故,通過閾值?我們就可以知道何為異常,何為正常
  • 當(dāng)異常有很多種類的時(shí)候毅舆,甚至于有些異澄髀ǎ可能之前都沒有發(fā)生過,這種情況下很難通過supervised learning來“學(xué)習(xí)”到這種異常情況憋活,所以這種情況更適合anomaly detection

Choosing Features

此小節(jié)主要講了如何針對(duì)anomaly detection來選擇feature岂津。我個(gè)人的理解如下:

想象一下我們自己如何去識(shí)別這個(gè)異常,可以使用哪些“指標(biāo)”來發(fā)現(xiàn)異常悦即,那么這些“指標(biāo)”就可以作為feature吮成。

另外,在我們異常檢測(cè)時(shí)辜梳,如果發(fā)現(xiàn)某個(gè)異常的樣本在我們的模型中P值很高(即檢測(cè)為正常)粱甫,那么很有可能是其某個(gè)檢測(cè)指標(biāo)沒有在我們的檢測(cè)模型當(dāng)中,我們可以看看這個(gè)異常值究竟哪里異常作瞄,用什么指標(biāo)可以檢測(cè)到這個(gè)異常茶宵,這樣我們就可以為我們的異常檢測(cè)系統(tǒng)發(fā)現(xiàn)新的feature,如下圖所示:


2.4-discover new features

另外, 我們還可以通過一些原始“指標(biāo)”的組合來形成新的feature宗挥,如下圖所示:


2.5-compose new features

最后乌庶,我們需要看下我們這些feature的數(shù)值分布是否符合高斯分布种蝶,如果不符合,就需要將這些數(shù)據(jù)進(jìn)行轉(zhuǎn)換瞒大,讓“新的feature”的數(shù)值分布符合高斯分布螃征。如下圖所示:


2.6-feature transform

總結(jié)選擇feature的過程如下:

  • 根據(jù)我們?nèi)祟惤?jīng)驗(yàn),選擇可能檢測(cè)到異常的指標(biāo)作為feature
  • 通過CV和測(cè)試集發(fā)現(xiàn)模型中存在異常的樣本但是P值卻很高透敌,分析可能遺漏的feature
  • 還可通過原始指標(biāo)的組合形成新的feature
  • 將不符合高斯分布的指標(biāo)進(jìn)行轉(zhuǎn)換

Multivariate Gaussian Distribution

本章主要講了多元高斯分布模型(multivariate gaussian distribution)

multivariate gaussian distribution

在現(xiàn)實(shí)使用高斯分布的時(shí)候会傲,我們會(huì)發(fā)現(xiàn)有些情況下兩個(gè)feature是有相關(guān)性的,Andrew舉了一個(gè)數(shù)據(jù)中心異常檢測(cè)的例子拙泽,我們會(huì)發(fā)現(xiàn)計(jì)算機(jī)的cpu使用率和memory使用率是有一定相關(guān)性的淌山,通常cpu使用率越高,memory使用率也就越高顾瞻,如果一臺(tái)機(jī)器CPU使用率很低泼疑,但是memory很高,那么異常的可能性就較大荷荤,這種情況下用我們之前的高斯分布模型就無法檢測(cè)到退渗,如下圖所示:


3.1-data center example
  • 圖中可以看出雖然在同一個(gè)等高線上(紅色圓圈)概率P是相同的,但是實(shí)際上在橢圓圈(藍(lán)色橢圓)中的概率P顯然應(yīng)該更加高一些(由于cpu和memory的正相關(guān))
  • 這就是為什么我們需要引入多元高斯模型蕴纳,從而可以讓我們的高斯模型有更多調(diào)整和控制

多元高斯分布的計(jì)算公式如下圖所示:


3.2-multivariate gaussian distribution formula
  • 這里涉及到協(xié)方差矩陣和行列式的概念会油,具體可以參考wiki-協(xié)方差矩陣wiki - 行列式
  • 行列式計(jì)算可以直接使用octave中的函數(shù)det來進(jìn)行計(jì)算

接下來,我們看下協(xié)方差矩陣∑和均值μ是如何影響我們的分布模型的古毛。
首先翻翩,協(xié)方差矩陣對(duì)角線上的數(shù)值會(huì)影響不同維度的高斯分布的寬度,如下圖所示:


3.3-example1
  • 這里可以看到協(xié)方差矩陣對(duì)角線上的值會(huì)影響高斯分布的寬窄稻薇,而且對(duì)角線的第一個(gè)值(位置[1, 1])影響的是x1嫂冻,其越大那么x1維度上高斯分布越寬,下降也越慢塞椎;對(duì)角線上第二個(gè)值([2,2])影響x2方向上的高斯分布桨仿。

再看第二個(gè)例子


3.4-example2
  • 這里看到另一個(gè)方向上的對(duì)角線的值影響的是x1, x2的相關(guān)性,值越大案狠,x1和x2越相關(guān)
  • 相關(guān)性的含義就是服傍,當(dāng)x1越大,正常情況下x2也越大(cpu和memory的例子), 這種情況下我們用這個(gè)模型就可以很好的契合本章剛開始的例子(高斯分布圖已經(jīng)變成了橢圓形)

也可以是負(fù)相關(guān)骂铁,即x1越大吹零,相應(yīng)的x2應(yīng)當(dāng)越小,可以通過設(shè)為負(fù)值讓其負(fù)相關(guān)从铲,如下圖:


3.5-example3

最后瘪校,均值會(huì)影響到高斯分布的中心點(diǎn)位置澄暮,如下圖所示:


3.6-example4

本節(jié)疑問是名段,中心點(diǎn)的概率應(yīng)當(dāng)是接近于1的阱扬,但是看到課程的示例其高點(diǎn)都沒有到1,甚至遠(yuǎn)低于1伸辟,這個(gè)不明白為什么是這種情況麻惶?

Anomaly Detection Using Multivariate Gaussian Distribution

本小節(jié)主要講如何使用多元高斯分布,首先我們要計(jì)算均值μ和協(xié)方差矩陣∑信夫,如下圖:


3.7-multivariate gaussian distribution
  • 通過上圖的公式計(jì)算好μ和∑之后窃蹋,我們就可以將新的樣本x一起代入公式當(dāng)中,從而計(jì)算出概率P

實(shí)際上静稻,原來的高斯模型是多元高斯模型的一個(gè)特殊形式而已警没,如下圖所示:


3.8-relation between original gaussian distribution and multivariate gaussian distributon

這兩種高斯模型各有利弊,反而original高斯模型使用更加頻繁一些振湾。其利弊比較如下圖所示:


3.9-original vs. multivariate
  • 針對(duì)相關(guān)性問題杀迹,我們可以生成一個(gè)新的feature(如圖x3),從而讓original model也可以檢測(cè)到這種相關(guān)性。相比較而言多元高斯模型是自動(dòng)捕獲這種相關(guān)性的押搪。
  • original模型計(jì)算相對(duì)簡(jiǎn)單树酪,因此當(dāng)n非常大的時(shí)候,就非常適合這i種模型大州。相較而言续语,多元高斯模型的計(jì)算量相當(dāng)大。
  • 最后由于數(shù)學(xué)上限制厦画,當(dāng)m<n時(shí)我們是無法使用多元高斯模型的疮茄。

Recommendation System

Rating Movie

此小節(jié)主要講了我們是如何在推薦系統(tǒng)中給電影進(jìn)行預(yù)測(cè)打分的,重點(diǎn)是講了一些notation根暑,如下圖:


4.1-movie rating system notations

Content Based Recommendations

此小節(jié)主要講了如何基于內(nèi)容進(jìn)行推薦娃豹,本質(zhì)上是將電影的一些特征組成一個(gè)特征向量,然后根據(jù)每個(gè)用戶已經(jīng)評(píng)分的電影樣本進(jìn)行訓(xùn)練(Linear Regression)购裙,從而為每一個(gè)用戶都訓(xùn)練出一個(gè)單獨(dú)的模型(即每個(gè)用戶都會(huì)有一個(gè)不同的θ)這樣的話懂版,就可以針對(duì)沒有評(píng)分的電影進(jìn)行預(yù)測(cè)。過程如下圖所示:


4.2-movie rating model

所以躏率,我們的優(yōu)化目標(biāo)跟Linear Regression類似躯畴,只是我們需要針對(duì)每個(gè)用戶都要計(jì)算其cost function的最小值,所以最終的公式如下圖所示:


4.3-optimization objective
  • 圖4.3上邊的公式是計(jì)算當(dāng)個(gè)用戶的優(yōu)化目標(biāo)薇芝,注意這里省略了m蓬抄,因?yàn)椴挥绊懽詈蟮摩戎?/li>
  • 圖4.3下方的公式是針對(duì)所有用戶的優(yōu)化目標(biāo),實(shí)際就是把針對(duì)單個(gè)用戶的優(yōu)化目標(biāo)相加


    4.4-optimization algorithm
  • 根據(jù)我們的優(yōu)化目標(biāo)的公式夯到,我們可以針對(duì)其進(jìn)行梯度下降計(jì)算
  • 注意這里是要針對(duì)每一個(gè)用戶(θ(j))的每一個(gè)θk(k 從0到n)都要進(jìn)行梯度計(jì)算嚷缭。舉個(gè)例子,假設(shè)我們的movie使用了兩個(gè)特征值,那么我們的特征向量就是2+1個(gè)維度阅爽,所以我們要為每個(gè)用戶都計(jì)算其相應(yīng)的θ0路幸,θ1,θ2付翁。假設(shè)我們有5個(gè)用戶需要計(jì)算(即j從1到5)简肴,那么總共要計(jì)算3x5=15個(gè)θ。

個(gè)人認(rèn)為百侧,實(shí)際項(xiàng)目中很難使用此種方法砰识,因?yàn)榇蟛糠钟脩艨赡芨揪筒粫?huì)去給電影評(píng)分,也就沒有樣本可以訓(xùn)練佣渴,因此也就無法訓(xùn)練出相應(yīng)的模型

Collaborative Filtering

Collaborative Filtering

此章節(jié)重點(diǎn)講協(xié)同過濾算法辫狼,為什么要使用協(xié)同過濾呢,主要原因在于如果電影數(shù)量龐大辛润,我們手工去標(biāo)注電影的feature x1予借, x2會(huì)非常麻煩,因此我們就會(huì)想频蛔,如果我們已知各個(gè)用戶的θ值灵迫,是否也能推測(cè)出其feature值呢,如下圖所示晦溪,顯然是可以的:


5.1-predict feature according to θ

然后瀑粥,問題就轉(zhuǎn)化為求如下最優(yōu)解的問題:


5.2-optimization algorithm
  • 這里的regularization item變成了針對(duì)x,而不是θ
  • 當(dāng)針對(duì)所有的movie的時(shí)候三圆,我們要需要將x(1)到x(no of moview)的所有誤差項(xiàng)都加總起來狞换,如此就有了下方的公式。最終我們只需要針對(duì)下方的公式來求解最小值舟肉,從而得到x的最優(yōu)解

那么修噪,問題來了,我們又如何得到θ路媚,從而去求解x呢黄琼?這成了一個(gè)先有雞還是先有蛋的問題。解決此類問題的一種辦法是整慎,先隨機(jī)取一組θ值脏款,然后去優(yōu)化x,用得到的x再去優(yōu)化θ裤园,循環(huán)往復(fù)撤师,如下圖所示:


5.3-optimization both θ and x

下一節(jié),我們會(huì)看到一種更好的辦法拧揽。

Collaborative Filtering Algorithm

首先剃盾,我們可以將兩組優(yōu)化公式(一個(gè)是針對(duì)θ腺占,另一個(gè)是針對(duì)x)整合在一起,如下圖所示:


5.4-collaborative filtering optimization objective
  • 無論針對(duì)x還是針對(duì)θ痒谴,其本質(zhì)都是找尋某個(gè)x和θ使得預(yù)測(cè)值(即某個(gè)用戶針對(duì)某個(gè)電影的評(píng)分)和真實(shí)值(真實(shí)評(píng)分)之間的差值最小衰伯。而這個(gè)差值對(duì)于兩個(gè)公式來說,本質(zhì)是一樣的闰歪,都是找尋有用戶評(píng)分的電影( 即r(i, j)=1 ),和預(yù)測(cè)值蓖墅,然后計(jì)算其差值的平方库倘。
  • 正則部分,由于我們是同時(shí)針對(duì)θ和x進(jìn)行求解论矾,因此就需要有同時(shí)針對(duì)θ和x的正則項(xiàng)教翩。
  • 另外,我們也不需要設(shè)定x0贪壳, θ0饱亿,這些都會(huì)交給算法自動(dòng)訓(xùn)練出來。

最后闰靴,整個(gè)算法的訓(xùn)練和預(yù)測(cè)過程如下:


5.5-collaborative filtering algorithm procedure

Low Rank Matrix Factorization

Vectorize: Low Rank Matrix Factorization

此小節(jié)主要是講在計(jì)算預(yù)測(cè)值的時(shí)候彪笼,我們不需要一個(gè)用戶一個(gè)電影的計(jì)算,而可以通過vectorization的方式進(jìn)行計(jì)算蚂且,如下圖所示:


6.1-vectorization computing

由于這種計(jì)算方式在線性代數(shù)中叫做low rank matrix factorization配猫,因此我們這種協(xié)同過濾算法有時(shí)也被稱為low rank matrix factorization算法
隨后Andrew又提出了一個(gè)問題,就是我們?cè)趺礃涌梢耘袛嘁粋€(gè)電影是相關(guān)的呢杏死?針對(duì)一個(gè)電影泵肄,我們可能有很多的features,那么這時(shí)候如何判斷兩個(gè)電影的相關(guān)性呢淑翼?本質(zhì)上我們可以用這些feature的vector來表示一部電影腐巢,這樣電影就都可以用vector來表示了,那么問題就轉(zhuǎn)化為如何判斷兩個(gè)vector的相關(guān)性了玄括,通過前面的學(xué)習(xí)我們知道冯丙,其中一種方法就是看兩個(gè)vector的歐幾里得距離,具體如下圖所示:


6.2-finding related movies

Implementation Detail: Mean Normalization

我們之所學(xué)所思皆來源于問題遭京,那么此小節(jié)所講正是來源于之前我提到的一個(gè)問題银还,即當(dāng)用戶評(píng)分很少或者干脆沒有評(píng)分的時(shí)候怎么辦?如下當(dāng)用戶沒有任何評(píng)分的時(shí)候洁墙,最后我們通過優(yōu)化公式優(yōu)化的結(jié)果就是所有的θ均為0蛹疯,那么預(yù)測(cè)值也就全是0,這樣就沒有預(yù)測(cè)效果了热监。


6.3-question: if user has no ratings

那么捺弦,我們?cè)撊绾谓鉀Q這個(gè)問題呢?一個(gè)最直觀的辦法就是將每部電影的平均評(píng)分賦給這個(gè)沒有評(píng)分的用戶。那么列吼,我們不可能去找哪個(gè)用戶沒有評(píng)分幽崩,哪個(gè)用戶評(píng)分?jǐn)?shù)量不夠,我們可以通過算法來解決這個(gè)問題寞钥,如下圖所示:


6.4-mean normalization
  • 通過mean normalization(即讓原先的x慌申,記作xori減去均值μ從而轉(zhuǎn)化為新的features,記作xnew)理郑,我們可以得到一個(gè)新的feature matrix吩坝,然后再通過這個(gè)新的feature matrix來訓(xùn)練θ和xnew
  • 最終預(yù)測(cè)的時(shí)候我們需要將均值加回來怨酝,因此就有(θ(j))T(x(i)new) + μ
  • 針對(duì)沒有評(píng)分的用戶Eve况脆,最終由于加了μ友扰,所以其預(yù)測(cè)值就是均值。

其它疑問

  1. 視頻中Andrew沒有講針對(duì)一個(gè)item赚爵,我們?cè)撊绾芜x擇其features棉胀?實(shí)際上,我們可能也無需關(guān)心某個(gè)feature的含義冀膝,但是feature的數(shù)量是需要我們?nèi)ミx擇的唁奢。那么該如何解決呢?

答案是:做實(shí)驗(yàn)窝剖。比如我們可以先選擇兩個(gè)feature驮瞧,訓(xùn)練之后,讓其在CV集上預(yù)測(cè)枯芬,計(jì)算error rate论笔,然后再選擇5個(gè)feature嘗試,再選擇更多的feature嘗試千所,最終我們可以繪制一個(gè)feature數(shù)量和error rate的關(guān)系圖狂魔,從而判斷feature數(shù)量n為幾的時(shí)候,error rate最低淫痰。

  1. Andrew講的協(xié)同過濾算法和網(wǎng)上搜索查到的協(xié)同過濾算法感覺并不是相同的算法最楷,這是怎么回事?
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末待错,一起剝皮案震驚了整個(gè)濱河市籽孙,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌火俄,老刑警劉巖犯建,帶你破解...
    沈念sama閱讀 206,126評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異瓜客,居然都是意外死亡适瓦,警方通過查閱死者的電腦和手機(jī)竿开,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,254評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來玻熙,“玉大人否彩,你說我怎么就攤上這事∴滤妫” “怎么了列荔?”我有些...
    開封第一講書人閱讀 152,445評(píng)論 0 341
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)枚尼。 經(jīng)常有香客問我贴浙,道長(zhǎng),這世上最難降的妖魔是什么姑原? 我笑而不...
    開封第一講書人閱讀 55,185評(píng)論 1 278
  • 正文 為了忘掉前任悬而,我火速辦了婚禮呜舒,結(jié)果婚禮上锭汛,老公的妹妹穿的比我還像新娘。我一直安慰自己袭蝗,他們只是感情好唤殴,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,178評(píng)論 5 371
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著到腥,像睡著了一般朵逝。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上乡范,一...
    開封第一講書人閱讀 48,970評(píng)論 1 284
  • 那天配名,我揣著相機(jī)與錄音,去河邊找鬼晋辆。 笑死渠脉,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的瓶佳。 我是一名探鬼主播芋膘,決...
    沈念sama閱讀 38,276評(píng)論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼霸饲!你這毒婦竟也來了为朋?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 36,927評(píng)論 0 259
  • 序言:老撾萬榮一對(duì)情侶失蹤厚脉,失蹤者是張志新(化名)和其女友劉穎习寸,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體傻工,經(jīng)...
    沈念sama閱讀 43,400評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡融涣,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,883評(píng)論 2 323
  • 正文 我和宋清朗相戀三年童番,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片威鹿。...
    茶點(diǎn)故事閱讀 37,997評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡剃斧,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出忽你,到底是詐尸還是另有隱情幼东,我是刑警寧澤,帶...
    沈念sama閱讀 33,646評(píng)論 4 322
  • 正文 年R本政府宣布科雳,位于F島的核電站根蟹,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏糟秘。R本人自食惡果不足惜简逮,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,213評(píng)論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望尿赚。 院中可真熱鬧散庶,春花似錦、人聲如沸凌净。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,204評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽冰寻。三九已至须教,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間斩芭,已是汗流浹背轻腺。 一陣腳步聲響...
    開封第一講書人閱讀 31,423評(píng)論 1 260
  • 我被黑心中介騙來泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留划乖,地道東北人贬养。 一個(gè)月前我還...
    沈念sama閱讀 45,423評(píng)論 2 352
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像迁筛,于是被迫代替她去往敵國(guó)和親煤蚌。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,722評(píng)論 2 345

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