Andrew NG Coursera教程學(xué)習(xí)筆記-Week3

Classification and Representation

Classification

此小節(jié)主要講了哪些情況下需要使用分類模型扁达,以及為什么線性回歸模型不能很好的解決分類問(wèn)題。
Andrew舉了一個(gè)例子來(lái)說(shuō)明為什么線性回歸模型不能很好地解決分類問(wèn)題害淤。如下圖:


tumor problem with linear regression model

由上圖可知熊镣,如果我們要對(duì)tumor進(jìn)行分類(malignant or benign?)那么就需要設(shè)定一個(gè)閾值(threshold), 比如此例設(shè)定為0.5卑雁,當(dāng)y>=0.5時(shí),我們認(rèn)為就是1绪囱,即malignant测蹲,同理y<0.5時(shí),就認(rèn)為是0鬼吵,即benign扣甲。貌似也可以去做預(yù)測(cè)啊,我們接著看下幅圖:


linear regression with another value

當(dāng)我們的樣本數(shù)據(jù)有了新的數(shù)據(jù)后齿椅,我們的線性回歸模型曲線會(huì)調(diào)整角度文捶,但此時(shí),如果仍然以0.5為閾值的話媒咳,顯然有一部分?jǐn)?shù)據(jù)就會(huì)預(yù)測(cè)錯(cuò)誤粹排。
直觀上,從圖形上看也能看出來(lái)涩澡,線性模型的曲線(直線)很難很好的擬合樣本顽耳。
因此,在這節(jié)課開(kāi)始,將引入logistic regression射富。

另外有幾個(gè)概念膝迎,要知曉。
兩分類的問(wèn)題我們也叫做binary classification problem胰耗。而如果是更多分類類型限次,則叫做multi-class classification problem。
而在binary classification問(wèn)題中柴灯,通常分為0和1卖漫, 0代表negative class, 1代表positive class赠群。

Hypothesis Representation

sigmoid function

我們期望我們的模型輸出為0到1之間的數(shù)值羊始,從而可以分類為0或1.因此我們的模型需要滿足如下條件:

0<=h(θ)<=1

數(shù)學(xué)中有一個(gè)函數(shù)恰好可以實(shí)現(xiàn)這種操作,即給定一個(gè)參數(shù)查描,會(huì)輸出0~1之間的數(shù)值突委,這就是sigmoid function 或者叫做logistic function,這個(gè)function的定義如下:


sigmoid function or logistic function

下面我們可以把我們之前的線性模型的輸出結(jié)果作為參數(shù)傳遞給該sigmoid函數(shù)冬三,這樣其輸出就可以變?yōu)?~1之間的數(shù)值匀油。因此,將h(θ)代入z就有如下公式:


hypothesis representation.png

最終其函數(shù)曲線如下:


sigmoid function
hypothesis interpretation

我們sigmoid化后的假設(shè)其輸出是一個(gè)0~1的數(shù)值勾笆,而這個(gè)數(shù)值顯示的其實(shí)是一個(gè)概率钧唐。這個(gè)概率就是預(yù)測(cè)y=1的概率。那么匠襟,相應(yīng)的y=0的概率就是1-h(x)钝侠。我們也可以如下表示:


probability

統(tǒng)計(jì)概率的表示法,P(y =1 | x; θ)表示當(dāng)取值為x酸舍,且this probability is parameterized by θ帅韧,其輸出y為1的概率。

Decision Boundary

此小節(jié)主要講了什么是decision boundary啃勉,以及它是怎么產(chǎn)生的忽舟,并從直覺(jué)上理解這個(gè)東西。
從上一小節(jié)淮阐,我們已經(jīng)知道sigmoid函數(shù)的樣子叮阅,從圖形中可以看到當(dāng)橫軸坐標(biāo)大于等于0時(shí),其值大于等于0.5泣特,也就是說(shuō)輸出為1的概率大于等于0.5浩姥,因此我們就可以分類為1;同樣道理状您,當(dāng)其橫坐標(biāo)小于0時(shí)勒叠,我們就可以分類為0兜挨。而上一節(jié)我們知道這個(gè)橫坐標(biāo)實(shí)際是我們的h(x)函數(shù)的輸出。所以可以得出如下結(jié)論:
當(dāng)如下公式成立時(shí)眯分,就認(rèn)為概率>=0.5拌汇,也就歸類為1:


equation

當(dāng)如下公式成立時(shí),就認(rèn)為概率<0.5弊决,也就歸類為0:


equation

