linear regression and logistic regression

①linear regression

target function的推導(dǎo)

線性回歸是一種做擬合的算法:

通過工資和年齡預(yù)測額度翎蹈,這樣就可以做擬合來預(yù)測了枢赔。有兩個特征,那么就要求有兩個參數(shù)了,設(shè)置
\theta_1,\theta_2
,對應(yīng)工資和年齡兩個字段的值屋摔。擬合的公式一般都是
s = wx + b
副瀑,所以還缺一個
b
,所以還要設(shè)置一個
\theta_0
信认,所以決策函數(shù)就是
h_{\theta}(x) = \theta_0+\theta_1x_1+\theta_2x_2
潦蝇。這個決策函數(shù)的形式并不是推出來的,而是經(jīng)驗(yàn)之舉設(shè)置成這個形式的堤魁。可以設(shè)置多一個
x_0
,使得
x_0=1
,然后上式就可以變成
h_{\theta}(x) = \theta_0x_0+\theta_1x_1+\theta_2x_2
布蔗,整合一下议街,
h_{\theta}(x) = \sum_{i=0}^{i = 2}\theta_ix_i=\theta^Tx

誤差

上面的\theta_0可以看做是一個誤差,這個誤差滿足高斯分布,服從均值為0鳄炉,方差為\theta^2的高斯分布记靡,也就是高斯分布。因?yàn)榍蟪鰜淼臄M合數(shù)值不是一定就準(zhǔn)確的紊选,肯定會有一些的誤差卖词。


一般誤差不會太多舶替,都是在0上下浮動的抛蚁,所以0附近是最高的概率。
使用linear regression要滿足三個條件:
1.獨(dú)立爷辙,每一個樣本點(diǎn)之間都要相互獨(dú)立血当。
2.同分布领跛,他們的銀行是一樣的郑什,使用的算法是一樣的。
3.誤差都服從高斯分布。

由于誤差是服從高斯分布的,自然有:P(\theta_0)=\frac{1}{\sqrt{2\pi}\sigma}exp(-\frac{\theta_0^2}{2\sigma^2})
上述式子有:y = \theta^Tx+\theta_0
P(\theta_0)=\frac{1}{\sqrt{2\pi}\sigma}exp(-\frac{(y_i-\theta^Tx_i)^2}{2\sigma^2})
需要求參數(shù)\theta诵叁,自然就是最大似然函數(shù):
L(\theta)=\prod_{i=1}^m\frac{1}{\sqrt{2\pi}\sigma}exp(-\frac{(y_i-\theta^Tx_i)^2}{2\sigma^2})
log化簡:
logL(\theta) = log\prod_{i=1}^m\frac{1}{\sqrt{2\pi}\sigma}exp(-\frac{(y_i-\theta^Tx_i)^2}{2\sigma^2})
=mlog\frac{1}{\sqrt{2\pi}\sigma}+\sum_{i=1}^m(-\frac{(y_i-\theta^Tx_i)^2}{2\sigma^2})
=mlog\frac{1}{\sqrt{2\pi}\sigma}-\frac{1}{2\sigma^2}\sum_{i=1}^m(y_i-\theta^Tx_i)^2
最大化這個似然函數(shù)那就是最小化\frac{1}{2\sigma^2}\sum_{i=1}^m(y_i-\theta^Tx_i)^2。因?yàn)榍懊娑际浅?shù)玉凯,可以忽略势腮。而這個式子稍微變一下就是最小二乘法了。
最小二乘法:f = \frac{1}{2}\sum_{i=1}^m(h_{\theta}(x_i)-y_i)^2漫仆,不用上面化簡出來的式子非要加上\frac{1}{2}是因?yàn)榍髮?dǎo)之后2是可以和0.5抵消的捎拯。

目標(biāo)函數(shù)的化簡

