線性,脊線和拉索回歸的綜合初學(xué)者指南

介紹

我正在和一位剛剛在印度超市連鎖店擔(dān)任運營經(jīng)理的朋友說話。在我們的討論中,我們開始談?wù)撛谟《裙?jié)日(排燈節(jié))開始之前,連鎖店需要做的準(zhǔn)備量。

他告訴我,他們估計/預(yù)測哪個產(chǎn)品會像熱蛋糕一樣銷售,哪些產(chǎn)品不會在購買之前是至關(guān)重要的。一個不好的決定可能會讓您的客戶在競爭對手商店中尋找優(yōu)惠和產(chǎn)品。挑戰(zhàn)并沒有在這里完成 - 您需要估算不同地區(qū)的商店的不同類別的產(chǎn)品銷售情況,消費者有不同的消費技術(shù)。

當(dāng)我的朋友描述挑戰(zhàn)時,我的數(shù)據(jù)科學(xué)家開始微笑!為什么?我剛剛想出了下一篇文章的潛在主題。在今天的文章中,我會告訴你需要知道的關(guān)于回歸模型的一切,以及如何使用它們來解決像上面提到的預(yù)測問題。

花一點時間,列出所有可以考慮的因素,一個商店的銷售將依賴于這些因素。對于每個因素,都會產(chǎn)生一個關(guān)于為什么以及如何影響各種產(chǎn)品銷售的因素的假設(shè)。例如 - 我期望產(chǎn)品的銷售取決于商店的位置,因為每個地區(qū)的當(dāng)?shù)鼐用穸紩胁煌纳罘绞?。商店在艾哈邁達巴德將出售的面包量將是孟買類似商店的一小部分。

同樣列出你可以想到的所有可能的因素。

您商店的位置,產(chǎn)品的可用性,商店的尺寸,產(chǎn)品的優(yōu)惠,產(chǎn)品的廣告,商店的放置可能是您的銷售依賴的一些功能。

你能想出多少因素?如果不到15,再考慮一下!處理這個問題的數(shù)據(jù)科學(xué)家可能會想到數(shù)百個這樣的因素。

考慮到這一想法,我為您提供了一個這樣的數(shù)據(jù)集 - 大賣場銷售。在數(shù)據(jù)集中,我們有一個鏈的多個出口的產(chǎn)品明智的銷售。

讓我們來看一下數(shù)據(jù)集的快照:


在數(shù)據(jù)集中,我們可以看到出售物品的特征(脂肪含量,可見性,類型,價格)和出口(建立年份,大小,位置,類型)的一些特征以及為該特定物品出售的物品數(shù)量。我們來看看我們可以使用這些功能來預(yù)測銷售情況。

目錄

預(yù)測的簡單模型

線性回歸

最適合的線條

梯度下降

使用線性回歸進行預(yù)測

評估您的Model-R平方和R平方

使用所有功能進行預(yù)測

多項式回歸

偏差和差異

正則

嶺回歸

拉索回歸

彈性網(wǎng)回歸

正則化技術(shù)的類型[可選]

預(yù)測的簡單模型

讓我們先從使用幾種簡單的方法開始做預(yù)測。如果我問你,什么可以是預(yù)測物品銷售的最簡單的方法,你會說什么?

型號1 - 平均銷量:

即使沒有機器學(xué)習(xí)的知識,你可以說如果你必須預(yù)測一個項目的銷售量,這將是過去幾天的平均水平。/月/周。

這是一個很好的想法,但它也提出了一個問題 - 這個模型有多好?

事實證明,我們有多種方式可以評估我們的模型有多好。最常見的方法是均方誤差。讓我們了解如何衡量它。

預(yù)測錯誤

為了評估模型有多好,讓我們了解錯誤預(yù)測的影響。如果我們預(yù)測銷售額高于可能的水平,那么商店將花費大量的資金進行不必要的安排,從而導(dǎo)致庫存過剩。另一方面,如果我預(yù)測它太低,我會失去銷售機會。

因此,計算誤差的最簡單的方法是計算預(yù)測值和實際值的差異。但是,如果我們簡單地添加它們,它們可能會被取消,所以我們在添加之前就對這些錯誤進行排列。我們還將它們除以數(shù)據(jù)點的數(shù)量來計算平均誤差,因為它不應(yīng)該取決于數(shù)據(jù)點的數(shù)量。


[每個誤差平方和除以數(shù)據(jù)點數(shù)]

這被稱為均方誤差。

這里是e1,e2 ...。,en是實際值和預(yù)測值之間的差異。

那么在第一個模型中,平均誤差是多少?在預(yù)測所有數(shù)據(jù)點的平均值時,我們得到均方誤差= 29,11,799??雌饋硐窬薮蟮腻e誤。簡單地預(yù)測平均值可能不是很酷。

我們來看看我們是否可以想到一些東西來減少錯誤。

型號2-按位置平均銷售:

我們知道這個位置在一個物品的銷售中起著至關(guān)重要的作用。例如,讓我們說,在德里,汽車的銷售將比在瓦拉納西的銷售高得多。因此,我們使用列“Outlet_Location_Type”的數(shù)據(jù)。

所以基本上,讓我們來計算每個位置類型的平均銷售額,并進行相應(yīng)的預(yù)測。

預(yù)測相同,我們得到mse = 28,75,386,低于我們以前的情況。所以我們可以注意到,通過使用特征[位置],我們減少了錯誤。

現(xiàn)在,如果銷售有多個功能需要依賴什么呢?我們?nèi)绾问褂眠@些信息預(yù)測銷售?線性回歸來我們的救援。

線性回歸

線性回歸是預(yù)測建模中最簡單和最廣泛使用的統(tǒng)計技術(shù)。它基本上給了我們一個方程,我們將我們的特征作為自變量,我們的目標(biāo)變量[在我們的情況下的銷售]依賴于它們。

那么方程式是什么樣的?線性回歸方程如下:


在這里,我們有Y作為因變量(Sales),X是獨立變量,所有的系數(shù)都是系數(shù)。系數(shù)基本上是基于它們的重要性分配給特征的權(quán)重。例如,如果我們認(rèn)為一個項目的銷售對倉庫類型的依賴程度會更高,那么這意味著一級城市的銷售額要比3級更小城市在一個更大的出口。因此,位置類型的系數(shù)將大于店面大小。

所以,首先讓我們嘗試用一個特征即只有一個獨立變量來理解線性回歸。因此,我們的方程式成為,


該方程被稱為一個簡單的線性回歸方程,其表示的直線,其中“Θ0”是截距,“Θ1”是直線的斜率??纯翠N售和MRP之間的情節(jié)。


令人驚訝的是,我們可以看到產(chǎn)品的銷售額隨著MRP的增加而增加。因此,虛線紅線代表我們的回歸線或最佳擬合線。但是出現(xiàn)的一個問題是你會發(fā)現(xiàn)這一行?

最適合的線條

正如你可以在下面看到的,可以有這么多的行可以用來根據(jù)他們的MRP估計銷售額。那么你如何選擇最合適的線條或回歸線呢?


最佳擬合線的主要目的是,我們的預(yù)測值應(yīng)該更接近于實際值或觀測值,因為預(yù)測與實際值相距很遠(yuǎn)的值沒有意義。換句話說,我們傾向于最小化我們預(yù)測的值與觀測值之間的差異,實際上被稱為誤差。誤差的圖形表示如下圖所示。這些錯誤也稱為殘差。殘差由垂直線表示,表示預(yù)測值和實際值之差。


好的,現(xiàn)在我們知道我們的主要目標(biāo)是找出錯誤并盡量減少。但在此之前,讓我們想想如何處理第一部分,也就是計算錯誤。我們已經(jīng)知道,誤差是我們預(yù)測的值與觀測值的差值。讓我們考慮三種方法來計算錯誤:

殘差總和(Σ(Y-h(X)))- 它可能導(dǎo)致抵消正負(fù)誤差。

殘差絕對值(Σ| Yh(X)|)- 絕對值的總和將阻止錯誤的消除

殘差平方和(Σ(Yh(X))2)- 這是實際使用的方法,因為這里我們比較小的懲罰更高的誤差值,所以造成大的誤差有很大差異和小錯誤,這使得容易區(qū)分和選擇最適合線。

因此,這些殘差的平方和表示為:


其中,H(x)是由我們預(yù)測的值,H(X)=Θ1* X +Θ0,y為實際值,m是在訓(xùn)練組中的行數(shù)。

成本函數(shù)

那么說,你增加了一個特定的商店的大小,在那里你預(yù)測銷售額會更高。但盡管規(guī)模不斷擴大,但該店的銷售額并沒有增加。因此,增加商店規(guī)模所需的成本給您帶來負(fù)面結(jié)果。

所以,我們需要盡量減少這些成本。因此,我們引入一個成本函數(shù),它基本上用于定義和測量模型的誤差。


如果仔細(xì)觀察這個方程,它只是類似于平方誤差的總和,只需要1 / 2m的乘積來減輕數(shù)學(xué)。

所以為了改進我們的預(yù)測,我們需要最小化成本函數(shù)。為此,我們使用梯度下降算法。所以讓我們了解它是如何工作的。

漸變下降

讓我們考慮一個例子,我們需要找到這個方程的最小值,

Y = 5x + 4x ^ 2。在數(shù)學(xué)中,我們簡單地將x方程的導(dǎo)數(shù)簡單地等于零。這給出了這個方程式最小的一點。因此,取代該值可以給出該方程的最小值。

梯度血統(tǒng)以類似的方式工作。它迭代地更新Θ,找到成本函數(shù)最小的點。如果你想深入研究血液深度下降,我強烈建議您閱讀本文。

使用線性回歸預(yù)測

現(xiàn)在讓我們考慮使用線性回歸預(yù)測我們的大型市場銷售問題的銷售。

模型3 - 輸入線性回歸:

從以前的情況,我們知道通過使用正確的功能將提高我們的準(zhǔn)確性。所以現(xiàn)在讓我們用兩個功能,MRP和店鋪建立年度來估算銷售。

現(xiàn)在,我們在python中建立一個線性回歸模型,只考慮這兩個特征。

# importing basic libraries

import numpy as np

import pandas as pd

from pandas import Series, DataFrame

from sklearn.model_selection import train_test_split

import test and train file

train = pd.read_csv('Train.csv')

test = pd.read_csv('test.csv')

# importing linear regressionfrom sklearn

from sklearn.linear_model import LinearRegression

lreg = LinearRegression()

splitting into training and cv for cross validation

X = train.loc[:,['Outlet_Establishment_Year','Item_MRP']]

x_train, x_cv, y_train, y_cv = train_test_split(X,train.Item_Outlet_Sales)

training the model

lreg.fit(x_train,y_train)

predicting on cv

pred = lreg.predict(x_cv)

calculating mse

mse = np.mean((pred - y_cv)**2)

在這種情況下,我們得到mse = 19,10,586.53,比我們的模型2小得多。因此,借助兩個特征預(yù)測更準(zhǔn)確。

我們來看一下這個線性回歸模型的系數(shù)。

# calculating coefficients

coeff = DataFrame(x_train.columns)

coeff['Coefficient Estimate'] = Series(lreg.coef_)

coeff

因此,我們可以看到MRP具有較高的系數(shù),意味著價格較高的物品銷售更好。

6.評估您的模型 - R平方和調(diào)整后的R平方

您認(rèn)為該模型的準(zhǔn)確度如何?我們有任何評估指標(biāo),以便我們檢查一下嗎?其實我們有一個數(shù)量,叫做R-Square。

R-Square:它決定了Y(因變量)的總變化的多少是由X(自變量)的變化來解釋的。數(shù)學(xué)上可以寫成:

R平方的值始終在0和1之間,其中0表示模型沒有模型解釋目標(biāo)變量(Y)中的任何變異性,1表示解釋目標(biāo)變量的完全變異性。

現(xiàn)在讓我們檢查上述模型的r平方。

lreg.score(x_cv,y_cv)

0.3287

在這種情況下,R 2為32%,這意味著銷售額的差異只有32%是由成立年份和MRP進行解釋的。換句話說,如果您知道建立成立年份和MRP,您將有32%的信息來準(zhǔn)確預(yù)測其銷售。

現(xiàn)在如果我在我的模型中再引入一個功能,會發(fā)生什么事情,我的模型會更加逼近實際價值嗎?R-Square的價值會增加嗎?

讓我們考慮另一個案例。

模型4 - 具有更多變量的線性回歸

我們通過使用兩個變量而不是一個變量了解到,我們提高了對項目銷售進行準(zhǔn)確預(yù)測的能力。

所以,我們再來介紹一下另外一個功能“重量”的情況?,F(xiàn)在我們用這三個特征構(gòu)建一個回歸模型。

X = train.loc[:,['Outlet_Establishment_Year','Item_MRP','Item_Weight']]

splitting into training and cv for cross validation

x_train, x_cv, y_train, y_cv = train_test_split(X,train.Item_Outlet_Sales)

## training the model

lreg.fit(x_train,y_train)

ValueError:輸入包含NaN,無窮大或?qū)type('float64')太大的值。

它會產(chǎn)生錯誤,因為項目權(quán)重列有一些缺失值。所以讓我們用其他非空條目的平均值來估算它。

train['Item_Weight'].fillna((train['Item_Weight'].mean()),inplace=True)

讓我們再次嘗試運行該模型。

training the modellreg.fit(x_train,y_train)

## splitting into training and cv for cross validation

x_train, x_cv, y_train, y_cv = train_test_split(X,train.Item_Outlet_Sales)

## training the modellreg.fit(x_train,y_train)

predicting on cvpred = lreg.predict(x_cv)

calculating mse

mse = np.mean((pred - y_cv)**2)

mse

1853431.59

## calculating coefficients

coeff = DataFrame(x_train.columns)

coeff['Coefficient Estimate'] = Series(lreg.coef_)

calculating r-square

lreg.score(x_cv,y_cv)0.32942

所以我們可以看到,mse進一步減少。R平方值有增加,是否意味著增加項目權(quán)重對我們的模型是有用的?

調(diào)整后的R平方

R2的唯一缺點是如果將新的預(yù)測因子(X)添加到我們的模型中,則R2僅增加或保持恒定,但不會降低。我們不能通過增加我們的模型的復(fù)雜性判斷,我們是否更準(zhǔn)確?

這就是為什么我們使用“調(diào)整的R方”。

調(diào)整后的R平方是R模型的修改形式,已經(jīng)針對模型中的預(yù)測數(shù)量進行了調(diào)整。它結(jié)合了模型的自由度。如果新術(shù)語提高了模型精度,調(diào)整后的R-Square只會增加。

哪里

R2=樣品R平方

p =預(yù)測數(shù)量

N =總樣本量

7.使用所有功能進行預(yù)測

現(xiàn)在讓我們構(gòu)建一個包含所有功能的模型。在建立回歸模型時,我只使用了連續(xù)的功能。這是因為我們需要在分類變量之前不同地使用線性回歸模型。有不同的技術(shù)來對待它們,這里我使用了一個熱編碼(將每個類別的分類變量轉(zhuǎn)換為一個特征)。除此之外,我還估計出口尺寸的缺失值。

回歸模型的數(shù)據(jù)預(yù)處理步驟

# imputing missing values

train['Item_Visibility'] = train['Item_Visibility'].replace(0,np.mean(train['Item_Visibility']))

train['Outlet_Establishment_Year'] = 2013 - train['Outlet_Establishment_Year']

train['Outlet_Size'].fillna('Small',inplace=True)

# creating dummy variables to convert categorical into numeric values

mylist = list(train1.select_dtypes(include=['object']).columns)

dummies = pd.get_dummies(train[mylist], prefix= mylist)

train.drop(mylist, axis=1, inplace = True)

X = pd.concat([train,dummies], axis =1 )

建立模型

import numpy as np

import pandas as pd

from pandas import Series, DataFrame

import matplotlib.pyplot as plt

%matplotlib inline

train = pd.read_csv('training.csv')

test = pd.read_csv('testing.csv')

# importing linear regression

from sklearnfrom sklearn.linear_model import LinearRegression

lreg = LinearRegression()

# for cross validation

from sklearn.model_selection import train_test_split

X = train.drop('Item_Outlet_Sales',1)

x_train, x_cv, y_train, y_cv = train_test_split(X,train.Item_Outlet_Sales, test_size =0.3)

# training a linear regression model on train

lreg.fit(x_train,y_train)

# predicting on cv

pred_cv = lreg.predict(x_cv)

# calculating mse

mse = np.mean((pred_cv - y_cv)**2)

mse

1348171.96

# evaluation using r-square

lreg.score(x_cv,y_cv)

0.54831541460870059

顯然,我們可以看到,mse和R-square都有很大的改進,這意味著我們的模型現(xiàn)在能夠預(yù)測與實際值接近的價值觀。

為您的模型選擇正確的功能

當(dāng)我們有一個高維數(shù)據(jù)集時,使用所有變量是非常低效的,因為它們中的一些可能會傳遞冗余信息。我們需要選擇正確的變量集合,這些變量給出了一個準(zhǔn)確的模型,并能很好地解釋因變量。有多種方式為模型選擇正確的變量集。其中首先是業(yè)務(wù)理解和領(lǐng)域知識。例如,在預(yù)測銷售情況時,我們知道營銷工作應(yīng)對銷售產(chǎn)生積極影響,并且是您的模型中的重要特征。我們還應(yīng)該注意,我們選擇的變量不應(yīng)該在它們之間相互關(guān)聯(lián)。

而不是手動選擇變量,我們可以通過使用向前或向后選擇來自動執(zhí)行此過程。前向選擇從模型中最重要的預(yù)測變量開始,并為每個步驟添加變量。反向消除從模型中的所有預(yù)測變量開始,并刪除每個步驟的最不重要的變量。選擇標(biāo)準(zhǔn)可以設(shè)置為任何統(tǒng)計測量,如R平方,t-stat等。

