日韩黑丝制服一区视频播放|日韩欧美人妻丝袜视频在线观看|九九影院一级蜜桃|亚洲中文在线导航|青草草视频在线观看|婷婷五月色伊人网站|日本一区二区在线|国产AV一二三四区毛片|正在播放久草视频|亚洲色图精品一区

分享

python從機器學習角度處理共線性

 醫(yī)學數(shù)據(jù)科學 2019-03-14

前面幾天闡述了線性回歸的最小二乘法(OLS)在做回歸時,一致地看待每一個樣本點,是典型的無偏估計,會得到一個使得殘差最小的權(quán)重參數(shù)。然而,在面對一堆數(shù)據(jù)集存在多重共線性時,OLS 就變得對樣本點的誤差極為敏感,最終回歸后的權(quán)重參數(shù)方差變大。這就是需要解決的共線性回歸問題,一般思想是放棄無偏估計,損失一定精度,對數(shù)據(jù)做有偏估計,這里介紹兩種常用的算法:脊回歸和套索回歸。

00 基本概念

多重共線性(Multicollinearity)是指線性回歸模型中的自變量之間由于存在高度相關(guān)關(guān)系而使模型的權(quán)重參數(shù)估計失真或難以估計準確的一種特性,多重是指一個自變量可能與多個其他自變量之間存在相關(guān)關(guān)系。

例如一件商品的銷售數(shù)量可能與當?shù)氐娜司杖牒彤數(shù)厝丝跀?shù)這兩個其他因素存在相關(guān)關(guān)系。

在研究社會、經(jīng)濟問題時,因為問題本身的復雜性,設計的因素很多。在建立回歸模型時,往往由于研究者認識水平的局限性,很難在眾多因素中找到一組互不相關(guān),又對因變量 y 產(chǎn)生主要影響的變量,不可避免地出現(xiàn)所選自變量出現(xiàn)多重相關(guān)關(guān)系的情形。

在前面的介紹中,我們已經(jīng)知道普通最小二乘法(OLS)在進行線性回歸時的一個重要假設就是數(shù)據(jù)集中的特征之間不能存在嚴重的共線性。最迫切的是,我們在拿到一堆數(shù)據(jù)集時,該如何診斷這些特征間是不是存在共線性問題呢? 

01 如何診斷多重共線性

根據(jù)已有的參考文獻,常用的多重共線性的診斷方法包括:方差膨脹因子法,特征根分析法,相關(guān)系數(shù)法等,基于這些方法的啟發(fā),本文初步地闡述個人的一些方法,不一定準確,僅代表個人的理解。

我們可以繪制每個特征與 y 間的關(guān)系圖,然后肉眼對比每個特征對 y 的影響情況,關(guān)系走勢圖相近的那些特征就是可能存在共線性的。 

例如,下面所示的一個例子是房子的價值與兩個影響它的特征:特征1和特征2,方便起見我們選取了10個樣本點來進行兩個特征間的相關(guān)性分析,在 Jupyter notebook中做了測試,代碼如下:

#導入兩個常用模塊

import numpy as np

import matplotlib.pyplot as plt

#2個特征的樣本X

X=np.array([[20.5,19.8],[21.2,20.4],[22.8,21.1],

           [18.2,23.6],[20.3,24.9],[21.8,26.7],

           [25.2,28.9],[30.7,31.3],[36.1,35.8],

           [44.3,38.2]])

#標簽值 y

y=np.array([7.8,8.6,8.7,7.9,8.4,8.9,10.4,11.6,13.9,15.8])

#繪制特征1和y的散點圖

plt.scatter(X[:,0],y)

plt.show()

#繪制特征2和y的散點圖

plt.scatter(X[:,1],y)

plt.show()

從散點圖中可以看出,這兩個特征和y的關(guān)系趨勢很相似,進一步放到一起繪制折線圖: 

plt.plot(X,y,marker='o')

plt.show()

可以看到這兩個特征與y的關(guān)系呈現(xiàn)出相同的曲線走勢,我們初步這兩個特征可能具有相關(guān)性,這僅僅是在一個觀察層面。

怎么進行量化分析呢? 在之前,機器學習儲備(1):相關(guān)系數(shù),這篇推送中,介紹了用來判斷兩個特征間的相關(guān)程度的公式,我們考慮具有一般性的公式,通常兩個變量間的相關(guān)系數(shù)的定義如下:

將上述公式,實現(xiàn)為代碼,如下所示:

#特征1和特征2的協(xié)方差

cov = np.cov(X[:,0],X[:,1])

cov

array([[ 70.44544444,  49.15144444],

       [ 49.15144444,  41.24455556]])

#特征1的標準差

sigmaX1 = cov[0,0]**0.5

#特征2的標準差

sigmaX2 = cov[1,1]**0.5

#相關(guān)系數(shù)

r = cov[0,1]/(sigmaX1*sigmaX2)

r

0.9118565340789303

相關(guān)系數(shù)為0.911,說明特征1與特征2之間有高度的線性正相關(guān)關(guān)系。當相關(guān)系數(shù)為0時,表明沒有關(guān)系,為負數(shù)時,表明特征1與特征2之間有負相關(guān)關(guān)系,即有一個這樣的你增我減,你減我增的趨勢。