化簡一下:
J(\theta)=\frac{1}{2}\sum_{i=1}^m(h_{\theta}(x_i)-y_i)^2
=\frac{1}{2}(x\theta-y)^T(x\theta-y)
求極小值赶熟,直接就是導(dǎo)數(shù)為0即可,所以對\theta求導(dǎo)數(shù)即可。
\bigtriangledown_{\theta}J(\theta) = \bigtriangledown_{\theta}(\frac{1}{2}(\theta^Tx^T-y^T)(x\theta-y))
= \bigtriangledown_{\theta}\frac{1}{2}(\theta^Tx^Tx\theta-\theta^Tx^Ty-y^Tx\theta+y^Ty)
=x^Tx\theta-x^Ty
直接令等于0:\theta = (x^Tx)^{-1}x^Ty回官。
這樣就是得到了最終的目標(biāo)函數(shù)悼尾,一步就可以到達(dá)最終的optimal value沮焕。這就是linear regression肾扰。所以線性回歸是有解析解的切端,直接一條公式就可以求出來的匙奴。注意上面的公式J(\theta)=\frac{1}{2}\sum_{i=1}^m(h_{\theta}(x_i)-y_i)^2\theta^Tx是不包含bias偏置值非凌,偏置項(xiàng)就是誤差殃姓,代入高斯函數(shù)推導(dǎo)出來的。

②logistic regression

target function 的推導(dǎo)

首先要提一個函數(shù),sigmoid函數(shù):f(x) = \frac{1}{1+e^{-z}}
這個函數(shù)之前被用來做神經(jīng)網(wǎng)絡(luò)的激活函數(shù)丹皱,但是它有一個缺點(diǎn)蛤迎。

離原點(diǎn)處越遠(yuǎn)梯度就越趨近于0使套,在神經(jīng)網(wǎng)絡(luò)里面就會出現(xiàn)一個梯度消失的問題,所以后來就用relu或者tanh函數(shù)代替了鞠柄。這個函數(shù)的值域是在
(0, 1)
侦高,所以sigmoid函數(shù)可以把一個值映射成一個概率,通過這個函數(shù)就可以做出一個概率厌杜,最后用過這個概率來區(qū)分類別奉呛。這里的決策函數(shù)還是和之前的一樣
h(x) = \sum_{i=1}^m\theta_ix+\theta_0
這樣有點(diǎn)麻煩,可以把
\theta_0
合并到
h(x)
夯尽,只需要在
x
中加多一列1就好了瞧壮,所以函數(shù)可以簡化
h(x) = \theta^Tx
。這還是不是最終的決策函數(shù)匙握,這只是一個值咆槽,只是一個得分,需要把這個得分轉(zhuǎn)換成一個概率圈纺。所以最終的決策函數(shù)就是
h(x) = \frac{1}{1+e^{-\theta^Tx}}
秦忿。假設(shè)有兩個類別
y=1,y=0
,那么可以假設(shè)屬于
y=1
的類別就是
p(y=1|x;\theta) = h(x)
蛾娶,屬于
y=0
的類別就是
p(y=0|x;\theta) = 1-h(x)

這樣的兩個的式子對于求導(dǎo)和化簡都不好灯谣,所以合并一下:
P(y|x:\theta) = (h(x)^y)(1-h(x)^{1-y})
因?yàn)閥只有1和0,如果當(dāng)前的分類是y蛔琅,那么就是
h(x)
的概率胎许,不是就是另外一個。

目標(biāo)函數(shù)的化簡

最大似然函數(shù)罗售,常規(guī)操作辜窑,給定了數(shù)據(jù)集找到符合這個數(shù)據(jù)集的分布一般也就是最大似然函數(shù)適合了。所以L(\theta) = \prod_{i=1}^mP(y_i|x_i;\theta) = \prod_{i=1}^{m}(h(x_i)^{y_i}(1-h(x_i))^{1-y_i})
log化:
l(\theta) = \sum_{i=1}^m(y_llogh(x_i)+(1-y_i)log(1-h(x_i)))

所以梯度更新公式:
\theta_j = \theta_j - \alpha\frac{1}{m}\sum_{i=1}^m(h(x_i)-y_i)x_i^j

這個方法就梯度下降莽囤,問題來了谬擦,為什么要用梯度下降切距?為什么不可以直接等于0呢朽缎?

logistics regression沒有解析解

如果等于0,就有:\sum_{n=1}^Nsigmoid(\theta^Tx) = x^Ty考察一下兩個特征兩個樣本的情況:


有三個不同的sigmoid函數(shù)谜悟,兩個式子解不了话肖,因?yàn)閟igmoid函數(shù)不是線性的,如果是線性的葡幸,那么可以吧\theta提出來最筒,這樣就有解了。其實(shí)如果sigmoid去掉蔚叨,僅僅把sigmoid(\theta^Tx) = \theta^Tx那么就和linear regression一樣了床蜘。所以是沒有解析解的辙培,主要的原因就是因?yàn)閟igmoid函數(shù)是一個非線性的函數(shù)。

