python機(jī)器學(xué)習(xí)(六)回歸算法-邏輯回歸

邏輯回歸

同步更新在個(gè)人網(wǎng)站:http://www.wangpengcufe.com/machinelearning/pythonml-pythonml6/

一难审、概述

1.1沙绝、概念

是一種名為“回歸”的線性分類(lèi)器慢蜓,是由線性回歸變化而來(lái)的亚再,一種廣泛使用于分類(lèi)問(wèn)題中的廣義回歸算法。

1.2晨抡、按預(yù)測(cè)標(biāo)簽的數(shù)據(jù)類(lèi)型分

連續(xù)型變量:通過(guò)線性回歸方程z氛悬,線性回歸使用輸入的特征矩陣X來(lái)輸出一組連續(xù)型的標(biāo)簽值y_pred则剃,以完成各種預(yù)測(cè)連續(xù)型變量的任務(wù)(比如預(yù)測(cè)產(chǎn)品銷(xiāo)量,預(yù)測(cè)股價(jià)等等)
離散型變量:通過(guò)Sigmoid函數(shù)變換如捅,線性回歸方程z變換為g(z)棍现,使得模型的值分布在(0,1)之間,且當(dāng)g(z)接近0時(shí)樣本的標(biāo)簽為類(lèi)別0镜遣,當(dāng)g(z)接近1時(shí)樣本的標(biāo)簽為類(lèi)別1己肮,這樣就得到了一個(gè)分類(lèi)模型。

線性回歸方程式

1.3悲关、公式

公式

其中谎僻,y(x)就是我們邏輯回歸返回的標(biāo)簽值。

1.4坚洽、本質(zhì)

y(x)的形似幾率取對(duì)數(shù)就是線性回歸戈稿,對(duì)數(shù)幾率回歸,就是邏輯回歸讶舰。

二鞍盗、重要概念

Sigmoid函數(shù):Sigmoid函數(shù)是一個(gè)S型的函數(shù),當(dāng)自變量z趨近正無(wú)窮時(shí)跳昼,因變量g(z)趨近于1般甲,而當(dāng)z趨近負(fù)無(wú)窮時(shí),g(z)趨近于0鹅颊,它能夠?qū)⑷魏螌?shí)數(shù)映射到(0,1)區(qū)間敷存,使其可用于將任意值函數(shù)轉(zhuǎn)換為更適合二分類(lèi)的函數(shù)。

Sigmoid函數(shù)

Sigmoid函數(shù)公式

因?yàn)檫@個(gè)性質(zhì)堪伍,Sigmoid函數(shù)也被當(dāng)作是歸一化的一種方法锚烦,與我們之前學(xué)過(guò)的MinMaxSclaer同理,是屬于數(shù)據(jù)預(yù)處理中的“縮放”功能帝雇,可以將數(shù)據(jù)壓縮到[0,1]之內(nèi)涮俄。區(qū)別在于,MinMaxScaler歸一化之后尸闸,是可以取到0和1的(最大值歸一化后就是1彻亲,最小值歸一化后就是0),但Sigmoid函數(shù)只是無(wú)限趨近于0和1吮廉。

損失函數(shù):是一個(gè)評(píng)估指標(biāo)苞尝,來(lái)衡量參數(shù)為 的模型擬合訓(xùn)練集時(shí)產(chǎn)生的信息損失的大小,并以此衡量參數(shù)的優(yōu)劣宦芦。
損失函數(shù)小宙址,模型在訓(xùn)練集上表現(xiàn)優(yōu)異,擬合充分踪旷,參數(shù)優(yōu)秀曼氛。
損失函數(shù)大豁辉,模型在訓(xùn)練集上表現(xiàn)差勁,擬合不足舀患,參數(shù)糟糕徽级。
我們追求,能夠讓損失函數(shù)最小化的參數(shù)組合聊浅。
注意:沒(méi)有”求解參數(shù)“需求的模型沒(méi)有損失函數(shù)餐抢,比如KNN,決策樹(shù)低匙。

損失函數(shù)公式

θ表示求解出來(lái)的一組參數(shù)旷痕,m是樣本的個(gè)數(shù), yi 是樣本 i 上真實(shí)的標(biāo)簽顽冶, yθ(xi)是樣本 i 上欺抗,基于參數(shù)θ計(jì)算出來(lái)的邏輯回歸返回值,xi 是樣本 i 各個(gè)特征的取值强重。我們的目標(biāo)绞呈,就是求解出使 J(θ)最小的 θ 取值。注意间景,在邏輯回歸的本質(zhì)函數(shù)y(x)里佃声,特征矩陣x是自變量,參數(shù)是 θ倘要。但在損失函數(shù)中圾亏,參數(shù)θ是損失函數(shù)的自變量,x和y都是已知的特征矩陣和標(biāo)簽封拧,相當(dāng)于是損失函數(shù)的參數(shù)志鹃。不同的函數(shù)中,自變量和參數(shù)各有不同泽西,因此大家需要在數(shù)學(xué)計(jì)算中弄跌,尤其是求導(dǎo)的時(shí)候避免混淆。