如果忽略這個問題,還是要采取普通最小二乘法來進行回歸,可能導致的問題簡單來說是造成權(quán)重參數(shù)估計值的方差變大,在上一篇推文(機器學習之線性回歸:OLS 無偏估計及相關(guān)性python分析)中,分析得不夠透徹,沒有深刻地認清多重共線性造成的后果:參數(shù)方差變大這個問題。比如,樣本的特征如下:

A =np.array([[0.9999,2],[2,4],[4,8]]),y = np.array([1,2,3]),可以看到此時是強線性相關(guān)的,直接用直接求權(quán)重公式la.inv((A.T.dot(A))).dot(A.T).dot(y),得出參數(shù):

array([-1999.9998031,  1000.3999014]),

再降低一些線性相關(guān)強度:

A =np.array([[0.9900,2],[2,4],[4,8]]),得出參數(shù):

array([-20. ,  10.4])

再降低,A =np.array([[0.900,2],[2,4],[4,8]]),得出參數(shù):

array([-2. ,  1.4])

再降低A =np.array([[0.8,2],[2,4],[4,8]]),得出參數(shù):

array([-1. ,  0.9])

再降低A =np.array([[0.5,2],[2,4],[4,8]]),得出參數(shù):

array([-0.4,  0.6])

畫出以第一個權(quán)重參數(shù)隨著線性相關(guān)性的增加的趨勢圖:可以看到在0.9999時驟降,表明方差突然變大,變化幅度為2000左右。

拿掉0.9999這個特征取值后,變化幅度為20。

因此驗證了多重共線性越強,造成的后果:參數(shù)方差越大。

接下來,嘗試改進普通最小二乘法來解決共線性問題。

02 添加正則化項解決共線性

正則化在機器學習中扮演者重要的角色,一方面它有可能解決經(jīng)常出現(xiàn)的過擬合問題,另一方面能解決上文提到這種病態(tài)矩陣,也就是不適定問題。對于正則化的理解,將會是以后機器學習需要反復仔細體會的一項重要技術(shù)。

在普通最小二乘法的基礎上,將代價函數(shù)加一個正則化項,就可以解決共線性問題,這個方法犧牲了權(quán)重參數(shù)的精度,帶來的收益是解決了共線性帶來的不穩(wěn)定。如果添加一個L1正則項,算法稱為套索回歸,如果添加一個L2正則化項,稱為脊回歸,公式分別表示為:

套索回歸

脊回歸

下面在Jupyter Notebook,直接調(diào)用sklearn庫中的回歸分析的API,分析上面的共線性數(shù)據(jù)在使用普通最小二乘,L1最小二乘(套索),L2最小二乘(脊回歸)下回歸樣本后,對新來的數(shù)據(jù)的預測精度。

我們用上節(jié)例子來闡述正則化項的作用,用的測試樣本如下所示:

X =np.array([[0.9999,2],[2,4],[4,8]])

y = np.array([1,2,3])

直接調(diào)用sklearn的接口:

from sklearn import linear_model

#OLS

reg = linear_model.LinearRegression()

reg.fit(X,y)

得到的權(quán)重參數(shù):

array([ 5000.00000002, -2499.75000001])

#脊回歸

ridreg = linear_model.Ridge (alpha = .5)

ridreg.fit (X, y) 

得到的權(quán)重參數(shù):

array([ 0.12589929,  0.25173425])

#套索回歸

ridreg = linear_model.Lasso(alpha = 0.1)

ridreg.fit (X, y) 

得到的權(quán)重參數(shù):

array([ 0.        ,  0.30535714])

可以看到脊回歸和套索回歸由于正則化項不同,最終導致的權(quán)重參數(shù)也一樣,最令人印象深刻的是,套索回歸由于使用了L1正則化,直接將特征1的權(quán)重參數(shù)置為0,也就是將強線性相關(guān)項中的某一個直接拋棄掉,只取其中一個特征項作為主特征項進行分析計算。

OLS算法得出的權(quán)重參數(shù)在上節(jié)已經(jīng)驗證過,稍微改變一下線性相關(guān)的強度,導致的權(quán)重參數(shù)改變巨大,也就是參數(shù)的方差很大,這說明它的不穩(wěn)定性。

03 總結(jié)

在上節(jié)中,我們闡述了如何診斷多重共線性問題,以及通過添加正則化項為什么可以解決這個問題,在本文的論證中我們舉的例子是兩個特征間的共線性,這種方法簡單直觀地進一步驗證了OLS權(quán)重參數(shù)的方差和共線性的關(guān)系,以及脊回歸和套索回歸加上正則化項后發(fā)揮的作用。

在本文論述中有些術(shù)語可能不夠精確,還請各位多包涵。謝謝各位的閱讀。

讓我們看一下遠邊的大海,和巍峨的高山,放松一下吧!

--------------------- 

作者:算法channel 

來源:CSDN 

原文:https://blog.csdn.net/xo3ylAF9kGs/article/details/78623269 

版權(quán)聲明:本文為博主原創(chuàng)文章,轉(zhuǎn)載請附上博文鏈接!

    本站是提供個人知識管理的網(wǎng)絡存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導購買等信息,謹防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多