當(dāng)標(biāo)簽不同的時候另一種函數(shù)形式

計(jì)算分?jǐn)?shù)函數(shù)一樣的:score = W^Tx
之前了解的preceptron


直接把score分?jǐn)?shù)通過一個sign函數(shù)即可邢锯。0/1錯誤扬蕊。
linear regression:
線性回歸就是去掉了sign函數(shù),使其成為一個線性函數(shù)丹擎,error function = square
logistic regression:

常規(guī)操作尾抑,就是要找到error function先。按照剛剛的函數(shù)分布可以得到:

極大似然函數(shù):

sigmoid函數(shù)有一個比較牛逼的性質(zhì)蒂培。1-\frac{1}{1+e^{-x}}=\frac{e^{-x}}{1+e^{-x}}=\frac{1}{\frac{1}{e^{-x}}+1} = \frac{1}{1+e^x}
1-h(x) = h(-x)
所以美滋滋再愈,替換一下就OK了:

P(x_i)
是先驗(yàn)概率,開始就給定的了护戳,是可以忽略的翎冲。
最大值一般比較難求,加上負(fù)號變成一個最小化的問題灸异,化簡一下:

其實(shí)這個就是交叉熵函數(shù)府适,和上面推導(dǎo)出的:
是一個東西,整合起來了而已肺樟,負(fù)號提前檐春,所以形式有點(diǎn)不一樣。最小化error function:

gradient decent么伯,和剛剛的方法是一樣的疟暖。


上面的\theta(yw^Tx)可以看做是-yx的線性加權(quán),要求就是加權(quán)和之后為0田柔,而如果是線性可分的話俐巴,則只要\theta為0就可以了;根據(jù)sigmoid函數(shù)的特性硬爆,為0就相當(dāng)于是-yw^Tx要 << 0欣舵,即-yw^Tx >> 0,這就尷尬了缀磕,需要保證全部的yx都同號缘圈,都是線性可分的,這樣其實(shí)是很難做到的袜蚕,所以我們轉(zhuǎn)換一個思路糟把,用梯度下降解決。歸根到底牲剃,還是sigmoid函數(shù)的非線性遣疯。

Stochastic Gradient Descent

隨機(jī)梯度下降,以往的經(jīng)驗(yàn)是全部一起做一次更新凿傅,如果計(jì)算量非常大缠犀,那么計(jì)算復(fù)雜度很高数苫,另外如果是做online learning的時候也不方便,因?yàn)檫@個時候數(shù)據(jù)不是一個betch的過來了辨液,而是幾個幾個的了文判。


優(yōu)點(diǎn):簡單,如果迭代次數(shù)夠多的話是可以比得上average true gradient的效果的室梅。
缺點(diǎn):迭代的方向會不穩(wěn)定戏仓,可能會左拐右拐的。average true gradient是查找的當(dāng)前一階導(dǎo)最適合的方向走的亡鼠,而SGD是直接隨機(jī)一個方向走赏殃。


他和PLA其實(shí)很像,而在理解上面其實(shí)也是類似间涵,他們都選取一個點(diǎn)進(jìn)行調(diào)整仁热。而SGD ≈ soft PLA,PLA是錯了之后才糾正勾哩,而SGD會看下你錯了多少抗蠢,錯了越多,意味著你的wx越大思劳,所以糾正的越多迅矛,是動態(tài)可變的,所以也叫做soft PLA潜叛。

③線性模型error function的對比

三個比較簡單算法:PLA秽褒,linear regression,logistic regression威兜。他們勇于分類的時候:



square function對于分類來說其實(shí)不太合理的销斟,分類正確了,應(yīng)該越遠(yuǎn)越好才對椒舵,但是square function是越遠(yuǎn)錯誤就越大蚂踊,是不合理的,logistics就更合理了笔宿,錯誤的越錯就越大正確的就小犁钟,所以linear regression適合回歸而不是分類。
可以看到ce和err0/1是有焦點(diǎn)的措伐,我們乘上一個數(shù)字使他相切:



根據(jù)VC bound的理論:

所有l(wèi)ogistic regression是可以作為分類的特纤,而且他的分類效果要比linear regression好军俊,首先直觀理解錯誤侥加,他比linear regression更合理,其次粪躬,他的VC bound比linear regression要小担败,這就證明了Ein ≈ Eout的概率會更高昔穴,泛化能力更強(qiáng)。

④Nonlinear Transformation

對于線性可分的情況來說提前,幾乎是不用對x做什么預(yù)處理就可以直接使用模型進(jìn)行分類吗货,但是如果是對于非線性的模型,上面的方法就有點(diǎn)吃力了狈网,他們都是線性分類宙搬,直接在model上改進(jìn)有點(diǎn)困難,所以在數(shù)據(jù)上進(jìn)行處理拓哺。

這種是絕逼找不到一條直線分開的勇垛,要完成這種任務(wù)就需要找一個非線性的模型分開,比如看起來這就像是一個圓:
h(x) = -x_1^2-x_2^2+0.6


把上面的式子變成我們認(rèn)識的形式:
w_1 = -1,w_2=-2,w_0=0.6

于是決策函數(shù):
h(x) = sign(w_1z_1+w_2z_2+z_0)

其實(shí)就是把x空間映射到了z空間士鸥,然后再z空間解決闲孤。x里面是nonlinear的,映射到z可能就會是linear的了烤礁,低緯度解決不了的問題拉到高維度解決:

支持向量機(jī)也用到了這種思想讼积,核函數(shù)就是映射到高維度空間里面然后進(jìn)行切片操作。
Nolinear Transformation的方法不止一個:

目前我們所討論的都是過原點(diǎn)的脚仔,如果是不過原點(diǎn)的話勤众,那么他們的VC dimension就會增加。比如這種
f(x) = (1,x_1^2,x_2^2,x_1x_2,x_1,x_2)

其實(shí)鲤脏,做法很簡單决摧,利用映射變換的思想,通過映射關(guān)系凑兰,把x域中的最高階二次的多項(xiàng)式轉(zhuǎn)換為z域中的一次向量掌桩,也就是從quardratic hypothesis轉(zhuǎn)換成了perceptrons問題。用z值代替x多項(xiàng)式姑食,其中向量z的個數(shù)與x域中x多項(xiàng)式的個數(shù)一致(包含常數(shù)項(xiàng))波岛。這樣就可以在z域中利用線性分類模型進(jìn)行分類訓(xùn)練。訓(xùn)練好的線性模型之后音半,再將z替換為x的多項(xiàng)式就可以了则拷。具體過程如下:

整個過程就是通過映射關(guān)系,換個空間去做線性分類曹鸠,重點(diǎn)包括兩個:
特征轉(zhuǎn)換
訓(xùn)練線性模型

Price of Nonlinear Transform

首先煌茬,用十二指腸想都知道:d_{vc}^{nonlinear} >=d_{vc}^{linear}
如果是d維的x做二次的擴(kuò)展,那么有

求上界彻桃,如果階數(shù)更高坛善,假如階數(shù)為Q,對于x是d維,那么對于z空間就是
這種特征變換會導(dǎo)致計(jì)算空間變大眠屎,計(jì)算復(fù)雜度變大剔交。另外,可以看到隨著Q增大改衩,W也會增大敷燎,這樣就導(dǎo)致了VC dimension會增大藕筋,而W的秩其實(shí)就是VC維敛苇,所以匣椰,如果Q越大,就會導(dǎo)致泛化能力變差橄镜。

接下來討論一下x到z多項(xiàng)式的變換:
一維:
f_0(x) = (1)

二維:
f_1(x) = (f_0(x),x_1,x_2,...x_d)

三維:
f_2(x) = (f_1(x),x_1^2,x_1x_2,...x_d^2)

Q維:
f_Q(x) = (f_{Q-1}(x),x_1^Q,x_1^{Q-1}x_2,...x_d^Q)

所以這些hypothesis是包含關(guān)系的:

對應(yīng)上圖:
d_{vc}(H_1) <= d_{vc}(H_2) <= d_{vc}(H_d)