三尝苇、sklearn中的邏輯回歸

linear_model.LogisticRegression 邏輯回歸分類(lèi)器(又叫l(wèi)ogit回歸,最大熵分類(lèi)器
linear_model.SGDClassifier 利用梯度下降求解的線性分類(lèi)器(SVM埠胖,邏輯回歸等等)
linear_model.SGDRegressor 利用梯度下降最小化正則化后的損失函數(shù)的線性回歸模型

metrics.log_loss 對(duì)數(shù)損失糠溜,又稱邏輯損失或交叉熵?fù)p失
metrics.confusion_matrix 混淆矩陣,模型評(píng)估指標(biāo)之一
metrics.roc_auc_score ROC曲線直撤,模型評(píng)估指標(biāo)之一
metrics.accuracy_score 精確性非竿,模型評(píng)估指標(biāo)之一

sklearn.linear_model.LogisticRegression(penalty='l2', C = 1.0)
Logistic: 回歸分類(lèi)器
coef_:回歸系數(shù)

四、重要參數(shù)

正則化參數(shù), penalty&C:

正則化: 是用來(lái)防止模型過(guò)擬合的過(guò)程谋竖,常用的有L1正則化和L2正則化兩種選項(xiàng)红柱,分別通過(guò)在損失函數(shù)后加上參數(shù)向量 的L1范式和L2范式的倍數(shù)來(lái)實(shí)現(xiàn)承匣。這個(gè)增加的范式,被稱為“正則項(xiàng)”锤悄,也被稱為"懲罰項(xiàng)"韧骗。

penalty: 可以輸入"l1"或"l2"來(lái)指定使用哪一種正則化方式,不填寫(xiě)默認(rèn)"l2"零聚。
注意袍暴,若選擇"l1"正則化,參數(shù)solver僅能夠使用求解方式”liblinear"和"saga“隶症,若使用“l(fā)2”正則化政模,參數(shù)solver中所有的求解方式都可以使用。

C:C正則化強(qiáng)度的倒數(shù)蚂会,必須是一個(gè)大于0的浮點(diǎn)數(shù)淋样,不填寫(xiě)默認(rèn)1.0,即默認(rèn)正則項(xiàng)與損失函數(shù)的比值是1:1胁住。C越小趁猴,損失函數(shù)會(huì)越小,模型對(duì)損失函數(shù)的懲罰越重措嵌,正則化的效力越強(qiáng)躲叼,參數(shù)會(huì)逐漸被壓縮得越來(lái)越小。

# L1正則化和L2正則化的比較
from sklearn.linear_model import LogisticRegression as LR
from sklearn.datasets import load_breast_cancer
import numpy as np
import matplotlib.pyplot as plt
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score
data = load_breast_cancer()
X = data.data
y = data.target
data.data.shape
lrl1 = LR(penalty="l1",solver="liblinear",C=0.5,max_iter=1000)
lrl2 = LR(penalty="l2",solver="liblinear",C=0.5,max_iter=1000)
#邏輯回歸的重要屬性coef_企巢,查看每個(gè)特征所對(duì)應(yīng)的參數(shù)
lrl1 = lrl1.fit(X,y)
lrl1.coef_
lrl1.coef_輸出結(jié)果
(lrl1.coef_ != 0).sum(axis=1)
lrl2 = lrl2.fit(X,y)
lrl2.coef_

lrl2.coef_輸出結(jié)果

結(jié)論:L1正則化會(huì)將參數(shù)壓縮為0枫慷,L2正則化只會(huì)讓參數(shù)盡量小,不會(huì)取到0浪规。

max_iter:
邏輯回歸的數(shù)學(xué)目的是求解能夠讓模型最優(yōu)化或听,擬合程度最好的參數(shù)的值,即求解能夠讓損失函數(shù) 最小化的值笋婿。對(duì)于二元邏輯回歸來(lái)說(shuō)誉裆,有多種方法可以用來(lái)求解參數(shù) ,最著名的是梯度下降法(Gradient Descent)缸濒。

梯度下降法

