日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > python >内容正文

python

python多维数据划分_【python+机器学习(4)】多维数据的特征选取(RidgeLasso)...

發(fā)布時(shí)間:2023/12/9 python 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python多维数据划分_【python+机器学习(4)】多维数据的特征选取(RidgeLasso)... 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

歡迎關(guān)注哈希大數(shù)據(jù)微信公眾號(hào)【哈希大數(shù)據(jù)】

在之前我們介紹了直接使用線性回歸進(jìn)行波士頓房價(jià)的預(yù)測(cè),但是預(yù)測(cè)準(zhǔn)確率僅有60%左右。預(yù)測(cè)準(zhǔn)確率不高一方面是我們未對(duì)數(shù)據(jù)進(jìn)行一定的預(yù)處理(包括歸一化和標(biāo)準(zhǔn)化等),這樣不能確保在使用優(yōu)化方式時(shí),對(duì)不同特征參數(shù)起到同樣的影響。 其次是未深入挖掘數(shù)據(jù)特征間關(guān)系,比如當(dāng)原始數(shù)據(jù)某些特征與目標(biāo)值不具有線性關(guān)系時(shí),不應(yīng)當(dāng)納入訓(xùn)練模型中。而且數(shù)據(jù)特征之間可能存在共線性等其他問題,不完全適合使用線性回歸模型進(jìn)行擬合。

因此,本節(jié)我們將介紹Ridge Regression(嶺回歸)和Lasso Regression(拉索回歸),進(jìn)行波士頓房價(jià)數(shù)據(jù)集中的特征選取和共線性問題的處理,從而更加準(zhǔn)確的構(gòu)建模型實(shí)現(xiàn)房價(jià)預(yù)測(cè)。

算法理論介紹

機(jī)器學(xué)習(xí)機(jī)制回顧

在之前Linear Regression普通線性回歸的應(yīng)用中(忘記的小伙伴可拉到文末查看線性回歸詳情內(nèi)容),我們的輸入數(shù)據(jù)是具有13個(gè)特征屬性的波士頓房價(jià)數(shù)據(jù)集。

回歸模型的構(gòu)建就是實(shí)現(xiàn)這13個(gè)特征屬性值的線性加權(quán)之和,用于與實(shí)際的房價(jià)進(jìn)行擬合。

image

然后通過機(jī)器學(xué)習(xí)功能來訓(xùn)練數(shù)據(jù)集進(jìn)而獲取該模型的參數(shù)也就是每個(gè)特征屬性之前的權(quán)值系數(shù)(即權(quán)值a的確定)。

機(jī)器學(xué)習(xí)是如何得到權(quán)值呢?是通過定義的一個(gè)損失函數(shù),實(shí)現(xiàn)將訓(xùn)練數(shù)據(jù)代入我們模型的預(yù)測(cè)房價(jià)和真實(shí)房價(jià)的差的平方,然后再將這些平方求和,即普通最小二乘法。

image

因此求權(quán)值a的問題,就成了損失函數(shù)求和的最小化的最優(yōu)化問題。

通過一定的理論推導(dǎo)可以得知權(quán)值系數(shù)實(shí)際為(特征屬性值的廣義逆):

image

而且普通的線性回歸算法可以直接訓(xùn)練得到該結(jié)果進(jìn)而實(shí)現(xiàn)對(duì)房價(jià)的預(yù)測(cè)。

但是,直接使用普通的線性回歸模型,當(dāng)訓(xùn)練樣本數(shù)量過少,甚至少于樣本維數(shù)(僅有12條房屋數(shù)據(jù)),這樣將導(dǎo)致特征數(shù)據(jù)矩陣無法求逆,則不能完成參數(shù)a的估計(jì);其次如果樣本特征中存在大量相似的特征(即樣本屬性之間存在共線性關(guān)系),將會(huì)導(dǎo)致很多權(quán)重所代表的意義重復(fù),使原本簡單高效的模型復(fù)雜化。

因此希望可以對(duì)參數(shù)a的計(jì)算時(shí)提供某種約束(增加一個(gè)懲罰因子),只保留具有共線性的一個(gè)特征屬性值,而實(shí)現(xiàn)特征數(shù)據(jù)的縮減同時(shí)解決過擬合的問題,嶺回歸和拉索回歸恰好可以解決該問題。

下面來詳細(xì)了解一下嶺回歸和拉索回歸的相關(guān)理論和python實(shí)現(xiàn)。

嶺回歸 Ridge

在出現(xiàn)普通線性回歸無法解決的問題時(shí),可以在原來加一個(gè)小擾動(dòng)值λI

image

,其中I為對(duì)角矩陣

image

,可以對(duì)特征屬性的權(quán)重計(jì)算進(jìn)行一定約束,形象的稱加入的對(duì)角矩陣I為嶺。當(dāng)λ越大,懲罰約束作用就越大,而原始數(shù)據(jù)對(duì)回歸求取參數(shù)的作用就會(huì)減小,λ為0時(shí)也就是普通的線性回歸算法。如果給λ指定一個(gè)合適的值,就能在一定意義上解決過擬合的問題(原先過擬合的特別大或者特別小的參數(shù)會(huì)被約束到正常取值但不會(huì)為零)。可以通過多次調(diào)試尋找較優(yōu)的λ值,也就是當(dāng)λ調(diào)整到獲取的參數(shù)值穩(wěn)定時(shí)即可。

因此嶺回歸可以初步解決特征權(quán)值參數(shù)a的動(dòng)態(tài)調(diào)整(普通線性回歸是無偏估計(jì)的唯一值),進(jìn)而緩解過擬合的問題(盡可能找到不同 特征與目標(biāo)值的具體關(guān)系)。

拉索回歸 Lasso