所以一目了然笼蛛,代價就是E_{out},E_{in}之間的差距會越來越大,E_{in}最后就不能再代表E_{out}了蛉鹿。隨著變換多項(xiàng)式的階數(shù)增大滨砍,雖然逐漸減小,但是model complexity會逐漸增大妖异,造成很大惋戏,所以階數(shù)不能太高。如果選擇的階數(shù)很大他膳,確實(shí)能使接近于0响逢,但是泛化能力通常很差,我們把這種情況叫做tempting sin棕孙。所以舔亭,一般最合適的做法是先從低階開始,如先選擇一階hypothesis蟀俊,看看是否很小钦铺,如果足夠小的話就選擇一階,如果大的話肢预,再逐漸增加階數(shù)矛洞,直到滿足要求為止。也就是說烫映,盡量選擇低階的hypothes沼本,這樣才能得到較強(qiáng)的泛化能力。模型復(fù)雜度越高出現(xiàn)的泛化能力問題锭沟,就是過擬合抽兆,在訓(xùn)練數(shù)據(jù)上表現(xiàn)很好,Ein = 0族淮,但是在測試數(shù)據(jù)上就很差辫红,Ein << Eout凭涂。

⑤Overfitting and Regularization

overfiting,過擬合厉熟,就是上面所描訴的情況了,E_{in}E_{out}相差太遠(yuǎn)了较幌,局部已經(jīng)不能再代表全局了揍瑟,主要原因就是模型復(fù)雜度太大了,VC bound太大乍炉,限制不了E_{out}绢片。overfitting就是訓(xùn)練過程中翻車了,原因:①太快了岛琼,模型復(fù)雜度太大底循。②近視,看的路太短槐瑞,樣本少熙涤。③這路不行,彎彎曲曲的困檩,noise太多祠挫,噪音太大。
對應(yīng)的解決方法其實(shí)很多悼沿,但主要就是regularization了:


雖然fitting出來的結(jié)果完全符合了數(shù)據(jù)點(diǎn)等舔,但是模型本身沒有這么復(fù)雜,所以產(chǎn)生了過擬合糟趾。
既然模型太復(fù)雜了慌植,那么簡化一下模型:

所以過擬合了,我們可以簡化復(fù)雜度义郑,復(fù)雜度的代表系數(shù)其實(shí)就是VC dimension蝶柿,也就是W的個數(shù)。比如一個十階的hypothesis:
H_{10}(x) = w_0+w_1x+w_2x^2+w_3x^3+w_4 x^4+...w_{10}x^{10}

想簡化模型就只需要減少w的個數(shù)即可非驮,比如簡化成2階:
H_2(x) = w_0+w_1x+w_2x^2
只需要把后面大于3的w都置為0即可只锭。然而,問題來了院尔,為什么多此一舉先要設(shè)置成10階再退化回2階呢蜻展?首先這是為了拓展視野,其次邀摆,萬一這些個數(shù)據(jù)不是2階課完成的呢纵顾?要知道我們事先是不可以知道數(shù)據(jù)的分布的。
剛剛是規(guī)定了前面的不為0栋盹,現(xiàn)在放寬一下條件施逾,只要3個w不為0就好了,于是有:
\sum_{q=0}^{10}[w_q != 0]<=3
這種形式下的hypothesis稱為
H_2^{'}
,有
H_2<=H_2^{'}<=H_{10}
但是這種方法已經(jīng)被證明是NP-hard問題了汉额,所以尋求一種更簡便的辦法:
\sum_{q=0}^{10}w^2<=C
小于某一個constant即可曹仗。當(dāng)C非常大的時候,那就和高階的基本沒有什么區(qū)別了蠕搜,用這種方法改造一下linear regression:

這樣就把W限定在了一個以根號C的一個球形里面怎茫,兩個W才是一個圓,多個w就是立體的球了妓灌。
可以看到梯度的方向是差不多對準(zhǔn)了W_{lin}(最好的W)轨蛤,只要在切線方向有分量,那么就會沿著切線的方向滑動虫埂。但是可以看到祥山,這梯度的方向只是差不多對準(zhǔn)了W_{lin}而不是準(zhǔn)確的對齊,因?yàn)槭侵苯拥那髮?dǎo)掉伏,你不可以保證這個式子就是一個凸優(yōu)化問題缝呕,它可能是多個凸優(yōu)化多個山谷的,可能只是看到了比較近的一個山谷斧散,但是大致方向是正確的岳颇。所以如果梯度沒有和分量w平行,那么會一直移動颅湘,w,normal可以看做是w,w^T话侧,梯度就是-△E_{in}負(fù)方向嘛,當(dāng)平行時闯参,按照圖中的推理:△E_{in}+\frac{2\lambda}{N}w = 0瞻鹏,△E_{in}就是square error function求導(dǎo),所以有\frac{2}{N}(z^Tzw-z^Ty)+\frac{2\lambda}{N}w=0鹿寨,最后就推導(dǎo)出w = (z^Tz+\lambda I)^{-1}z^Ty
這種線性回歸被看成是origin linear regression的進(jìn)階版新博,也叫ridge regression。
上面的公式也可以直接用拉格朗日乘子法推出來:
error = E_{in}+\lambda w^Tw