回歸曲調(diào)解釋

看看殘差對擬合值圖。

residual plot

x_plot = plt.scatter(pred_cv, (pred_cv - y_cv), c='b')

plt.hlines(y=0, xmin= -1000, xmax=5000)

plt.title('Residual plot')


我們可以在情節(jié)中看到一個像形狀的漏斗。這種形狀表示異方差。在誤差項中存在非常數(shù)方差導(dǎo)致異方差。我們可以清楚地看到誤差項(殘差)的方差不是恒定的。一般來說,在出現(xiàn)異常值或極度杠桿值的情況下出現(xiàn)非恒定方差。這些值得到太多的重量,從而不成比例地影響了模型的性能。當(dāng)出現(xiàn)這種現(xiàn)象時,樣本預(yù)測的置信區(qū)間往往是不切實際的寬或窄。

我們可以通過查看殘差對擬合值圖來輕松地檢查這一點。如果存在異方差性,則繪圖將顯示如上所示的漏斗形狀圖案。這表示數(shù)據(jù)中沒有被模型捕獲的非線性的跡象。我強烈建議您閱讀本文,詳細(xì)了解回歸圖的假設(shè)和解釋。

為了捕獲這種非線性效應(yīng),我們有另一種稱為多項式回歸的回歸。所以讓我們現(xiàn)在明白一下。

多項式回歸

多項式回歸是另一種形式的回歸,其中自變量的最大冪大于1.在該回歸技術(shù)中,最佳擬合線不是直線,而是以曲線的形式。

二次回歸或二階多項式的回歸由下式給出:

Y =Θ1+Θ2* X +Θ3* X2

現(xiàn)在看下面給出的情節(jié)。


顯然,二次方程擬合數(shù)據(jù)比簡單的線性方程更好。在這種情況下,你認(rèn)為二次回歸的R平方值比簡單的線性回歸如何?肯定是的,因為二次回歸擬合數(shù)據(jù)比線性回歸更好。雖然二次和三次多項式是常見的,但您也可以添加更高等級的多項式。

下圖顯示了6度多項式方程的行為。

那么你認(rèn)為使用更高階多項式來適應(yīng)數(shù)據(jù)集總是更好。可悲的是,沒有?;旧?,我們已經(jīng)創(chuàng)建了一個適合我們的培訓(xùn)數(shù)據(jù)的模型,但沒有估計超出訓(xùn)練集的變量之間的真實關(guān)系。因此,我們的模型在測試數(shù)據(jù)上表現(xiàn)不佳。這個問題被稱為過擬合。我們也說模型的方差偏高,偏倚偏低。

同樣,我們有一個叫做另一個問題欠擬合,它發(fā)生在我們的模型中沒有適合的訓(xùn)練數(shù)據(jù),也不推廣上的新數(shù)據(jù)。

當(dāng)我們有高偏差和低方差時,我們的模型是不足的。

回歸模型的偏差和方差

這個偏差和方差實際上是什么意思?讓我們通過射箭目標(biāo)的例子來理解這一點。

假設(shè)我們的模型是非常準(zhǔn)確的,因此我們的模型的誤差將會很低,這意味著低偏差和低方差,如圖所示。所有數(shù)據(jù)點都適合公牛。同樣,我們可以說,如果方差增加,我們的數(shù)據(jù)點的擴展增加,這導(dǎo)致不太準(zhǔn)確的預(yù)測。隨著偏差的增加,我們的預(yù)測值和觀測值之間的誤差也增加。

現(xiàn)在這個偏差和方差是如何平衡的有一個完美的模型?看看下面的圖片,并嘗試了解。


隨著我們在模型中增加越來越多的參數(shù),其復(fù)雜性增加,導(dǎo)致方差增加和偏差減小,即過度擬合。因此,我們需要在我們的模型中找出一個最優(yōu)點,其中偏差的減少等于方差的增加。在實踐中,沒有分析方法來找到這一點。那么如何處理高偏差或高偏差呢?

為了克服欠擬合或高偏差,我們基本上可以為我們的模型添加新的參數(shù),使得模型的復(fù)雜性增加,從而減少高偏差。

現(xiàn)在,我們?nèi)绾慰朔^擬合的回歸模型?

基本上有兩種方法來克服過擬合,

降低模型復(fù)雜度

正則

在這里,我們將詳細(xì)討論正則化,以及如何使用它來使您的模型更加一般化。