接著噪舀,Andrew舉了一個(gè)例子,來(lái)讓我們理解什么是decision boundary飘诗。
decision boundary

這里實(shí)際假設(shè)我們已經(jīng)訓(xùn)練好了這個(gè)模型与倡,其theta值為[-3; 1; 1]的vector,這是我們要根據(jù)上邊的公式就會(huì)得出如下結(jié)論:
當(dāng) -3+x1+x2 >= 0 疚察,我們就會(huì)認(rèn)為y=1;

同樣當(dāng)-3 +x1 + x2 < 0時(shí)仇奶, 我們就會(huì)認(rèn)為y=0.
這里根據(jù) x1 + x2 = 3來(lái)畫(huà)一條線貌嫡,這條線其實(shí)就是所謂的decision boundary,如上圖所示该溯,在線上的我們就認(rèn)為是1岛抄,此直線以下的就認(rèn)為是0。直觀上也可以非常好的理解狈茉。

當(dāng)然夫椭,在實(shí)際工程應(yīng)用時(shí),可能不會(huì)如此簡(jiǎn)單氯庆,邊界可能不會(huì)如此規(guī)則的通過(guò)一條直線來(lái)劃分蹭秋。它也有可能如下圖所示非直線邊界:

non-linear decision boundary

正如我們之前的課程講到的,可以使用特征的不同choice堤撵,比如可以使用高階多項(xiàng)式的方式(higher order polynomial regression)仁讨。這里實(shí)際就是使用了二次多項(xiàng)式函數(shù),theta取值為[-1; 0; 0; 1; 1]時(shí)实昨,我們可以得出其邊界方程洞豁,實(shí)際如上圖所示的圓圈。
更進(jìn)一步的荒给,可能是不規(guī)則的圖形丈挟,如下圖所示:
complex

總之,從這些例子可以看出志电,只要我們找到了θ曙咽,并且選擇對(duì)應(yīng)的feature和feature choice,我們就可以畫(huà)出一個(gè)邊界來(lái)區(qū)分0挑辆, 1值桐绒,從而實(shí)現(xiàn)了分類夺脾。所以關(guān)鍵點(diǎn)就在于找到這個(gè)θ和feature choice蚤蔓,得出這個(gè)邊界公式键耕,也就是我們通常所說(shuō)的算法。

Cost Function

此小節(jié)主要講了針對(duì)logistic regression模型页滚,我們應(yīng)該使用什么樣的cost function烁竭。
首先菲茬,Andrew講了如果要使用原先線性回歸模型的cost function,就會(huì)導(dǎo)致該cost function為非凸函數(shù)(non-convex)派撕,這樣我們找到的就是局部最優(yōu)值婉弹,而非全局最優(yōu)值,如下圖左邊的圖所示终吼,而我們的目標(biāo)是找到一個(gè)凸函數(shù)作為cost function镀赌,如下圖右邊的圖所示:


cost function

所以,針對(duì)logistic regression模型际跪,我們采用如下cost function:


cost function of logistic regression

當(dāng)y=1時(shí)商佛,其cost function的函數(shù)圖如下:
y=1

當(dāng)y=1時(shí),實(shí)際就是說(shuō)我們的樣本的輸出值y均為1的時(shí)候姆打,我們通過(guò)這個(gè)cost function來(lái)訓(xùn)練我們的模型良姆,這時(shí)候,如果我們的cost function趨近于0幔戏,那么相應(yīng)的模型輸出值趨近于1玛追,也就越接近我們的實(shí)際情況,相反闲延,h(x)輸出如果趨近于0痊剖,那么cost function就會(huì)趨于無(wú)窮大,也就懲罰了該算法垒玲。

當(dāng)y=0時(shí)邢笙,其函數(shù)圖如下:


y=0

同樣,當(dāng)h(x)輸出越接近1侍匙,其cost function就越趨近于無(wú)窮大氮惯,這就會(huì)懲罰該算法。

Simplified Cost Function and Gradient Decent

本小節(jié)主要講述了簡(jiǎn)化后的cost function想暗,以及如何針對(duì)這個(gè)cost function做梯度下降妇汗。

cost function

在上一小節(jié),我們已經(jīng)知道Cost function分為兩種情況说莫,一種是y=1杨箭,一種是y=0。但也正因?yàn)橹挥袃煞N情況储狭,所以我們可以通過(guò)一個(gè)數(shù)學(xué)小技巧來(lái)將兩個(gè)公式合并成一個(gè)公式互婿,如下:


simplified cost function

