溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

Python如何實(shí)現(xiàn)嶺回歸

發(fā)布時(shí)間:2022-01-15 14:03:14 來源:億速云 閱讀:633 作者:iii 欄目:開發(fā)技術(shù)

這篇文章主要介紹“Python如何實(shí)現(xiàn)嶺回歸”的相關(guān)知識,小編通過實(shí)際案例向大家展示操作過程,操作方法簡單快捷,實(shí)用性強(qiáng),希望這篇“Python如何實(shí)現(xiàn)嶺回歸”文章能幫助大家解決問題。

1 概述

1.1 線性回歸

對于一般地線性回歸問題,參數(shù)的求解采用的是最小二乘法,其目標(biāo)函數(shù)如下:

Python如何實(shí)現(xiàn)嶺回歸

參數(shù) w 的求解,也可以使用如下矩陣方法進(jìn)行:

Python如何實(shí)現(xiàn)嶺回歸

這個(gè)公式看著嚇人,其實(shí)推導(dǎo)過程簡單由(Python如何實(shí)現(xiàn)嶺回歸推導(dǎo)而來,紙老虎)
對于矩陣 X ,若某些列線性相關(guān)性較大(即訓(xùn)練樣本中某些屬性線性相關(guān)),就會(huì)導(dǎo)致
的值接近 0 ,在計(jì)算Python如何實(shí)現(xiàn)嶺回歸時(shí)就會(huì)出現(xiàn)不穩(wěn)定性。
結(jié)論 : 傳統(tǒng)的基于最小二乘的線性回歸法缺乏穩(wěn)定性。

1.2 嶺回歸 

嶺回歸的優(yōu)化目標(biāo):

Python如何實(shí)現(xiàn)嶺回歸

 對應(yīng)的矩陣求解方法為:                

Python如何實(shí)現(xiàn)嶺回歸

嶺回歸(ridge regression) 是一種專用于共線性數(shù)據(jù)分析的有偏估計(jì)回歸方法。
是一種改良的最小二乘估計(jì)法,對某些數(shù)據(jù)的擬合要強(qiáng)于最小二乘法。

1.3 過擬合

Python如何實(shí)現(xiàn)嶺回歸

圖二就是正常擬合,符合數(shù)據(jù)的趨勢,而圖三,雖然在訓(xùn)練集上擬合得很好,但是出現(xiàn)未知數(shù)據(jù)時(shí),比如Size很大時(shí),根據(jù)目前擬合來看,可能得到的結(jié)果很小,與實(shí)際誤差會(huì)很大。 

2 sklearn中的嶺回歸

在sklearn庫中,可以使用sklearn.linear_model.Ridge調(diào)用嶺回歸模型,其主要參數(shù)有:

• alpha:正則化因子,對應(yīng)于損失函數(shù)中的 ????
• fit_intercept:表示是否計(jì)算截距,
• solver:設(shè)置計(jì)算參數(shù)的方法,可選參數(shù)‘auto’、‘svd’、‘sag’等。

3 案例 

交通流量預(yù)測實(shí)例:

3.1 數(shù)據(jù)介紹

數(shù)據(jù)為某路口的交通流量監(jiān)測數(shù)據(jù),記錄全年小時(shí)級別的車流量。

3.2 實(shí)驗(yàn)?zāi)康?/h4>

根據(jù)已有的數(shù)據(jù)創(chuàng)建多項(xiàng)式特征,使用嶺回歸模型代替一般的線性模型,對 車流量 的信息進(jìn)行 多項(xiàng)式回歸 。

3.3 數(shù)據(jù)特征如下

HR :一天中的第幾個(gè)小時(shí)(0-23)
WEEK_DAY :一周中的第幾天(0-6)
DAY_OF_YEAR :一年中的第幾天(1-365)
WEEK_OF_YEAR :一年中的第幾周(1-53)
TRAFFIC_COUNT :交通流量
全部數(shù)據(jù)集包含2萬條以上數(shù)據(jù)(21626)

Python如何實(shí)現(xiàn)嶺回歸

4 Python實(shí)現(xiàn) 

4.1 代碼

#*================1. 建立工程,導(dǎo)入sklearn相關(guān)工具包====================**
import numpy as np
from sklearn.linear_model import Ridge   #通過sklearn.linermodel加載嶺回歸方法
from sklearn import model_selection     #加載交叉驗(yàn)證模塊
import matplotlib.pyplot as plt      #加載matplotilib模塊
from sklearn.preprocessing import PolynomialFeatures     #通過加載用于創(chuàng)建多項(xiàng)式特征,如ab、a2、b2
 
#*=================2. 數(shù)據(jù)加載=========================================**
data=np.genfromtxt('嶺回歸.csv',delimiter=',')     #使用numpy的方法從csv文件中加載數(shù)據(jù)
print(data)
print(data.shape)
plt.plot(data[:,4])                #使用plt展示車流量信息
#plt.show()
#*================3. 數(shù)據(jù)處理==========================================**
X=data[:,:4]                  #X用于保存0-3維數(shù)據(jù),即屬性
y=data[:,4]                   ##y用于保存第4維數(shù)據(jù),即車流量
poly=PolynomialFeatures(6)    #用于創(chuàng)建最高次數(shù)6次方的的多項(xiàng)式特征,多次試驗(yàn)后決定采用6次
X=poly.fit_transform(X)       #X為創(chuàng)建的多項(xiàng)式特征
 
#*================4. 劃分訓(xùn)練集和測試集=================================**
train_set_x, test_set_x , train_set_y, test_set_y =model_selection.train_test_split(X,y,test_size=0.3,
random_state=0)
#將所有數(shù)據(jù)劃分為訓(xùn)練集和測試集,test_size表示測試集的比例,
# #random_state是隨機(jī)數(shù)種子
 
#*==============5. 創(chuàng)建回歸器,并進(jìn)行訓(xùn)練===============================**
clf=Ridge(alpha=1.0,fit_intercept = True)
#接下來我們創(chuàng)建嶺回歸實(shí)例
clf.fit(train_set_x,train_set_y) #調(diào)用fit函數(shù)使用訓(xùn)練集訓(xùn)練回歸器
clf.score(test_set_x,test_set_y) #利用測試集計(jì)算回歸曲線的擬合優(yōu)度,clf.score返回值為0.7375
#擬合優(yōu)度,用于評價(jià)擬合好壞,最大為1,無最小值,當(dāng)對所有輸入都輸出同一個(gè)值時(shí),擬合優(yōu)度為0。
 
#*============6. 畫出擬合曲線=========================================**
start=100                      #接下來我們畫一段200到300范圍內(nèi)的擬合曲線
end=200
y_pre=clf.predict(X)           #是調(diào)用predict函數(shù)的擬合值
time=np.arange(start,end)
plt.plot(time,y[start:end],'b', label="real")
plt.plot(time,y_pre[start:end],'r', label='predict')   #展示真實(shí)數(shù)據(jù)(藍(lán)色)以及擬合的曲線(紅色)
plt.legend(loc='upper left') #設(shè)置圖例的位置
plt.show()

4.2 結(jié)果 

Python如何實(shí)現(xiàn)嶺回歸

分析結(jié)論 :預(yù)測值和實(shí)際值的走勢大致相同

Python如何實(shí)現(xiàn)嶺回歸

關(guān)于“Python如何實(shí)現(xiàn)嶺回歸”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識,可以關(guān)注億速云行業(yè)資訊頻道,小編每天都會(huì)為大家更新不同的知識點(diǎn)。

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI