贝叶斯(Bayes)

贝叶斯(Bayes)文章概要

介绍部分


概率论部分

由于贝叶斯是基于概率框架下实施决策的方法,所以在讲解贝叶斯的前提下必须先回顾一下概率论方面的几个基本公式,比如条件概率,全概率公式等等

条件概率

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

全概率公式

P ( B ) = P ( A ) \cdot P \left( \frac { B } { A } \right) + P ( \overline { A } ) \cdot P \left( \frac { B } { \overline { A } } \right)

贝叶斯基础

这一部分主要讲解一些基础的公式概念,如类先验概率,类条件概率,后验概率等等

贝叶斯公式

P ( c | x ) = \frac { P ( c ) P ( x | c ) } { P ( x ) }

  • 注1:是不是可以发现,贝叶斯公式其实就是条件概率公式的转换,比如由条件概率公式我们可以得到\mathrm { P } ( c | x ) = \frac { P ( \mathrm { c } , x ) } { P ( x ) }\mathrm { P } ( x | c ) = \frac { P ( c , x ) } { P ( c ) },接下来只需要将这两个式子对齐就可以得到贝叶斯公式了
  • 注2:\mathrm { P } ( c | x )是后验概率,P ( c )是类先验概率,P ( x | c )是类条件概率
  • 注3:c是指数据的输出类别;x是输入数据的样本;P ( x,c )c = c _ { i }\mathrm { x } = x _ { i }同时发生时的联合概率

后验概率\mathrm { P } ( c | x ):其实是给定测试样本x向量的情况下,判定测试样本为c_{i}的概率
类先验概率P(c):是依据训练集,提前对类别c进行一个样本估计,其实就是统计出时的频数与总训练数据的占比
类条件概率P ( x | c ):就是在给定的情况下,训练数据中x的分布情况

  • 这个应该是比较难理解的部分,我们可以举个例子
  • 假设x的分布为离散的情况:
    • 例:根据西瓜数据集3.0,我们取出属性集set={色泽,触感,好瓜}来作为举例,那么c = c _ { i }就是我们的好瓜属性类别,P ( x | c )的意思就是在c=好瓜的基础上,色泽和触感的分布情况,即有多少西瓜的色泽是青绿的,多少是乌黑的,又有多少西瓜触感是硬滑的等等
  • 如果x是密度和含糖量,那么P ( x | c )的分布就是连续的,相当于联合概率分布的密度函数
    摘自西瓜书P84

贝叶斯决策论

借由西瓜书上的话说,贝叶斯决策论是概率框架下实施决策的基本方法。对分类任务而言,在所有相关概率都已知的理想情形下,贝叶斯决策论是基于这些概率和误判损失来考虑如何选择最优的类别标记。意思就是说我们在为某个样本预测分类的时候,不仅要考虑某个样本属于某个类别的概率最大化,还要考虑误判情况下的损失成本最小化。其中,概率最大化就不用多说了,就是选择样本x属于好瓜的概率和属于坏瓜的概率中的最大的那个作为x的预测类别,而损失成本最小化才是接下来的重点,它包括了基于最小错误率的贝叶斯决策和基于最小风险的贝叶斯决策

基于最小错误率的贝叶斯决策