正規(guī)化

你有你的模型準(zhǔn)備好了,你已經(jīng)預(yù)測了你的輸出。那你為什么要學(xué)習(xí)正規(guī)化呢?有必要嗎?

假設(shè)你參加了比賽,在這個問題上你需要預(yù)測一個連續(xù)變量。所以你應(yīng)用線性回歸并預(yù)測你的輸出。瞧!你在排行榜上。但等待你看到的排行榜上還有很多人在你身上。但是你做了一切正確的,那怎么可能呢?

一切都應(yīng)該盡可能簡單,但不要簡單 - 愛因斯坦愛因斯坦

我們做的更簡單,其他所有人都這樣做,現(xiàn)在讓我們看看簡單。這就是為什么我們將嘗試在正規(guī)化的幫助下優(yōu)化我們的代碼。

在正則化中,我們所做的是通常我們保持相同數(shù)量的特征,但是減小系數(shù)j的大小。減少系數(shù)如何有助于我們?

我們來看看我們上述回歸模型中的特征系數(shù)。

checking the magnitude of coefficients

predictors = x_train.columns

coef = Series(lreg.coef_,predictors).sort_values()

coef.plot(kind='bar', title='Modal Coefficients')

我們可以看到Outlet_Identifier_OUT027和Outlet_Type_Supermarket_Type3(最后2)的系數(shù)與其余系數(shù)相比要高得多。因此,這兩個功能將更多地推動項目的總銷售額。

我們?nèi)绾螠p小我們模型中系數(shù)的大???為此,我們有不同類型的回歸技術(shù),使用正則化來克服這個問題。所以讓我們討論一下。

嶺回歸

我們首先對我們的上述問題進行實施,并檢查我們的結(jié)果是否比線性回歸模型更好。

from sklearn.linear_modelimport Ridge

## training the model

ridgeReg = Ridge(alpha=0.05, normalize=True)

ridgeReg.fit(x_train,y_train)

pred = ridgeReg.predict(x_cv)

calculating mse

mse = np.mean((pred_cv - y_cv)**2)

mse1348171.96## calculating scoreridgeReg.score(x_cv,y_cv)0.5691

所以,我們可以看到,由于R-Square的價值增加,我們的模型略有改善。請注意,Alpha的值是Ridge的超參數(shù),這意味著它們不會被模型自動學(xué)習(xí),而是必須手動設(shè)置。

這里我們考慮α= 0.05。但是讓我們考慮不同的α值,并繪制每種情況的系數(shù)。

您可以看到,當(dāng)我們增加α的值時,系數(shù)的幅度減小,其中值達到零但不是絕對零。

但是,如果您計算每個alpha的R平方,我們將看到在α= 0.05時R平方的值將是最大值。所以我們必須明智地選擇它,通過遍歷一系列值,并使用給我們最低錯誤的值。

所以,現(xiàn)在你有一個想法如何實現(xiàn)它,但讓我們來看看數(shù)學(xué)方面。到目前為止,我們的想法是基本上最小化成本函數(shù),使得預(yù)測的值更接近于期望的結(jié)果。

現(xiàn)在再次回顧一下脊線回歸的成本函數(shù)。

在這里,如果你注意到,我們遇到一個額外的術(shù)語,這被稱為懲罰術(shù)語。這里給出的λ實際上由脊函數(shù)中的α參數(shù)表示。所以通過改變α的值,我們基本上就是控制罰球。α值越高,懲罰越大,因此系數(shù)的幅度就越小。

重點:

它縮小了參數(shù),因此它主要用于防止多重共線性。

它通過系數(shù)收縮降低了模型的復(fù)雜性。

它使用L2正則化技術(shù)。(我將在本文后面討論)

現(xiàn)在讓我們考慮另一種也利用正則化的回歸技術(shù)。

拉索回歸

LASSO(最小絕對收縮算子)與山脊非常相似,但我們可以通過在我們的大型市場問題中實現(xiàn)它們來區(qū)分它們。

from sklearn.linear_model import Lasso

lassoReg = Lasso(alpha=0.3, normalize=True)

lassoReg.fit(x_train,y_train)

pred = lassoReg.predict(x_cv)

# calculating mse

mse = np.mean((pred_cv - y_cv)**2)

mse

1346205.82

lassoReg.score(x_cv,y_cv)

0.5720

我們可以看到,我們的模型的Mse和R平方的值都增加了。因此,套索模型預(yù)測比線性和脊線都好。

再次讓我們改變alpha的值,看看它是如何影響系數(shù)的。