嶺回歸可以動(dòng)態(tài)調(diào)整特征屬性的權(quán)重參數(shù),進(jìn)而使得模型更加契合實(shí)際情況,充分解釋不同特征對(duì)目標(biāo)值的影響力,但是其只能將具有線性相關(guān)的相似特征屬性的權(quán)重降低卻不能完全剔除。

拉索回歸與嶺回歸類似也是加入了一個(gè)擾動(dòng)項(xiàng),其使用的懲罰項(xiàng)對(duì)角矩陣而是可以實(shí)現(xiàn)特征選擇的收縮懲罰性:

image

,可以保證當(dāng)λ充分大時(shí)可以把某些特征屬性的權(quán)重精確地收縮到0,也就是在模型中剔除了該特征屬性,從而從大量特征數(shù)據(jù)中挑選出。該方法的兩大好處:一方面剔除噪聲特征(也就是房價(jià)不受其影響的特征),其次可以消除具有線性相關(guān)關(guān)系的不同屬性(會(huì)造成模型的不穩(wěn)定,原因在之后做具體介紹)。

除此以外,嶺回歸中的約束因子λ需要手動(dòng)調(diào)試,而在拉索回歸算法中,可以實(shí)現(xiàn)λ參數(shù)的交叉驗(yàn)證,而尋找使得誤差最小的λ的取值,使用交叉檢驗(yàn)的訓(xùn)練方法可以進(jìn)一步提高模型的科學(xué)性和準(zhǔn)確性。

python實(shí)現(xiàn)

Ridge python

同樣使用scikit-learn庫中的包實(shí)現(xiàn)該算法,嶺回歸算法實(shí)現(xiàn)的部分代碼如下:

from sklearn.linear_model import Ridge

嶺回歸模型的導(dǎo)入

ridge = Ridge(alpha=float(‘{}’.format(i))).fit(house_price_train_X,house_price_train_y)# 默認(rèn)的lamda的參數(shù)為i

嶺回歸模型訓(xùn)練的準(zhǔn)確率

predict_result_ridge = ridge.predict(house_price_test_X)

predict_result_ridge1 = ridge.score(house_price_train_X, house_price_train_y)

predict_result_ridge0 = ridge.score(house_price_test_X, house_price_test_y)

print(‘嶺回歸懲罰參數(shù)為 {} ,訓(xùn)練集的準(zhǔn)確率:’.format(i),predict_result_ridge1)

print(‘嶺回歸懲罰參數(shù)為 {} ,測(cè)試集的準(zhǔn)確率:’.format(i), predict_result_ridge0)

Lasso python

普通拉索回歸算法實(shí)現(xiàn)的部分代碼如下:

普通拉索回歸模型的導(dǎo)入

from sklearn.linear_model import Lasso

lasso = Lasso(alpha=np.float(‘{}’.format(i)) ,max_iter=1000000).fit(house_price_train_X, house_price_train_y) # 默認(rèn)的lamda的參數(shù)為i

拉索模型訓(xùn)練的準(zhǔn)確率

predict_result_lasso = lasso.predict(house_price_test_X)

predict_result_lasso1 = lasso.score(house_price_train_X, house_price_train_y)

predict_result_lasso0 = lasso.score(house_price_test_X, house_price_test_y)

print(‘拉索回歸懲罰參數(shù)為 {} ,訓(xùn)練集的準(zhǔn)確率:’.format(i), predict_result_lasso1)

print(‘拉索回歸懲罰參數(shù)為 {} ,測(cè)試集的準(zhǔn)確率:’.format(i), predict_result_lasso0)

print(‘拉索回歸懲罰參數(shù)為 {},使用的特征屬性有:{}’.format(i,np.sum(lasso.coef_ != 0))

交叉驗(yàn)證的拉索回歸算法實(shí)現(xiàn)的部分代碼如下:

實(shí)現(xiàn)交叉檢驗(yàn)拉索回歸模型的導(dǎo)入

from sklearn.linear_model import LassoCV

lasso_cv = LassoCV(alphas=np.logspace(-3,1,2,50) ,max_iter=1000000).fit(house_price_train_X, house_price_train_y) # 默認(rèn)的lamda的參數(shù)為i

交叉檢驗(yàn)拉索模型訓(xùn)練的準(zhǔn)確率

predict_result_lasso_cv = lasso_cv.predict(house_price_test_X)

predict_result_lasso_cv1 = lasso_cv.score(house_price_train_X, house_price_train_y)

predict_result_lasso_cv0 = lasso_cv.score(house_price_test_X, house_price_test_y)

print(‘交叉檢驗(yàn)拉索回歸 訓(xùn)練集的準(zhǔn)確率:’, predict_result_lasso_cv1)

print(‘交叉檢驗(yàn)拉索回歸 測(cè)試集的準(zhǔn)確率:’, predict_result_lasso_cv0)

image.png

預(yù)測(cè)對(duì)比結(jié)果

1、當(dāng)設(shè)置懲罰參數(shù)為0時(shí)會(huì)提示建議使用回歸模型。2、當(dāng)懲罰參數(shù)不同時(shí),lasso算法選數(shù)據(jù)特征屬性個(gè)數(shù)是不同的。3、如果懲罰參數(shù)設(shè)置過大,則無法進(jìn)行預(yù)測(cè)。4、也因數(shù)據(jù)自身特征,三種方式的預(yù)測(cè)準(zhǔn)確率相差不大。可以提示我們?cè)谟?xùn)練不同數(shù)據(jù)時(shí),要針對(duì)性的選用不同模型。(源碼請(qǐng)直接通過給后臺(tái)發(fā)消息獲取哦!)

總結(jié)

以上是生活随笔為你收集整理的python多维数据划分_【python+机器学习(4)】多维数据的特征选取(RidgeLasso)...的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。