w^Tw<=C

\frac{1}{C}w^Tw<=1

拉格朗日:
L = \frac{1}{N}\sum(x_nw-y_n)^2+\lambda(\frac{1}{C}w^Tw-1)

可以看到λ越大w越小脚草,對于模型的懲罰也就越大赫悄,所以也叫做正則化懲罰項(xiàng)。這種懲罰會是的曲線越來越平滑馏慨,后面還會講到另一種regularization埂淮。

對于regularization的VC 理論解釋

正則化出來過后的linear regression就是ridge regression,根據(jù)之前的VC bound理論:E_{out}(w) <= E_{in}(w)+Ω(H)写隶,其中Ω(H)是復(fù)雜度倔撞,Ω(w)=w^Tw代表的是單個hypothesis的復(fù)雜度,而Ω(H)代表的整個hypothesis set的復(fù)雜度慕趴,所以Ω(w)是被包含在Ω(H)里面的痪蝇,所以相對來說E_{in}(w)+w^Tw < E_{out}(w)+Ω(H),相對來說會和E_{out}更加接近躏啰。

而對于VC dimension趁矾,既然w被限制了,那么ridge的肯定比origin的小了给僵。

General Regularizers

兩個比較常用的:
ridge:L2范數(shù)毫捣,Ω(w) = |w|^2
lasso:L1范數(shù),Ω(w) = |w|

ridge推導(dǎo)過了想际,來看看lasso的:


他的正常方向應(yīng)該是垂直于邊界的培漏,紅色的sign就是方向溪厘,而對于在邊界上胡本,只要sign和△Ein不在一條直線上,那么在正方形的邊界上就一定有一個類似于剛剛ridge綠色分量的分量存在畸悬,如上圖侧甫,就會向上方移動,而在邊角點(diǎn)其實(shí)是不可微分的蹋宦,所以一般結(jié)果會聚集在邊角的周圍披粟,所以得到的是一個稀疏矩陣,一些是0冷冗,一些不是零守屉。結(jié)果會聚集在頂點(diǎn)周圍,優(yōu)點(diǎn)就是計(jì)算很快了蒿辙。
上圖是用直觀的理解來解釋regularization拇泛,前面的是用VC demension來解釋,再用數(shù)值分析的角度看一下:
比如:方程式①:
5x + 7y = 0.7
7x + 10y = 1
x = 0 , y = 0.1
方程式②:
5x + 7y = 0.69
7x + 10y = 1.01
x = -0.17 y = 0.22

只要有一點(diǎn)微小的擾動思灌,結(jié)果就會發(fā)生很大的變化俺叭,這就是病態(tài)矩陣,如果X^TX是病態(tài)矩陣泰偿,那么兩次的結(jié)果可能會相差很大熄守。是不是病態(tài)矩陣可以用條件數(shù)來判斷。用條件數(shù)來描述病態(tài)矩陣其實(shí)還是太抽象了耗跛。奇異矩陣就是不存在逆矩陣的方陣裕照。什么樣的方陣不存在逆矩陣?首先行列式為0调塌,自然就牽扯出來非滿秩牍氛,特征值只和為0。而對于近似奇異矩陣烟阐,他的行列式很接近于0搬俊,所以\frac{1}{|A|}是一個很大的數(shù)字紊扬,根據(jù)求逆矩陣的公式,逆矩陣是可以通過伴隨矩陣和行列式求的唉擂,所以自然差別就很大了餐屎,所以病態(tài)矩陣也就是近似于奇異矩陣的矩陣了。那么知道原因了玩祟,我們要做的就是遠(yuǎn)離奇異矩陣腹缩。而事實(shí)上,ridge regression的結(jié)果:

加上一個對角線的值其實(shí)就是遠(yuǎn)離奇異矩陣空扎。
最后再看一個圖:
lasso可以使得權(quán)值衰減到0藏鹊,很容易可以和頂點(diǎn)相切,所以會使得權(quán)值衰減導(dǎo)0转锈;但是ridge只會減少盘寡,而不會衰減導(dǎo)0,所以lasso是可以用來控制權(quán)值的數(shù)量的撮慨。lasso同上也是滿足了拉普拉斯分布竿痰,是一個稀疏矩陣,而ridge是高斯分布砌溺。

summary

加入正則項(xiàng)是為了避免過擬合,或解進(jìn)行某種約束,需要解保持某種特性
①L1正則可以保證模型的稀疏性影涉,也就是某些參數(shù)等于0,L1正則化是L0正則化的最優(yōu)凸近似,比L0容易求解规伐,并且也可以實(shí)現(xiàn)稀疏的效果,
②L2正則可以保證模型的穩(wěn)定性蟹倾,也就是參數(shù)的值不會太大或太小.L2范數(shù)是各參數(shù)的平方和再求平方根,我們讓L2范數(shù)的正則項(xiàng)最小猖闪,可以使W的每個元素都很小鲜棠,都接近于0。但與L1范數(shù)不一樣的是萧朝,它不會是每個元素為0岔留,而只是接近于0。越小的參數(shù)說明模型越簡單检柬,越簡單的模型越不容易產(chǎn)生過擬合現(xiàn)象献联。
③在實(shí)際使用中,如果特征是高維稀疏的何址,則使用L1正則里逆;如果特征是低維稠密的,則使用L2正則用爪。
④L2不能控制feature的“個數(shù)”原押,但是能防止模型overfit到某個feature上;相反L1是控制feature“個數(shù)”的偎血,并且鼓勵模型在少量幾個feature上有較大的權(quán)重诸衔。

總結(jié)一下之前學(xué)過的盯漂,第十八篇博客VC dimension是機(jī)器學(xué)習(xí)的理論保證:


霍夫丁不等式保證了一個hypothesis發(fā)生壞事的概率是很小的,Multi霍夫丁不等式保證了這個hypothesis set對于所有的數(shù)據(jù)集發(fā)生的壞事的概率滿足的不等式笨农,VC dimension則保證了這個hypothesis set里面發(fā)生的壞事的概率是很小的就缆,這就保證了泛化能力:Ein ≈ Eout。
之后介紹了三種線性模型(PLA比較簡單谒亦,不會再講了):

而對于這三種模型竭宰,我們又給出了三種工具:

Feature Transform:通過低維不可線性可分轉(zhuǎn)換到高維線性可分來解決Nonlinear的情況。
Regularization:通過增加正則化懲罰項(xiàng)來解決過擬合的問題份招。
Validation:用于對模型參數(shù)的選擇切揭,第一次選擇:是選擇上面模型。第二次選擇就是對模型參數(shù)的選擇了锁摔,這就用Validation來帥選廓旬。
最后是三個比較常用的錦囊妙計(jì):

⑥logistics regression代碼實(shí)現(xiàn)

import numpy as np
import matplotlib.pyplot as plt
import pandas as pd
import seaborn as sns

def predict(w, x):
    h = x * w
    h = sigmoid(h)
    if h > 0.5:
        return int(1)
    else:
        return int(0)

def sigmoid(x):
    return np.longfloat(1.0/(1+np.exp(-x)))

def error_rate(h, label):
    m = np.shape(h)[0]
    sum_err = 0.0
    for i in range(m):
        if h[i, 0] > 0 and (1-h[i, 0]) > 0:
            sum_err += (label[i, 0] * np.log(h[i, 0]) + (1-label[i, 0])*np.log(1-h[i, 0]))
        else:
            sum_err += 0
    return sum_err/m

def lr_train_bgd(feature, label, maxCycle, alpha, df):
    n = np.shape(feature)[1]
    m = np.shape(feature)[0]
    w = np.mat(np.random.rand(n,1))
    i = 0
    while True:
        i += 1
        h = sigmoid(feature * w)
        err = label - h
        if i % 100== 0:
            print('error : ', error_rate(h, label))
            d = 0
            scores = []
            for i in range(m):
                score = predict(w, feature[i])
                scores.append(score)
                if score == label[i]:
                    d += 1
            print('train accuracy : ', (d/m)*100, '%')
            if (d/m)*100 >= 90:
                for i in range(m):
                    if df.iloc[i, 2] == 1:
                        c = 'red'
                    else:
                        c = 'blue'
                    plt.scatter(df.iloc[i, 0], df.iloc[i, 1], c=c)
                x = [i for i in range(0, 10)]
                plt.plot(np.mat(x).T, np.mat((-w[0]-w[1]*x)/w[2]).T, c = 'blue')
                plt.show()
                return

        w += alpha * feature.T * err