在這個(gè)圖像上隨機(jī)放一個(gè)小球足丢,當(dāng)我松手,這個(gè)小球就會(huì)順著這個(gè)華麗的平面滾落庇配,直到滾到深藍(lán)色的區(qū)域——損失函數(shù)的最低點(diǎn)斩跌。為了嚴(yán)格監(jiān)控這個(gè)小球的行為,我讓小球每次滾動(dòng)的距離有限捞慌,不讓他一次性滾到最低點(diǎn)耀鸦,并且最多只允許它滾動(dòng)100步,還要記下它每次滾動(dòng)的方向啸澡,直到它滾到圖像上的最低點(diǎn)袖订。

可以看見(jiàn)氮帐,小球從高處滑落,在深藍(lán)色的區(qū)域中來(lái)回震蕩洛姑,最終停留在了圖像凹陷處的某個(gè)點(diǎn)上上沐。非常明顯,我們可以觀察到幾個(gè)現(xiàn)象:

首先吏口,小球并不是一開(kāi)始就直向著最低點(diǎn)去的奄容,它先一口氣沖到了藍(lán)色區(qū)域邊緣,后來(lái)又折回來(lái)产徊,我們已經(jīng)規(guī)定了小球是多次滾動(dòng)昂勒,所以可見(jiàn),小球每次滾動(dòng)的方向都是不同的舟铜。

另外戈盈,小球在進(jìn)入深藍(lán)色區(qū)域后,并沒(méi)有直接找到某個(gè)點(diǎn)谆刨,而是在深藍(lán)色區(qū)域中來(lái)回震蕩了數(shù)次才停下塘娶。這有兩種可能:1) 小球已經(jīng)滾到了圖像的最低點(diǎn),所以停下了痊夭,2) 由于我設(shè)定的步數(shù)限制刁岸,小球還沒(méi)有找到最低點(diǎn),但也只好在100步的時(shí)候停下了她我。也就是說(shuō)虹曙,小球不一定滾到了圖像的最低處。

小球其實(shí)就是一組組的坐標(biāo)點(diǎn)(θ1番舆,θ2酝碳,J) ;小球每次滾動(dòng)的方向就是那一個(gè)坐標(biāo)點(diǎn)的梯度向量的方向恨狈,因?yàn)槊繚L動(dòng)一步疏哗,小球所在的位置都發(fā)生變化,坐標(biāo)點(diǎn)和坐標(biāo)點(diǎn)對(duì)應(yīng)的梯度向量都發(fā)生了變化返奉,所以每次滾動(dòng)的方向也都不一樣;人為設(shè)置的100次滾動(dòng)限制吗氏,就是sklearn中邏輯回歸的參數(shù)max_iter衡瓶,代表著能走的最大步數(shù),即最大迭代次數(shù)牲证。

solver:
sklearn為我們提供了多種求解邏輯回歸參數(shù)θ 的方法(梯度下降法是其中著名的一種),讓我們可以使用不同的求解器來(lái)計(jì)算邏輯回歸关面。求解器的選擇坦袍,由參數(shù)"solver"控制十厢,共有五種選擇。其中“l(fā)iblinear”是二分類(lèi)專用捂齐,也是現(xiàn)在的默認(rèn)求解器蛮放。

  • liblinear : 坐標(biāo)下降法
  • lbfgs:擬牛頓法的一種,利用損失函數(shù)二階導(dǎo)數(shù)矩陣(海森矩陣)來(lái)迭代優(yōu)化損失函數(shù)奠宜。
  • newton-cg : 牛頓法的一種包颁,利用損失函數(shù)二階導(dǎo)數(shù)矩陣(海森矩陣)來(lái)迭代優(yōu)化損失函數(shù)。
  • sag :隨機(jī)平均梯度下降压真,與普通梯度下降法的區(qū)別是每次迭代僅僅用一部分的樣本來(lái)計(jì)算梯度娩嚼。
  • saga:隨機(jī)平均梯度下降的進(jìn)化,稀疏多項(xiàng)邏輯回歸的首選滴肿。

multi_class:
輸入"ovr", "multinomial", "auto"來(lái)告知模型岳悟,我們要處理的分類(lèi)問(wèn)題的類(lèi)型。默認(rèn)是"ovr"泼差。

  • 'ovr':表示分類(lèi)問(wèn)題是二分類(lèi)贵少,或讓模型使用"一對(duì)多"的形式來(lái)處理多分類(lèi)問(wèn)題。
  • 'multinomial':表示處理多分類(lèi)問(wèn)題堆缘,這種輸入在參數(shù)solver是'liblinear'時(shí)不可用滔灶。
  • "auto":表示會(huì)根據(jù)數(shù)據(jù)的分類(lèi)情況和其他參數(shù)來(lái)確定模型要處理的分類(lèi)問(wèn)題的類(lèi)型。比如說(shuō)吼肥,如果數(shù)據(jù)是二分
    類(lèi)录平,或者solver的取值為"liblinear","auto"會(huì)默認(rèn)選擇"ovr"潜沦。反之萄涯,則會(huì)選擇"nultinomial"。

