08 回歸算法 - 解決過(guò)擬合 - L2(Ridge)和L1(LASSO)正則

用L2正則的線性回歸模型脚线,稱為Ridge回歸 (嶺回歸)
用L1正則的線性回歸模型蔗候,稱為L(zhǎng)ASSO回歸
L2、L1回歸

=== L2和L1的比較 ===

\color{red}{L2-norm正則}秧秉,由于對(duì)于各個(gè)維度的參數(shù)縮放是在一個(gè)圓內(nèi)縮放的污桦,(對(duì)各個(gè)維度的參數(shù)進(jìn)行一個(gè)播報(bào),在一個(gè)圓內(nèi)進(jìn)行播報(bào))书幕,所以不可能導(dǎo)致有維度參數(shù)變成0的情況新荤,那么也就不會(huì)產(chǎn)生\color{red}{稀疏解};實(shí)際應(yīng)用中台汇,數(shù)據(jù)的維度中是存在\color{red}{噪音}\color{red}{冗余}的苛骨,稀疏的解可以找到有用的維度并減少冗余,提高預(yù)測(cè)的\color{red}{準(zhǔn)確率}\color{red}{魯棒性}(減少了overfitting)苟呐。
L1-norm可以達(dá)到最終解的稀疏性要求痒芝。

Ridge模型具有較高的準(zhǔn)確性、魯棒性以及穩(wěn)定性牵素;
LASSO模型具有較高的求解速度严衬;

如果即要考慮穩(wěn)定性也考慮求解的速度,就使用Elastic Net笆呆。

什么是稀疏解请琳?
對(duì)于一組參數(shù)θk,其中有一個(gè)或多個(gè)θ等于0赠幕,或近似等于0俄精。稱這組參數(shù)θk存在稀疏解。

如何理解:稀疏解可以找到有用的維度并減少冗余榕堰?
y=ax1+bx2+c;
若求解得到 a=3; b=0; c=2;
我們發(fā)現(xiàn)x2特征對(duì)于結(jié)果的預(yù)測(cè)沒(méi)有任何幫助竖慧,所以可以將x2的特征刪除。

注意:
L2-Ridge不產(chǎn)生稀疏解逆屡,L1-LASSO可以讓解去冗余圾旨。
當(dāng)我們覺(jué)得每個(gè)特征都是有用的,用L2康二。
如果想用回歸的手段確定特征的可用性碳胳,用L1。
L1-LASSO有相對(duì)比較快的求解速度沫勿。

=== L1挨约、L2的圖像比較 ===

首先把特征降低至2維:
y=θ01x12x2

什么是把數(shù)據(jù)播放到圓內(nèi)?

L1(左圖)产雹、L2(右圖)中兩團(tuán)紅色的圈圈是三維圖像在二維平面上的映射诫惭。L1和L2兩張圖是中間圖像的俯視圖,要立體得去看:

先忽略正則項(xiàng)蔓挖,只看損失函數(shù)對(duì)應(yīng)的圖像:

損失函數(shù)