所以,我們可以看到,即使在α值較小的情況下,系數(shù)的大小也減少了很多。通過看地塊,你能看出山脊和套索之間的區(qū)別嗎?

我們可以看到,隨著我們增加α的值,系數(shù)接近零,但是如果你看到套索的情況,即使在較小的α,我們的系數(shù)也減少到絕對零。因此,套索選擇唯一的一些特征,同時將他人的系數(shù)降低到零。這個屬性被稱為特征選擇,在脊的情況下是不存在的。

拉索回歸后的數(shù)學(xué)與山脊相似,靜止不同,而不是加上theta的平方,我們將加上Θ的絕對值。

在這里,λ是超儀,其值等于拉索函數(shù)中的α。

重點:

它使用L1正則化技術(shù)(將在本文后面討論)

當(dāng)我們擁有更多的功能時,通常使用它,因為它會自動進行功能選擇。

現(xiàn)在您已經(jīng)對脊和套索回歸有了基本了解,我們來看一個例子,我們有一個大的數(shù)據(jù)集,可以說它有10,000個特征。我們知道一些獨立的功能與其他獨立功能相關(guān)。然后想想,你會使用哪種回歸,Rigde或Lasso?

讓我們一一討論一下。如果我們應(yīng)用脊回歸,它將保留所有的特征,但會縮小系數(shù)。但是問題是,模型仍將保持復(fù)雜,因為有10,000個功能,因此可能導(dǎo)致模型性能不佳。

而不是如果我們應(yīng)用套索回歸這個問題怎么辦?套索回歸的主要問題是當(dāng)我們有相關(guān)變量時,它只保留一個變量,并將其他相關(guān)變量設(shè)置為零。這可能會導(dǎo)致信息丟失,導(dǎo)致我們的模型的準(zhǔn)確性降低。

那么這個問題的解決方案是什么?實際上,我們有另一種類型的回歸,稱為彈性網(wǎng)回歸,其基本上是脊和套索回歸的混合。所以讓我們試著去了解一下。

彈性網(wǎng)回歸

在進入理論部分之前,讓我們在大型市場銷售問題上實施。它會比山脊和套索好嗎?讓我們檢查!

from sklearn.linear_model import ElasticNet

ENreg = ElasticNet(alpha=1, l1_ratio=0.5, normalize=False)

ENreg.fit(x_train,y_train)

pred_cv = ENreg.predict(x_cv)

#calculating mse

mse = np.mean((pred_cv - y_cv)**2)

mse1773750.73

ENreg.score(x_cv,y_cv)

0.4504

所以我們得到了R-Square的價值,它比山脊和套索還要小。你能想到為什么嗎這個垮臺背后的原因基本上是沒有一大堆功能。當(dāng)我們有一個大數(shù)據(jù)集時,彈性回歸通常會很好。

注意,這里我們有兩個參數(shù)alpha和l1_ratio。首先讓我們討論一下,彈性網(wǎng)中會發(fā)生什么,以及它與脊和套索的不同之處。

彈性網(wǎng)基本上是L1和L2正則化的組合。所以如果你知道彈性網(wǎng),你可以通過調(diào)整參數(shù)來實現(xiàn)Ridge和Lasso。所以它使用L1和L2的兩性術(shù)語,因此它的方程式如下:

那么我們?nèi)绾握{(diào)整羔羊來控制L1和L2懲罰項?讓我們以一個例子了解。你正在試圖從池塘里撈一條魚。你只有一個網(wǎng),那么你會做什么?你會隨機扔你的網(wǎng)嗎?不,你真的會等到你看到一條魚在游泳的時候,然后你會把網(wǎng)向這個方向,基本上收集整個魚群。因此,即使相關(guān),我們?nèi)匀幌肟纯此麄兊恼麄€團體。

彈性回歸的工作方式類似。假設(shè)我們在數(shù)據(jù)集中有一堆相關(guān)的自變量,那么彈性網(wǎng)將簡單地形成一個由這些相關(guān)變量組成的組?,F(xiàn)在,如果這個組中的任何一個變量是一個強大的預(yù)測因子(意味著與因變量有很強的關(guān)系),那么我們將把整個組包括在模型構(gòu)建中,因為省略其他變量(就像我們在套索中做的那樣)導(dǎo)致在解釋能力方面失去一些信息,導(dǎo)致模型表現(xiàn)不佳。

所以,如果你看上面的代碼,我們需要在定義模型時定義alpha和l1_ratio。Alpha和l1_ratio是您可以相應(yīng)設(shè)置的參數(shù),如果您想分別控制L1和L2懲罰。其實我們有