樣本不平衡參數(shù)class_weight:
樣本不平衡是指在一組數(shù)據(jù)集中唆鸡,標(biāo)簽的一類(lèi)天生占有很大的比例涝影,或誤分類(lèi)的代價(jià)很高,即我們想要捕捉出某種特定的分類(lèi)的時(shí)候的狀況争占。

例如:銀行要判斷“一個(gè)新客戶是否會(huì)違約”燃逻,通常不違約的人vs違約的人會(huì)是99:1的比例,真正違約的人其實(shí)是非常少的臂痕。這種分類(lèi)狀況下伯襟,即便模型什么也不做,全把所有人都當(dāng)成不會(huì)違約的人握童,正確率也能有99%姆怪,這使得模型評(píng)估指標(biāo)變得毫無(wú)意義,根本無(wú)法達(dá)到我們的“要識(shí)別出會(huì)違約的人”的建模目的。

因此我們要使用參數(shù)class_weight對(duì)樣本標(biāo)簽進(jìn)行一定的均衡稽揭,給少量的標(biāo)簽更多的權(quán)重俺附,讓模型更偏向少數(shù)類(lèi),向捕獲少數(shù)類(lèi)的方向建模溪掀。該參數(shù)默認(rèn)None事镣,此模式表示自動(dòng)給與數(shù)據(jù)集中的所有標(biāo)簽相同的權(quán)重,即自動(dòng)1:1揪胃。當(dāng)誤分類(lèi)的代價(jià)很高的時(shí)候璃哟,我們使用”balanced“模式,我們只是希望對(duì)標(biāo)簽進(jìn)行均衡的時(shí)候喊递,什么都不填就可以解決樣本不均衡問(wèn)題随闪。

五、案例介紹

5.1册舞、數(shù)據(jù)描述
(1)699條樣本蕴掏,共11列數(shù)據(jù),第一列用語(yǔ)檢索的id调鲸,后9列分別是與腫瘤相關(guān)的醫(yī)學(xué)特征盛杰,最后一列表示腫瘤類(lèi)型的數(shù)值。
(2)包含16個(gè)缺失值藐石,用”?”標(biāo)出即供。

原始數(shù)據(jù)的下載地址:
breast-cancer-wisconsin.data: https://url87.ctfile.com/f/21704187-594546064-ee4b93?p=7287 (訪問(wèn)密碼: 7287)

5.2、特征選擇:
PCA和SVD一般不用于微,大多數(shù)時(shí)候不適用于邏輯回歸逗嫡。邏輯回歸是由線性回歸演變而來(lái),線性回歸的一個(gè)核心目的是通過(guò)求解參數(shù)來(lái)探究特征X與標(biāo)簽y之間的關(guān)系株依,而邏輯回歸也傳承了這個(gè)性質(zhì)驱证,我們常常希望通過(guò)邏輯回歸的結(jié)果,來(lái)判斷什么樣的特征與分類(lèi)結(jié)果相關(guān)恋腕,因此我們希望保留特征的原貌抹锄。PCA和SVD的降維結(jié)果是不可解釋的,因此一旦降維后荠藤,我們就無(wú)法解釋特征和標(biāo)簽之間的關(guān)系了伙单。

import pandas as pd
import numpy as np
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from sklearn.linear_model import LogisticRegression
from sklearn.metrics import classification_report
# 構(gòu)造列標(biāo)簽名字
column = ['Sample code number','Clump Thickness', 'Uniformity of Cell Size','Uniformity of Cell Shape','Marginal Adhesion', 'Single Epithelial Cell Size','Bare Nuclei','Bland Chromatin','Normal Nucleoli','Mitoses','Class']
# 讀取數(shù)據(jù)
data = pd.read_csv("https://archive.ics.uci.edu/ml/machine-learning-databases/breast-cancer-wisconsin/breast-cancer-wisconsin.data", names=column)
# print(data.head())

5.3、數(shù)據(jù)缺失處理哈肖,標(biāo)準(zhǔn)化