最小错误率用句简单的话来说,就是用我们已经训练好的模型给我们的测试集预测分类时,我们要考虑每个样本的错误率都能达到最小。这样子的说法是不是似曾相识?因为只要我们反着说,它也就是我们刚刚所说的概率最大化,即在样本属于某个类别的概率中选择最大的那个。这样我们应该就能理解,基于最小错误率的贝叶斯决策理论其实就是按后验概率大小来做决策的。当然这个理论还有许多其他的概念和公式,如下:

  • 最大后验概率
    • P \left( c _ { i } | x \right) = \max _ { c _ { j } } P \left( c _ { j } | x \right) \quad , j \in \{ 1,2,3 , \cdots , N \}
    • 注:N是数据集上的输出的类别数目;公式含义是对样本x求所有类别的后验概率,选择其中概率最大的那个类别作为的c _ { j }作为c _ { i }的类别
  • 最大后验概率的类条件概率形式
    • P ( x | c _ { i } ) P \left( c _ { i } \right) = \operatorname { maxP } ( x | c _ { j } ) P \left( c _ { j } \right) \quad , j \in \{ 1,2,3 , \cdots , N \}
    • 注:这是类先验概率与类条件概率相联系的形式,根据贝叶斯公式P ( c | x ) = \frac { P ( c ) P ( x | c ) } { P ( x ) }得来,因为P(x)是是训练集上的分布,在训练集给定的情况下,它是确定的量,所以我们可以忽略分母,选择分子最大的那个
  • 样本x上的条件风险
    • \mathrm { R } \left( c _ { i } | x \right) = \sum _ { j = 1 } ^ { N } \lambda _ { i j } P \left( c _ { j } | x \right)
    • 注1:\lambda _ { i j }表示将一个真实标记为c_{j}的样本误分类为c_{i}所产生的损失我们的目标如果是最小错误率的话,那么\lambda _ { i j }就遵从以下公式:
      \lambda _ { i j } = \left\{ \begin{array} { l l } { 0 , } & { \text { if } i = j } \\ { 1 , } & { \text { otherwise } } \end{array} \right.
    • 注2:公式是表示样本x分类为c_{i}时所产生的期望损失
  • 总体风险
    • \mathrm { R } ( h ) = \mathbb { E } _ { x } [ R ( h ( x ) | x ) ]
    • 注:公式的意思就是对样本x上的条件风险进行求期望,从而得到总体的风险值,其中h(x)是模型预测的类别
    • 这里是西瓜书上的公式,我们可以利用下面的平均错误率部分来去理解这里的内容
  • 样本错误率
    • P ( e | x ) = 1 - P \left( c _ { i } | x \right)
    • 注:P ( e | x )表示某个样本被错误分类的概率,即错误率;P \left( c _ { i } | x \right)表示某个样本被正确分类的概率
  • 平均错误率
    \begin{aligned} P ( e ) &= \int P ( e | x ) P ( x ) \mathrm { d } x \\ & = \int _ { R _ { 1 } } P \left( \omega _ { 2 } | x \right) P ( x ) \mathrm { d } x + \int _ { R _ { 2 } } P \left( \omega _ { 1 } | x \right) P ( x ) \mathrm { d } x \\ &= \int _ { R _ { 1 } } P ( x | \omega _ { 2 } ) P \left( \omega _ { 2 } \right) \mathrm { d } x + \int _ { R _ { 2 } } P ( x | \omega _ { 1 } ) P \left( \omega _ { 1 } \right) \mathrm { d } x \end{aligned}
    • 注1:P(e)表示所有样本被错误分类的概率之和,另外我们老师称为整体错误率,感觉不太合适;
    • 注2:第一行推到第二行是因为我们将整个样本预测分类空间设定为两类,所以只有\omega _ { 1 }\omega _ { 2 }两个类;
    • 注3: R_{1}表示被预测为\omega _ { 1 }的所有观测值区域,即那些被预测为\omega _ { 1 }类的样本集合; R_{2}则对应的是被预测过\omega _ { 1 }的所有观测值区域
    • 注4: 第二行的\int _ { R _ { 1 } } P \left( \omega _ { 2 } | x \right) P ( x ) \mathrm { d } x示对错误分类的x进行积分,也就是求解所有在R_{1}区域内被每个x被错分为\omega _ { 2 }的概率之和;同样的,\int _ { R _ { 2 } } P \left( \omega _ { 1 } | x \right) P ( x ) \mathrm { d } x也就是求解所有在R_{2}区域内被每个x被错分为\omega _ { 1 }的概率之和
    • 注5:第三行是第二行经过贝叶斯公式P ( c | x ) = \frac { P ( c ) P ( x | c ) } { P ( x ) }的一个变形,也就转化成了对类先验概率和类条件概率乘积的积分形式。这样做的目的是为了降低计算量,比如我们这里使用的是二分类,如果是多分类的情况,我们需要把特征空间划分为R _ { 1 } , R _ { 2 } , \cdots , R _ { c }个区域,在每个区域里,我们都要计算c-1项错误率,即\int _ { R _ { i } } P ( \omega _ { j } | x) P \left( x \right) d x,总共加起来就有 项,而如果我们转换为P ( x | \omega _ { j } ) P \left( \omega _ { j } \right),则类先验概率和类条件概率的计算只有c项,所以计算量上会大大地降低
    • 类条件概率
      • 注1:图来源于课上的PPT,但老师应该也是抄论文上的。除了这个图意外,网上也有很多简单的图解,能让人理解的更为容易,而我采用这个图进行解释,是因为上面信息量比较丰富,并且有些地方我暂时也没能理解,放在这里可以以后拿来复盘使用
      • 注2:整个图形是表示类条件概率的分布情况;其中,红线\omega _ { 1 }向下,x轴向上包裹的这部分,就是我们刚刚所说的R_{1};黑线\omega _ { 1 }向下,x轴向上包裹的这部分也就是R_{2};红色阴影部分表示的是\int _ { R _ { 1 } } P ( x | \omega _ { 2 } ) P \left( \omega _ { 2 } \right) \mathrm { d } x,也就是在 区域内被每个x被错分为 的概率之和;同样地,黑色区域就不解释了
      • 注3:关于reducible error的问题,也就是可以减少的错误,这一点上课的时候听得比较糙,时间也太久,就忘掉了,目前还没有最佳的解决,笔记上唯一的记录点就是X_{B}对应的红黑线相交点,是最佳点,而我们的目标是使得整个分布中的阴影面积最小。

基于最小风险的贝叶斯决策论

在讲最小风险之前,首先我们来考虑一个问题:所有的错误都是等价值的吗?我们之前引用了西瓜数据集中的好瓜和坏瓜来作为样本的二分类,在基于最小风险的贝叶斯决策论里,我们又见到了样本x上的条件风险\mathrm { R } \left( c _ { i } | x \right) = \sum _ { j = 1 } ^ { N } \lambda _ { i j } P \left( c _ { j } | x \right),其中可能对\lambda _ { i j }所代表的含义难以理解,其实这个\lambda _ { i j }就是我们对这个问题的答案——不等同!一方面我们日常生活里,我们作为买瓜的人,可以容忍一个好瓜被我们分类成坏瓜的,最差的结果也就是我们不买瓜而已,而不能容忍的是一个坏瓜被我们当成了好瓜买回家,所以,这两者之间的错误价值是不等同的,而最小风险的贝叶斯决策论就是解决这个问题的——为每个错误添上错误损失的权重,即\lambda _ { i j }不再天然的等于0 or 1了

我们接下来用几个公式来去好好理解一下吧(这里写的比较水,希望以后能补)

二分类情况的目标函数:
\min r = \int _ { R _ { 1 } } \lambda _ { 11 } P ( x | \omega _ { 1 } ) P \left( \omega _ { 1 } \right) + \lambda _ { 21 } P ( x | \omega _ { 2 } ) P \left( \omega _ { 2 } \right) d x \\ \qquad+ \int _ { R _ { 2 } } \lambda _ { 12 } P ( x | \omega _ { 1 } ) P \left( \omega _ { 1 } \right) + \lambda _ { 22 } P ( x | \omega _ { 2 } ) P \left( \omega _ { 2 } \right) d x

扩展为多分类的决策规则:
x \in R _ { i } \quad if \quad l _ { i } \equiv \sum _ { k = 1 } ^ { M } \lambda _ { k i } P ( x | \omega _ { k } ) P \left( \omega _ { k } \right) < l _ { j } \equiv \sum _ { k = 1 } ^ { M } \lambda _ { k j } P ( x | \omega _ { k } ) P \left( \omega _ { k } \right) \quad \forall j \neq i


朴素贝叶斯

借用统计学习方法书里的话,朴素贝叶斯是基于贝叶斯定理与特征条件独立假设的分类方法。对于给定的训练数据集,首先基于特征条件独立假设学习输入/输出的联合概率分布;然后基于此模型,对给定的输入x,利用贝叶斯定理求出后验概率最大的输出y。大致什么意思呢?就是这个模型会基于一个假设前提——特征条件独立,然后根据训练集上的数据得出的联合概率分布(也就是之前所说的类条件概率分布和类先验概率的乘积)去学习出一个分类器模型,然后再对给定的测试集x,利用贝叶斯定理输出预测的分类结果y

条件独立性假设

\begin{aligned} \mathrm { P } ( X = x | Y = c _ { k } ) & = P \left( X ^ { 1 } = x ^ { 1 } , \cdots , X ^ { ( n ) } = x ^ { ( n ) } | Y = c _ { k } \right) \\ & = \prod _ { j = 1 } ^ { n } P \left( X ^ { ( j ) } = x ^ { ( j ) } | Y = c _ { k } \right) \end{aligned}

  • 整个公式是一个条件概率,而X ( j ) = x ^ { ( j ) }是表示某个样本x的第j个特征值为x ^ { ( j ) }Y = c _ { k }表示类别已经确定,而公式的含义是说,特征与特征之间是独立的,也就是没有相互的依赖关系

贝叶斯定理

  • 原始的贝叶斯定理
    P \left( Y = c _ { k } | X = x \right) = \frac { P \left( Y = c _ { k } \right) P ( X = x | Y = c _ { k } ) } { P ( X = x ) }
    • 注:和上面的有一点点不同,相信大家都能看懂!
  • 改进后的贝叶斯定理
    P \left( Y = c _ { k } | X = x \right) = \frac { P \left( Y = c _ { k } \right) P ( X = x | Y = c _ { k } ) } { \sum _ { k } P ( X = x | Y = c _ { k } ) P \left( Y = c _ { k } \right) }
    • 注:这里的改进只是把P(x)写成了全概率公式
  • 代入条件独立性假设的贝叶斯定理
    P \left( Y = c _ { k } | X = x \right) = \frac { P \left( Y = c _ { k } \right) \prod _ { j } P \left( X ^ { ( j ) } = x ^ { ( j ) } | Y = c _ { k } \right) } { \sum _ { k } P \left( Y = c _ { k } \right) \prod _ { j } P \left( X ^ { ( j ) } = x ^ { ( j ) } | Y = c _ { k } \right) }

贝叶斯分类器

\mathrm { y } = \mathrm { f } ( x ) = \mathrm { arg } \max _ { c _ { k } } \frac { P \left( Y = c _ { k } \right) \prod _ { j } P \left( X ^ { ( j ) } = x ^ { ( j ) } | Y = c _ { k } \right) } { \sum _ { k } P \left( Y = c _ { k } \right) \prod _ { j } P \left( X ^ { ( j ) } = x ^ { ( j ) } | Y = c _ { k } \right) }

  • 由于分母对所有的P(c _ { k })都是相同的,所以我们对贝叶斯分类器进行改进,如下:
    \mathrm { y } = \arg \max _ { c _ { k } } P \left( Y = c _ { k } \right) \prod _ { j } P \left( X ^ { ( j ) } = x ^ { ( j ) } | Y = c _ { k } \right)

朴素贝叶斯法的参数估计

因为我们需要学习的是联合分布,所以这里的参数估计就是指对类先验概率的估计和类条件概率的估计。参数估计的方法有两种(其实算是一种),我们接下来展开讲

极大似然估计

极大似然估计是依据频数来计算比例,之后将其作为概率的一种方法

  • 类先验概率的极大似然估计
    P \left( Y = c _ { k } \right) = \frac { \sum _ { i = 1 } ^ { N } I \left( y _ { i } = c _ { k } \right) } { N } , k = 1,2 , \cdots , K
    • 注:N是训练数据集中样本的个数;I \left( y _ { i } = c _ { k } \right)是指示函数(括号内条件成立时为1,不成立时为0);K是指输出的类别共有K
  • 类条件概率的极大似然估计
    P \left( X ^ { ( j ) } = a _ { j l } | Y = c _ { k } \right) = \frac { \sum _ { i = 1 } ^ { N } I \left( x _ { i } ^ { ( j ) } = a _ { j l } , y _ { i } = c _ { k } \right) } { \sum _ { i = 1 } ^ { N } I \left( y _ { i } = c _ { k } \right) }
    • 注1: X ^ { ( j ) }是第i个样本的第j个特征;a _ { j l } 是第j个特征可能取的第l个值
    • 注2:在这里,我们可以发现,估计类条件概率的同时,我们也把某一属性上的特征值和分类结果做了联系
  • 极大似然估计的问题
    用极大似然估计可能会出现所要估计的概率值为0的情况,这时会影响我们对后验概率的计算结果。比如在西瓜数据集里,如果来个测试样例为 P_{清脆|是}=P(敲声=清脆|好瓜=是)=\frac { 0 } { 8 }=0的样例,根据上面的极大似然估计,得到的概率为0。但是如果这个样本的其他属性很明显是好瓜,真实标签也是好瓜,而依据这个样例提供的特征,分类的结果却是坏瓜,这样就很不符合我们日常挑瓜的习惯了

贝叶斯估计

贝叶斯估计就是为了解决极大似然估计的问题才出现的,方法是是在极大似然估计的频数上加了一个正数\lambda,通常这个\lambda \geq 0,而当这个\lambda=0时,贝叶斯估计也就成为了极大似然估计,当\lambda=1时,我们称它为拉普拉斯平滑(Laplace smoothing)

  • 类先验概率的贝叶斯估计
    P _ { \lambda } \left( Y = c _ { k } \right) = \frac { \sum _ { i = 1 } ^ { N } I \left( y _ { i } = c _ { k } \right) + \lambda } { N + K \lambda }
    • 注:K是指训练集上的预测分类项数
  • 类条件概率的贝叶斯估计
    P _ { \lambda } \left( X ^ { ( j ) } = a _ { j l } | Y = c _ { k } \right) = \frac { \sum _ { i = 1 } ^ { N } I \left( x _ { i } ^ { ( j ) } = a _ { j l } , y _ { i } = c _ { k } \right) + \lambda } { \sum _ { i = 1 } ^ { N } I \left( y _ { i } = c _ { k } \right) + S _ { j } \lambda }
    • 注: 表示某个特征的取值数,因为每个特征的取值数是不同的,所以要根据实际的特征数目来计算

朴素贝叶斯算法

输入:训练数据\mathrm { T } = \left\{ \left( x _ { 1 } , y _ { 1 } \right) , \left( x _ { 2 } , y _ { 2 } \right) , \cdots , \left( x _ { N } , y _ { N } \right) \right\},其中x _ { i } = \left( x _ { i } ^ { ( 1 ) } , x _ { i } ^ { ( 2 ) } , \cdots , x _ { i } ^ { ( n ) } \right) ^ { T }x _ { i } ^ { ( j ) }是第i个样本的第j个特征,x _ { i } ^ { ( j ) } \in \left\{ a _ { j 1 } , a _ { j 2 } , \cdots , a _ { j s _ { j } } \right\}a_{jl}是第j个特征可能取的第l个值,\mathrm { j } = 1,2 , \cdots , \mathrm { n }l = 1,2 , \cdots , S _ { j }y _ { i } \in \left\{ c _ { 1 } , c _ { 2 } , \cdots , c _ { K } \right\};实例x
输出:实例x的分类
算法过程:

  • 步骤(1):计算类先验概率和类条件概率
    P _ { \lambda } \left( Y = c _ { k } \right) = \frac { \sum _ { i = 1 } ^ { N } I \left( y _ { i } = c _ { k } \right) + \lambda } { N + K \lambda }
    P _ { \lambda } \left( X ^ { ( j ) } = a _ { j l } | Y = c _ { k } \right) = \frac { \sum _ { i = 1 } ^ { N } I \left( x _ { i } ^ { j } = a _ { j l } , y _ { i } = c _ { k } \right) + \lambda } { \sum _ { i = 1 } ^ { N } I \left( y _ { i } = c _ { k } \right) + S _ { j } \lambda }
  • 步骤(2):对给定的实例x = \left( x ^ { ( 1 ) } , x ^ { ( 2 ) } , \cdots , x ^ { ( n ) } \right) ^ { T },计算每个类别的后验概率
    P \left( Y = c _ { k } \right) \prod _ { j } P \left( X ^ { ( j ) } = x ^ { ( j ) } | Y = c _ { k } \right)
  • 步骤(3):利用分类器公式,确定实例x的类
    \mathrm { y } = \arg \max _ { c _ { k } } P \left( Y = c _ { k } \right) \prod _ { j } P \left( X ^ { ( j ) } = x ^ { ( j ) } | Y = c _ { k } \right)

注:实例可参考西瓜书上的例子,毕竟数据集都是具体已知的,能够看到一些小细节


对于接下来的这两部分,虽然看完了西瓜书上的介绍,但还没有充分理解,所以现在仅介绍一小部分,后期会根据别的书进行更新

半朴素贝叶斯

因为朴素贝叶斯分类器采用的是属性(特征)条件独立性假设,这个假设在现实任务中是很难成立的,而半朴素贝叶斯分类器的提出就是对属性(特征)条件独立性假设做一定程度上的放松,即考虑属性之间的依赖关系。

贝叶斯网

贝叶斯网能够表示任意属性间的依赖性,想比较与半朴素贝叶斯和朴素贝叶斯,朴素贝叶斯和
贝叶斯网像是一种极端,而半朴素贝叶斯更像是他们两者之间的中间版本

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 213,616评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,020评论 3 387
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 159,078评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,040评论 1 285
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,154评论 6 385
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,265评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,298评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,072评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,491评论 1 306
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,795评论 2 328
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,970评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,654评论 4 337
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,272评论 3 318
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,985评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,223评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,815评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,852评论 2 351

推荐阅读更多精彩内容