課上Andrew已經(jīng)詳細(xì)講解了驗(yàn)證y等于0和1的過(guò)程捣郊,不再詳述。
接下來(lái)我們將Cost function代入J(θ), 再看下最終的J(θ)的樣子,如下所示:


J(θ) of Logistic Regression

我們還可以將這個(gè)公式vectorized:
首先慈参,對(duì)于線性回歸的hypothesis呛牲,我們針對(duì)每個(gè)樣本的variables可以通過(guò)如下公式計(jì)算其輸出值h驮配,其中x(i)為單個(gè)樣本的向量:
hypothesis

由此娘扩,我們可以得出整體輸出的向量h,其公式如下:


vectorized hypothesis

注意牺陶,這里的X是大寫(xiě),表示所有樣本的矩陣麻削,大家可以推導(dǎo)下匿沛。
之后,由于我們需要sigmoid該函數(shù)腿准,從而形成新的假設(shè)吞加,如下:
h=g(Xθ)

最終J(θ) vectorized之后如下圖:


vectorized cost function

Gradient Decent

我們最終的目的依然是尋找J(θ)的最小值,同樣的尽狠,我們?nèi)匀豢梢杂锰荻认陆档姆椒▉?lái)尋找這個(gè)最小值衔憨。前面,我們已經(jīng)證明過(guò)了通過(guò)使用這個(gè)cost function我們可以得到凸函數(shù)袄膏,所以是可以找到全局最小值的践图。
函數(shù)的梯度下降過(guò)程其實(shí)是類似的,都是通過(guò)迭代的方式不斷計(jì)算新的θ值沉馆,以使得J(θ)不斷減小码党。在此過(guò)程中,同樣需要通過(guò)求J(θ)的導(dǎo)數(shù)斥黑,原理跟線性回歸類似揖盘。求導(dǎo)之后,最終迭代過(guò)程如下圖所示:


gradient decent

可以看出心赶,這個(gè)梯度下降的過(guò)程和線性回歸模型非常類似扣讼,但是這里的hθ(x)是sigmoid function,而不是原先的θ'X缨叫。
另外椭符,該梯度下降公式也可以vectorized化荔燎,從而不需要每次都需要一個(gè)加總的循環(huán)去計(jì)算,如下:


vectorized gradient decent

需要注意的是當(dāng)我們?cè)诤罄m(xù)使用fminunc時(shí)销钝,gradient只需要計(jì)算??/??θ*J(θ), 這個(gè)求導(dǎo)展開(kāi)后是如下公式:


gradient

即沒(méi)有l(wèi)earning rate有咨,但是需要除以m

最后,F(xiàn)eature Scaling同樣適用于logistic regression模型蒸健。

Advanced Optimization

此小節(jié)主要講了一些除梯度下降以外的高級(jí)優(yōu)化方法座享,而這些優(yōu)化的算法都已經(jīng)在函數(shù)庫(kù)中實(shí)現(xiàn),我們只需要知道如何調(diào)用即可似忧。

優(yōu)化的目標(biāo)

首先要明確我們的優(yōu)化目標(biāo)是選擇J(θ)的最小值渣叛。
先來(lái)看下原先梯度下降的過(guò)程:


gradient decent

其中,而如果我們有了J(θ)和J(θ)的導(dǎo)數(shù)盯捌,我們可以利用如下方法來(lái)快速找到最優(yōu)值淳衙。

  • conjugate gradient
  • BFGS
  • L-BFGS
    Octave以及其它一些語(yǔ)言的庫(kù)中一般都有提供這些高級(jí)算法的實(shí)現(xiàn),所以一般的我們只需要直接調(diào)用饺著。例子如下:


    fminunc

    總體來(lái)說(shuō)箫攀,就是需要我們自己寫(xiě)一個(gè)cost function,并返回J(θ)值即jVal幼衰,以及gradient vector靴跛。然后通過(guò)調(diào)用fminunc函數(shù)我們就可以自己選取這些高級(jí)的算法并自動(dòng)計(jì)算出收斂后的θ值,以及J(θ)值渡嚣,和是否收斂的標(biāo)志位梢睛,如下圖所示:


    octave execute fminunc

    注意optimset是用于設(shè)置函數(shù)的參數(shù),這里使用參數(shù)'GradObj' 為 ‘On'表明我們的cost function會(huì)提供decent object严拒, MaxIter 為100表明我們最多只迭代100次扬绪。
    傳遞函數(shù)的時(shí)候通過(guò)@funcname來(lái)傳遞竖独。
    需要注意的是initialTheta的維數(shù)必須>=2

Multiclass Classification

此小節(jié)主要講述了什么是multiclass classification裤唠,并且著重講了通過(guò)one-vs-all方法來(lái)獲取不同類別的概率的方法。實(shí)際上就是給定Feature x莹痢,計(jì)算其為某個(gè)特定分類i的概率种蘸,即P(y =i | x; θ)


one.png

當(dāng)有多個(gè)分類時(shí),我們會(huì)計(jì)算所有分類的概率竞膳,然后選取最大值航瞭,即可能性最大的分類作為輸出。

Solving the problem of Overfitting

The Problem of Overfitting

此小節(jié)主要講了過(guò)擬合問(wèn)題(Overfitting)
首先Andrew講了在機(jī)器學(xué)習(xí)訓(xùn)練過(guò)程中存在的三種情況:
underfitting(high bias)坦辟, just right刊侯, overfitting(high variance)
過(guò)擬合overfitting實(shí)際就是過(guò)于精確地去匹配了樣本,導(dǎo)致無(wú)法更一般化地去預(yù)測(cè)锉走。


overfitting

解決過(guò)擬合主要有兩種方式:

  • 減少Feature的數(shù)量:同樣有兩種方式一種是手工選取features滨彻;另外是通過(guò)算法自動(dòng)選取
  • Regularization正則化藕届,等待后續(xù)課程再看。


    address overfitting.png

Cost Function

此小節(jié)主要講了如何去regularization亭饵,為什么這樣是有效果的休偶。
直覺(jué)上理解下,線性回歸模型中辜羊,當(dāng)feature很多踏兜,甚至還有很多高階多項(xiàng)式的時(shí)候,就可能產(chǎn)生過(guò)擬合現(xiàn)象八秃,而要減少這些features的影響就要盡量減少它們的權(quán)重碱妆,即讓?duì)茸冃。梢栽O(shè)想極端情況下昔驱,某些θ減小到0山橄,這時(shí)就可能退化成二次線性方程,曲線也就更加平滑舍悯。所以航棱,此時(shí)就避免了過(guò)擬合現(xiàn)象。而為了讓?duì)茸冃∶瘸模覀兛梢栽赾ost function中使用正則化技巧饮醇,課堂老師舉了個(gè)例子,讓J(θ)加一個(gè)1000*θ秕豫,這樣cost function為了最小朴艰,那么對(duì)應(yīng)的θ也就會(huì)變得很小。如下圖所示:


intuition

通常情況下混移,我們不知道應(yīng)該選取哪個(gè)θ來(lái)加到J(θ)當(dāng)中祠墅,因此我們會(huì)為所有的θ值統(tǒng)一乘一個(gè)數(shù),再加到J(θ)當(dāng)中歌径,也就得到了如下公式:


cost function with regularization

其中λ(lambda)叫做regularization parameter毁嗦,顯然,這個(gè)λ越大回铛,那么梯度下降后狗准,θ值就會(huì)越小,相對(duì)應(yīng)的項(xiàng)和feature影響的權(quán)重也就越小茵肃,但是要避免走向另外一個(gè)極端腔长,即如果λ非常大,想象一下那些多項(xiàng)式幾乎都為0验残,那么就成了underfitting了捞附。

這里有一個(gè)問(wèn)題就是λ如何選擇呢?

Regularized Linear Regression

此小節(jié)主要講了如何針對(duì)LR進(jìn)行正則化。

Gradient Decent Regularization

首先鸟召,看下梯度下降正則化之后是什么樣:


regularized LR

需要注意的是:

  • θ0是不需要正則化的想鹰,所以單獨(dú)拿了出來(lái)
  • 1- ??λ/m是必須要>0, 因?yàn)棣热绻?lt;=0就不對(duì)了。通常 ??λ/m是一個(gè)接近于1的數(shù)药版,比如0.99
  • 如果使用微積分的話辑舷,我們可以證明最終求導(dǎo)后的公式如下:


    gradient decent with regularization

    變換一下,如下:


    gradient decent with regularization

Normal Equation with Regularization

作為對(duì)比槽片,首先看下之前我們的Normal Equation公式


normal equation

通過(guò)正則化后的J(θ)重新求導(dǎo)并set為0何缓,就會(huì)得到如下公式:


normal equation with regularization
  • L是一個(gè)接近于單元矩陣的n+1維的方陣,只是最左上角設(shè)為0
  • 針對(duì)沒(méi)有正則化的normal equation还栓,我們之前講過(guò)有些矩陣是沒(méi)有逆矩陣的碌廓,因此如果使用inv函數(shù)求逆矩陣的時(shí)候可能就行不通,但是通過(guò)正則化之后剩盒,可以證明其肯定會(huì)有逆矩陣谷婆,因此對(duì)于無(wú)法求解逆矩陣的情況,也會(huì)通過(guò)正則化的方式來(lái)解決辽聊。

Regularized Logistic Regression

通過(guò)正則化纪挎,我們同樣可以解決Logistic Regression的過(guò)擬合問(wèn)題,如下圖所示:


logistic.png

先看下原先的J(θ)公式:


cost function without regularization

正則化之后如下:
cost function with regularization

針對(duì)這個(gè)新的J(θ)跟匆, 我們可以通過(guò)如下方式進(jìn)行梯度下降异袄,可以看出跟LR是非常相似的,但是那個(gè)h(x)已經(jīng)不是原先的θ'x玛臂, 而是sigmoid化之后的函數(shù)烤蜕。


gradient decent

另外,我們同樣可以使用之前課程所說(shuō)的高級(jí)優(yōu)化方法(通過(guò)調(diào)用fminunc)迹冤,同樣我們需要提供一個(gè)計(jì)算cost function的函數(shù)讽营,如下圖所示:
advanced optimization
  • 注意:上邊的公式有誤,gradient(j)的公式應(yīng)當(dāng)如下(是+λ/m*θj):

    regularized gradient

  • 注意在計(jì)算jVal的時(shí)候需要加正則化的term

  • 計(jì)算gradient的時(shí)候我們不需要learning rate泡徙,只需要計(jì)算J(θ)的導(dǎo)數(shù)

  • 對(duì)于gradient(1)橱鹏, 我們需要單獨(dú)計(jì)算,不需要正則化

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末锋勺,一起剝皮案震驚了整個(gè)濱河市蚀瘸,隨后出現(xiàn)的幾起案子狡蝶,更是在濱河造成了極大的恐慌庶橱,老刑警劉巖,帶你破解...
    沈念sama閱讀 221,695評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件贪惹,死亡現(xiàn)場(chǎng)離奇詭異苏章,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,569評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門枫绅,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)泉孩,“玉大人,你說(shuō)我怎么就攤上這事并淋≡幔” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 168,130評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵县耽,是天一觀的道長(zhǎng)句喷。 經(jīng)常有香客問(wèn)我,道長(zhǎng)兔毙,這世上最難降的妖魔是什么唾琼? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 59,648評(píng)論 1 297
  • 正文 為了忘掉前任,我火速辦了婚禮澎剥,結(jié)果婚禮上锡溯,老公的妹妹穿的比我還像新娘。我一直安慰自己哑姚,他們只是感情好祭饭,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,655評(píng)論 6 397
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著叙量,像睡著了一般甜癞。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上宛乃,一...
    開(kāi)封第一講書(shū)人閱讀 52,268評(píng)論 1 309
  • 那天悠咱,我揣著相機(jī)與錄音,去河邊找鬼征炼。 笑死析既,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的谆奥。 我是一名探鬼主播眼坏,決...
    沈念sama閱讀 40,835評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼酸些!你這毒婦竟也來(lái)了宰译?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 39,740評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤魄懂,失蹤者是張志新(化名)和其女友劉穎沿侈,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體市栗,經(jīng)...
    沈念sama閱讀 46,286評(píng)論 1 318
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡缀拭,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,375評(píng)論 3 340
  • 正文 我和宋清朗相戀三年咳短,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片蛛淋。...
    茶點(diǎn)故事閱讀 40,505評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡咙好,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出褐荷,到底是詐尸還是另有隱情勾效,我是刑警寧澤,帶...
    沈念sama閱讀 36,185評(píng)論 5 350
  • 正文 年R本政府宣布叛甫,位于F島的核電站葵第,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏合溺。R本人自食惡果不足惜卒密,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,873評(píng)論 3 333
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望棠赛。 院中可真熱鬧哮奇,春花似錦、人聲如沸睛约。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,357評(píng)論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)辩涝。三九已至贸伐,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間怔揩,已是汗流浹背捉邢。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,466評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留商膊,地道東北人伏伐。 一個(gè)月前我還...
    沈念sama閱讀 48,921評(píng)論 3 376
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像晕拆,于是被迫代替她去往敵國(guó)和親藐翎。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,515評(píng)論 2 359

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