# 缺失值進(jìn)行處理
data = data.replace(to_replace='?', value=np.nan)
data = data.dropna()
# 進(jìn)行數(shù)據(jù)的分割
x_train, x_test, y_train, y_test = train_test_split(data[column[1:10]], data[column[10]], test_size=0.25)
# 進(jìn)行標(biāo)準(zhǔn)化處理
std = StandardScaler()
x_train = std.fit_transform(x_train)
x_test = std.transform(x_test)

5.4吻育、估計(jì)器流程

# 邏輯回歸預(yù)測(cè)
lg = LogisticRegression(C=1.0)
lg.fit(x_train, y_train)
print(lg.coef_)
y_predict = lg.predict(x_test)
print("準(zhǔn)確率:", lg.score(x_test, y_test))
print("召回率:", classification_report(y_test, y_predict, labels=[2, 4], target_names=["良性", "惡性"]))
輸出結(jié)果

六、總結(jié)

應(yīng)用:
廣告點(diǎn)擊率預(yù)測(cè)淤井、電商購(gòu)物搭配推薦布疼、股價(jià)預(yù)測(cè)摊趾、產(chǎn)品銷(xiāo)量預(yù)測(cè)

優(yōu)點(diǎn):

  • 線性回歸的數(shù)據(jù)要求:正態(tài)分布,消除多重共線性缎除,現(xiàn)實(shí)數(shù)據(jù)無(wú)法滿足严就;邏輯回歸不需要對(duì)數(shù)據(jù)進(jìn)行處理
  • 對(duì)線性關(guān)系的擬合效果好
  • 邏輯回歸計(jì)算速度快
  • 返回的分類(lèi)結(jié)果不是固定的0和1,而是以小數(shù)形式呈現(xiàn)的類(lèi)概率數(shù)字
  • 抗噪音能力強(qiáng)

缺點(diǎn):當(dāng)特征空間很大時(shí)器罐,邏輯回歸的性能不是很好
(看硬件能力)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市渐行,隨后出現(xiàn)的幾起案子轰坊,更是在濱河造成了極大的恐慌,老刑警劉巖祟印,帶你破解...
    沈念sama閱讀 211,042評(píng)論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件肴沫,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡蕴忆,警方通過(guò)查閱死者的電腦和手機(jī)颤芬,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,996評(píng)論 2 384
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)套鹅,“玉大人站蝠,你說(shuō)我怎么就攤上這事∽柯梗” “怎么了菱魔?”我有些...
    開(kāi)封第一講書(shū)人閱讀 156,674評(píng)論 0 345
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)吟孙。 經(jīng)常有香客問(wèn)我澜倦,道長(zhǎng),這世上最難降的妖魔是什么杰妓? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 56,340評(píng)論 1 283
  • 正文 為了忘掉前任藻治,我火速辦了婚禮,結(jié)果婚禮上巷挥,老公的妹妹穿的比我還像新娘桩卵。我一直安慰自己,他們只是感情好句各,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,404評(píng)論 5 384
  • 文/花漫 我一把揭開(kāi)白布吸占。 她就那樣靜靜地躺著,像睡著了一般凿宾。 火紅的嫁衣襯著肌膚如雪矾屯。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 49,749評(píng)論 1 289
  • 那天初厚,我揣著相機(jī)與錄音件蚕,去河邊找鬼孙技。 笑死,一個(gè)胖子當(dāng)著我的面吹牛排作,可吹牛的內(nèi)容都是我干的牵啦。 我是一名探鬼主播,決...
    沈念sama閱讀 38,902評(píng)論 3 405
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼妄痪,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼哈雏!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起衫生,我...
    開(kāi)封第一講書(shū)人閱讀 37,662評(píng)論 0 266
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤裳瘪,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后罪针,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體彭羹,經(jīng)...
    沈念sama閱讀 44,110評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,451評(píng)論 2 325
  • 正文 我和宋清朗相戀三年泪酱,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了派殷。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,577評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡墓阀,死狀恐怖毡惜,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情岂津,我是刑警寧澤虱黄,帶...
    沈念sama閱讀 34,258評(píng)論 4 328
  • 正文 年R本政府宣布,位于F島的核電站吮成,受9級(jí)特大地震影響橱乱,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜粱甫,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,848評(píng)論 3 312
  • 文/蒙蒙 一泳叠、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧茶宵,春花似錦危纫、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,726評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至瞒大,卻和暖如春螃征,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背透敌。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,952評(píng)論 1 264
  • 我被黑心中介騙來(lái)泰國(guó)打工盯滚, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留踢械,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,271評(píng)論 2 360
  • 正文 我出身青樓魄藕,卻偏偏與公主長(zhǎng)得像内列,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子背率,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,452評(píng)論 2 348