α= a + b和l1_ratio = a /(a + b)

其中,a和b分別分配給L1和L2項。所以當(dāng)我們改變alpha和l1_ratio的值時,a和b被設(shè)置為使得它們控制L1和L2之間的權(quán)衡:

a *(L1項)+ b *(L2項)

讓α(或a + b)= 1,現(xiàn)在考慮以下情況:

如果l1_ratio = 1,那么如果我們看l1_ratio的公式,我們可以看到,如果a = 1,則l1_ratio只能等于1,這意味著b = 0。因此,這將是一個套索。

類似地,如果l1_ratio = 0,則暗示a = 0。那么懲罰將是一個山脊懲罰。

對于l1_ratio在0和1之間,懲罰是脊和套索的組合。

所以讓我們來調(diào)整alpha和l1_ratio,并嘗試從下面給出的系數(shù)圖中理解。

現(xiàn)在,您對脊,套索和彈性網(wǎng)回歸有基本的了解。但在此期間,我們遇到了兩個L1和L2,這兩個方面基本上是正則化的兩種。總而言之,基本上來說,套索和山脊分別是L1和L2正則化的直接應(yīng)用。

但如果你還想知道,下面我已經(jīng)解釋了他們背后的概念,這是可選的。

14.正規(guī)化技術(shù)的類型[可選]

讓我們回想一下,無論是山脊還是套索,我們都添加了一個懲罰術(shù)語,但是在這兩種情況下都是不同的。在脊中,我們使用theta的平方而在套索中我們使用了θ的絕對值。那么為什么這兩個只有,不能有其他的可能性?

實際上,在正則化項中參數(shù)的不同選擇順序有不同的可能的正則化選擇

。這通常被稱為Lp正則劑。

讓我們嘗試通過繪制它們來可視化一些。為了使可視化變得容易,我們可以將它們繪制在2D空間中。為此,我們假設(shè)我們只有兩個參數(shù)?,F(xiàn)在,假設(shè)p = 1,我們有一個術(shù)語

。我們不能繪制這條線的方程?下面給出了p的不同值的類似圖。

在上面的圖中,軸表示參數(shù)(θ1和θ2)。讓我們逐一檢查一下。

對于p = 0.5,只有當(dāng)其他參數(shù)太小時,才能獲得一個參數(shù)的大值。對于p = 1,我們得到絕對值的和,其中一個參數(shù)Θ的增加被其他的減小精確地抵消。對于p = 2,我們得到一個圓,對于較大的p值,它接近圓形正方形。

兩個最常用的正則化是我們有p = 1和p = 2,更常被稱為L1和L2正則化。

仔細(xì)看下面給出的圖。藍(lán)色的形狀是指正則化項,其他形狀是指我們的最小二乘誤差(或數(shù)據(jù)項)。


第一個數(shù)字是L1,第二個是L2正則化。黑點表示在該點處最小二乘誤差最小化,并且我們可以看到它隨著它的移動而二次增加,并且正則化項在所有參數(shù)為零的原點被最小化。

現(xiàn)在的問題是,我們的成本功能在什么時候是最小的?答案將是,因為它們是二次增加的,所以這兩個術(shù)語的和將在它們首先相交的點被最小化。

看看L2正則化曲線。由于L2正則化器形成的形狀是一個圓形,所以隨著我們離開它,它逐漸增加。只有當(dāng)最小MSE(圖中的均方誤差或黑點)也正好位于軸上時,L2最優(yōu)(基本上是交點)才能落在軸線上。但是在L1的情況下,L1最優(yōu)可以在軸線上,因為它的輪廓是鋒利的,因此相互作用點的機會很大。因此,即使最小MSE不在軸上,也可以在軸線上相交。如果交點落在軸上,則稱為稀疏。

因此,L1提供了一定程度的稀疏性,這使得我們的模型更有效地存儲和計算,并且還可以幫助檢查特征的重要性,因為不重要的特征可以精確地設(shè)置為零。

結(jié)束筆記

我希望現(xiàn)在你可以理解線性回歸背后的科學(xué),以及如何實現(xiàn)它,進一步優(yōu)化它以改善模型。

“知識是寶藏,實踐是關(guān)鍵”

因此,通過解決一些問題讓你的手變臟。您也可以從Big Mart銷售問題開始,并嘗試通過一些功能工程來改進您的模型。如果在實施過程中面臨任何困難,請隨時在我們的討論門戶上寫信。

你覺得這篇文章有幫助嗎?請在下面的評論部分分享您的意見/想法。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容