對(duì)于: y=θ01x12x2夕土; θ1、θ2有一組對(duì)應(yīng)的取值(Β1,Β2

當(dāng)θ向量取值為損失函數(shù)最小值的點(diǎn)怨绣,這個(gè)點(diǎn)就是Β^
Β^ 這一點(diǎn)是線性回歸取得損失函數(shù)最優(yōu)點(diǎn)的那個(gè)解角溃。Β^:(Β1,Β2
每一個(gè)小橢圓上篮撑,損失函數(shù)的值是相等的减细。
以Β^為圓心,越往外的橢圓損失值越大赢笨。

現(xiàn)在損失加入正則的情況:


加入正則懲罰項(xiàng)后未蝌,意味著現(xiàn)在的取值加入了新的約束條件,使得θ值必須在我的限制條件內(nèi)才能被認(rèn)可茧妒。

圖像中萧吠,L1藍(lán)色方塊和L2藍(lán)色橢圓的區(qū)域就是正則懲罰項(xiàng)中允許的θ值。什么時(shí)候能夠取得最優(yōu)的θ值桐筏?

\color{red}{顯然當(dāng)藍(lán)色區(qū)域和紅色橢圓“相切”的那一點(diǎn)就是最優(yōu)的θ值纸型。}

回過(guò)頭再次思考稀疏解的問(wèn)題:
何為稀疏解?系數(shù)為0的時(shí)候九昧。
在圖中绊袋,即意味著Β1 = 0 或Β2 = 0 或Β1 = Β2 = 0;
在L1-norm和L2-norm中 (藍(lán)色區(qū)域) 铸鹰,顯然Β1 = Β2 = 0 這點(diǎn)為圓心癌别,相切的點(diǎn)不可能在圓心上,因此這點(diǎn)排除蹋笼。

對(duì)于我們的L1和L2來(lái)說(shuō)展姐,損失函數(shù)中懲罰項(xiàng)的位置是固定的。

觀察L2圖像剖毯,為什么不能生成稀疏解:
而損失函數(shù)前半段的圖像形狀(紅色橢圓)圾笨,會(huì)根據(jù)y值(真實(shí)值)的改變而發(fā)生改變。如圖:

損失函數(shù)和懲罰相相切的位置可能存在于任何一點(diǎn)逊谋。既然在懲罰項(xiàng)的圓上每一點(diǎn)都有可能相切擂达,那么切到Β1 = 0或Β2 = 0的概率趨向于0。

所以胶滋,當(dāng)選擇L2-norm后板鬓,基本不可能出現(xiàn)稀疏解。

觀察L1圖像究恤,為什么能夠生成稀疏解:

如果損失函數(shù)和懲罰項(xiàng)相切了俭令,意味紅色橢圓和藍(lán)色四邊形的其他任意一點(diǎn)都不相交,意味著藍(lán)色四邊形邊上的其他任意一點(diǎn)到B^ 的距離都不如相切的這一點(diǎn)到B^ 的距離近部宿。

該圖形中抄腔,各個(gè)點(diǎn)相切的概率不是相等的。切到頂點(diǎn)的概率是最高的。所以更容易產(chǎn)生稀疏解赫蛇。

=== Elastic Net ===

如果即要考慮穩(wěn)定性也考慮求解的速度绵患,就使用Elastic Net。

同時(shí)使用L1正則和L2正則的線性回歸模型就稱為Elastic Net棍掐,\color{red}{彈性網(wǎng)絡(luò)算法}

p藏雏、λ都是超參數(shù)拷况。
超參數(shù)是在開(kāi)始學(xué)習(xí)過(guò)程之前設(shè)置值的參數(shù)作煌,而不是通過(guò)訓(xùn)練得到的參數(shù)數(shù)據(jù)。通常情況下赚瘦,需要對(duì)超參數(shù)進(jìn)行優(yōu)化粟誓,給學(xué)習(xí)機(jī)選擇一組最優(yōu)超參數(shù),以提高學(xué)習(xí)的性能和效果起意。

=== 案例 ===

根據(jù)四種不同的回歸模型鹰服,在不同階數(shù)下的回過(guò)結(jié)果如何。

## 創(chuàng)建模擬數(shù)據(jù)
## 使得隨機(jī)數(shù)據(jù)可預(yù)測(cè)揽咕,即只要seed的值一樣悲酷,后續(xù)生成的隨機(jī)數(shù)都一樣。
np.random.seed(100)
np.set_printoptions(linewidth=1000, suppress=True)#顯示方式設(shè)置亲善,每行的字符數(shù)用于插入換行符设易,是否使用科學(xué)計(jì)數(shù)法
N = 10
## linspace:x從0~6之間等步長(zhǎng)取N個(gè)數(shù) 
## 由于seed(10),固定了一種隨機(jī)方案蛹头,np.random.randn(N)每次結(jié)果都一致
x = np.linspace(0, 6, N) + np.random.randn(N)
y = 1.8*x**3 + x**2 - 14*x - 7 + np.random.randn(N)
x.shape
## 將其設(shè)置為矩陣
#無(wú)論多少數(shù)據(jù)顿肺,生成一列,反之1渣蜗,-1生成一行
x.shape = -1, 1 
y.shape = -1, 1 
x.shape
y.shape

將多個(gè)管道嵌套屠尊,共4個(gè)管道Pipeline
看看每個(gè)管道做了什么操作
管道1:多形式擴(kuò)展+線性回歸
管道2:多形式擴(kuò)展+RidgeCV
管道3:多形式擴(kuò)展+LassoCV
管道4:多形式擴(kuò)展+ElasticNetCV

## RidgeCV和Ridge的區(qū)別是:前者可以進(jìn)行交叉驗(yàn)證

## 目標(biāo):比較不同階數(shù)的情況下,會(huì)不會(huì)出現(xiàn)過(guò)擬合的情況

models = [
    Pipeline([
            ('Poly', PolynomialFeatures(include_bias=False)),
            ('Linear', LinearRegression(fit_intercept=False))
        ]),
    Pipeline([
            ('Poly', PolynomialFeatures(include_bias=False)),
            ('Linear', RidgeCV(alphas=np.logspace(-3,2,50), fit_intercept=False))
        ]),
    Pipeline([
            ('Poly', PolynomialFeatures(include_bias=False)),
            ('Linear', LassoCV(alphas=np.logspace(0,1,10), fit_intercept=False))
        ]),
    Pipeline([
            ('Poly', PolynomialFeatures(include_bias=False)),
            ('Linear', ElasticNetCV(alphas=np.logspace(0,1,10), 
                l1_ratio=[.1, .5, .7, .9, .95, 1], fit_intercept=False))
        ])
]
## 線性回歸耕拷、Lasso回歸讼昆、Ridge回歸、ElasticNet比較
plt.figure(facecolor='w')
degree = np.arange(1,N, 2) # 階
dm = degree.size
colors = [] # 顏色
for c in np.linspace(16711680, 255, dm):
    colors.append('#%06x' % int(c))
titles = [u'線性回歸', u'Ridge回歸', u'Lasso回歸', u'ElasticNet']

for t in range(4):
    model = models[t]#選擇了模型--具體的pipeline
    plt.subplot(2,2,t+1)
    plt.plot(x, y, 'ro', ms=10, zorder=N)

    for i,d in enumerate(degree):
        # 設(shè)置階數(shù)(多項(xiàng)式)
        model.set_params(Poly__degree=d)
        # 模型訓(xùn)練
        model.fit(x, y.ravel())

        # 獲取得到具體的算法模型
        lin = model.get_params('Linear')['Linear']
        # 打印數(shù)據(jù)
        output = u'%s:%d階骚烧,系數(shù)為:' % (titles[t],d)
        print (output, lin.coef_.ravel())

        # 產(chǎn)生模擬數(shù)據(jù)
        x_hat = np.linspace(x.min(), x.max(), num=100) ## 產(chǎn)生模擬數(shù)據(jù)
        x_hat.shape = -1,1
        # 數(shù)據(jù)預(yù)測(cè)
        y_hat = model.predict(x_hat)
        # 計(jì)算準(zhǔn)確率
        s = model.score(x, y)

        # 
        z = N - 1 if (d == 2) else 0
        label = u'%d階, 正確率=%.3f' % (d,s)
        plt.plot(x_hat, y_hat, color=colors[i], lw=2, alpha=0.75, label=label, zorder=z)
    
    plt.legend(loc = 'upper left')
    plt.grid(True)
    plt.title(titles[t])
    plt.xlabel('X', fontsize=16)
    plt.ylabel('Y', fontsize=16)
plt.tight_layout(1, rect=(0,0,1,0.95))
plt.suptitle(u'各種不同線性回歸過(guò)擬合顯示', fontsize=22)
plt.show()

線性回歸:1階浸赫,系數(shù)為: [-44.14102611 40.05964256]
線性回歸:3階,系數(shù)為: [ -6.80525963 -13.743068 0.93453895 1.79844791]
線性回歸:5階止潘,系數(shù)為: [ -5.60899679 -14.80109301 0.75014858 2.11170671 -0.07724668 0.00566633]
線性回歸:7階掺炭,系數(shù)為: [-41.70721172 52.38570529 -29.56451338 -7.66322829 12.07162703 -3.86969096 0.53286096 -0.02725536]
線性回歸:9階,系數(shù)為: [-2465.58381316 6108.63817712 -5111.99333504 974.74974891 1078.89649478 -829.50277842 266.13230658 -45.71741587 4.1158274 -0.15281063]
Ridge回歸:1階凭戴,系數(shù)為: [ 29.87629065]
Ridge回歸:3階涧狮,系數(shù)為: [-12.98191422 -0.50844765 1.98772916]
Ridge回歸:5階,系數(shù)為: [-18.76655299 -0.28947771 3.32509764 -0.35027494 0.02456036]
Ridge回歸:7階,系數(shù)為: [-17.34640888 -3.48657706 4.33150776 0.39729204 -0.45104331 0.08994449 -0.0056256 ]
Ridge回歸:9階者冤,系數(shù)為: [-2.2521578 -2.27937783 -1.70299005 -1.0348803 0.85755012 0.37020601 -0.26024292 0.04709033 -0.00277978]
Lasso回歸:1階肤视,系數(shù)為: [ 30.30898284]
Lasso回歸:3階,系數(shù)為: [-12.31558512 -0.50643475 1.96415216]
Lasso回歸:5階涉枫,系數(shù)為: [-12.49095935 -0.5462019 1.85689229 0.04796991 -0.00459415]
Lasso回歸:7階邢滑,系數(shù)為: [-0. -0.42783947 -0.52239776 0.41588259 0.0107619 -0.00095271 -0.00041016]
Lasso回歸:9階,系數(shù)為: [-12.78111829 -0.49882979 1.80841074 0.03631125 0.00358085 -0.0003109 -0.00003417 -0.00000479 -0.00000044]
ElasticNet:1階愿汰,系數(shù)為: [ 28.51169563]
ElasticNet:3階困后,系數(shù)為: [-10.72359515 -1.20646101 2.03645101]
ElasticNet:5階,系數(shù)為: [-5.90338414 -1.62213355 1.13077809 0.2390498 -0.01640652]
ElasticNet:7階衬廷,系數(shù)為: [-0. -0.501937 -0.51930136 0.42305198 0.00992334 -0.00096761 -0.00041003]
ElasticNet:9階摇予,系數(shù)為: [-0.59980891 -0.53028001 -0.49033227 0.40675528 0.00848508 0.00000901 -0.00016187 -0.00002562 -0.00000379]

數(shù)據(jù)來(lái)源: 07 過(guò)擬合欠擬合 - 案例

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市吗跋,隨后出現(xiàn)的幾起案子侧戴,更是在濱河造成了極大的恐慌,老刑警劉巖跌宛,帶你破解...
    沈念sama閱讀 212,816評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件酗宋,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡疆拘,警方通過(guò)查閱死者的電腦和手機(jī)蜕猫,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,729評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)入问,“玉大人丹锹,你說(shuō)我怎么就攤上這事》沂В” “怎么了楣黍?”我有些...
    開(kāi)封第一講書(shū)人閱讀 158,300評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)棱烂。 經(jīng)常有香客問(wèn)我租漂,道長(zhǎng),這世上最難降的妖魔是什么颊糜? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 56,780評(píng)論 1 285
  • 正文 為了忘掉前任哩治,我火速辦了婚禮,結(jié)果婚禮上衬鱼,老公的妹妹穿的比我還像新娘业筏。我一直安慰自己,他們只是感情好鸟赫,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,890評(píng)論 6 385
  • 文/花漫 我一把揭開(kāi)白布蒜胖。 她就那樣靜靜地躺著消别,像睡著了一般。 火紅的嫁衣襯著肌膚如雪台谢。 梳的紋絲不亂的頭發(fā)上寻狂,一...
    開(kāi)封第一講書(shū)人閱讀 50,084評(píng)論 1 291
  • 那天,我揣著相機(jī)與錄音朋沮,去河邊找鬼蛇券。 笑死,一個(gè)胖子當(dāng)著我的面吹牛樊拓,可吹牛的內(nèi)容都是我干的纠亚。 我是一名探鬼主播,決...
    沈念sama閱讀 39,151評(píng)論 3 410
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼骑脱,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼菜枷!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起叁丧,我...
    開(kāi)封第一講書(shū)人閱讀 37,912評(píng)論 0 268
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎岳瞭,沒(méi)想到半個(gè)月后拥娄,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,355評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡瞳筏,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,666評(píng)論 2 327
  • 正文 我和宋清朗相戀三年稚瘾,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片姚炕。...
    茶點(diǎn)故事閱讀 38,809評(píng)論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡摊欠,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出柱宦,到底是詐尸還是另有隱情些椒,我是刑警寧澤,帶...
    沈念sama閱讀 34,504評(píng)論 4 334
  • 正文 年R本政府宣布掸刊,位于F島的核電站免糕,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏忧侧。R本人自食惡果不足惜石窑,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,150評(píng)論 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望蚓炬。 院中可真熱鬧松逊,春花似錦、人聲如沸肯夏。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,882評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至烛恤,卻和暖如春巢钓,著一層夾襖步出監(jiān)牢的瞬間内地,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,121評(píng)論 1 267
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留痴颊,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,628評(píng)論 2 362
  • 正文 我出身青樓变汪,卻偏偏與公主長(zhǎng)得像伤为,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子杀餐,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,724評(píng)論 2 351

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