def loadData(filename):
    df = pd.read_csv(filename, sep='    ', names=['a', 'b', 'label'])
    n, m = df.shape
    features = []
    labels = []
    for i in range(n):
        feature = []
        feature.append(int(1))
        for j in range(1,m):
            feature.append(df.iloc[i, j])
        if df.iloc[i, m-1] == -1:
            labels.append(0)
        else:
            labels.append(1)
        features.append(feature)

    for i in range(n):
        if df.iloc[i, 2] == 1:
            c = 'red'
        else:
            c = 'blue'
        plt.scatter(df.iloc[i, 0], df.iloc[i, 1], c = c)
    plt.show()
    return np.mat(features), np.mat(labels).T, df

if __name__ == '__main__':
    f, t, df = loadData('../Data/testSet.txt')
    lr_train_bgd(f, t, 10000, 0.001, df)

Github代碼:https://github.com/GreenArrow2017/MachineLearning/tree/master/MachineLearning/Linear%20Model/LogosticRegression

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市鄙漏,隨后出現(xiàn)的幾起案子嗤谚,更是在濱河造成了極大的恐慌棺蛛,老刑警劉巖怔蚌,帶你破解...
    沈念sama閱讀 212,718評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異旁赊,居然都是意外死亡桦踊,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,683評論 3 385
  • 文/潘曉璐 我一進(jìn)店門终畅,熙熙樓的掌柜王于貴愁眉苦臉地迎上來籍胯,“玉大人,你說我怎么就攤上這事离福≌壤牵” “怎么了?”我有些...
    開封第一講書人閱讀 158,207評論 0 348
  • 文/不壞的土叔 我叫張陵妖爷,是天一觀的道長蝶涩。 經(jīng)常有香客問我,道長絮识,這世上最難降的妖魔是什么绿聘? 我笑而不...
    開封第一講書人閱讀 56,755評論 1 284
  • 正文 為了忘掉前任,我火速辦了婚禮次舌,結(jié)果婚禮上熄攘,老公的妹妹穿的比我還像新娘。我一直安慰自己彼念,他們只是感情好挪圾,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,862評論 6 386
  • 文/花漫 我一把揭開白布浅萧。 她就那樣靜靜地躺著,像睡著了一般哲思。 火紅的嫁衣襯著肌膚如雪惯殊。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 50,050評論 1 291
  • 那天也殖,我揣著相機(jī)與錄音土思,去河邊找鬼。 笑死忆嗜,一個胖子當(dāng)著我的面吹牛己儒,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播捆毫,決...
    沈念sama閱讀 39,136評論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼闪湾,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了绩卤?” 一聲冷哼從身側(cè)響起途样,我...
    開封第一講書人閱讀 37,882評論 0 268
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎濒憋,沒想到半個月后何暇,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,330評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡凛驮,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,651評論 2 327
  • 正文 我和宋清朗相戀三年裆站,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片黔夭。...
    茶點(diǎn)故事閱讀 38,789評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡宏胯,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出本姥,到底是詐尸還是另有隱情肩袍,我是刑警寧澤,帶...
    沈念sama閱讀 34,477評論 4 333
  • 正文 年R本政府宣布婚惫,位于F島的核電站氛赐,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏辰妙。R本人自食惡果不足惜鹰祸,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,135評論 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望密浑。 院中可真熱鬧蛙婴,春花似錦、人聲如沸尔破。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,864評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至餐济,卻和暖如春耘擂,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背絮姆。 一陣腳步聲響...
    開封第一講書人閱讀 32,099評論 1 267
  • 我被黑心中介騙來泰國打工醉冤, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人篙悯。 一個月前我還...
    沈念sama閱讀 46,598評論 2 362
  • 正文 我出身青樓蚁阳,卻偏偏與公主長得像,于是被迫代替她去往敵國和親鸽照。 傳聞我的和親對象是個殘疾皇子螺捐,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,697評論 2 351

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