python多維數據劃分_【python+機器學習(4)】多維數據的特征選取(RidgeLasso)...

歡迎關注哈希大數據微信公眾號【哈希大數據】

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

因此,本節我們將介紹Ridge Regression(嶺回歸)和Lasso Regression(拉索回歸),進行波士頓房價數據集中的特征選取和共線性問題的處理,從而更加準確的構建模型實現房價預測。

算法理論介紹

機器學習機制回顧

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

回歸模型的構建就是實現這13個特征屬性值的線性加權之和,用于與實際的房價進行擬合。

image

然后通過機器學習功能來訓練數據集進而獲取該模型的參數也就是每個特征屬性之前的權值系數(即權值a的確定)。

機器學習是如何得到權值呢?是通過定義的一個損失函數,實現將訓練數據代入我們模型的預測房價和真實房價的差的平方,然后再將這些平方求和,即普通最小二乘法。

image

因此求權值a的問題,就成了損失函數求和的最小化的最優化問題。

通過一定的理論推導可以得知權值系數實際為(特征屬性值的廣義逆):

image

而且普通的線性回歸算法可以直接訓練得到該結果進而實現對房價的預測。

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

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

下面來詳細了解一下嶺回歸和拉索回歸的相關理論和python實現。

嶺回歸 Ridge

在出現普通線性回歸無法解決的問題時,可以在原來加一個小擾動值λI

image

,其中I為對角矩陣

image

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

因此嶺回歸可以初步解決特征權值參數a的動態調整(普通線性回歸是無偏估計的唯一值),進而緩解過擬合的問題(盡可能找到不同 特征與目標值的具體關系)。

拉索回歸 Lasso

嶺回歸可以動態調整特征屬性的權重參數,進而使得模型更加契合實際情況,充分解釋不同特征對目標值的影響力,但是其只能將具有線性相關的相似特征屬性的權重降低卻不能完全剔除。

拉索回歸與嶺回歸類似也是加入了一個擾動項,其使用的懲罰項對角矩陣而是可以實現特征選擇的收縮懲罰性:

image

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

除此以外,嶺回歸中的約束因子λ需要手動調試,而在拉索回歸算法中,可以實現λ參數的交叉驗證,而尋找使得誤差最小的λ的取值,使用交叉檢驗的訓練方法可以進一步提高模型的科學性和準確性。

python實現

Ridge python

同樣使用scikit-learn庫中的包實現該算法,嶺回歸算法實現的部分代碼如下:

from sklearn.linear_model import Ridge

嶺回歸模型的導入

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

嶺回歸模型訓練的準確率

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(‘嶺回歸懲罰參數為 {} ,訓練集的準確率:’.format(i),predict_result_ridge1)

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

Lasso python

普通拉索回歸算法實現的部分代碼如下:

普通拉索回歸模型的導入

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) # 默認的lamda的參數為i

拉索模型訓練的準確率

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(‘拉索回歸懲罰參數為 {} ,訓練集的準確率:’.format(i), predict_result_lasso1)

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

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

交叉驗證的拉索回歸算法實現的部分代碼如下:

實現交叉檢驗拉索回歸模型的導入

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) # 默認的lamda的參數為i

交叉檢驗拉索模型訓練的準確率

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(‘交叉檢驗拉索回歸 訓練集的準確率:’, predict_result_lasso_cv1)

print(‘交叉檢驗拉索回歸 測試集的準確率:’, predict_result_lasso_cv0)

image.png

預測對比結果

1、當設置懲罰參數為0時會提示建議使用回歸模型。2、當懲罰參數不同時,lasso算法選數據特征屬性個數是不同的。3、如果懲罰參數設置過大,則無法進行預測。4、也因數據自身特征,三種方式的預測準確率相差不大。可以提示我們在訓練不同數據時,要針對性的選用不同模型。(源碼請直接通過給后臺發消息獲取哦!)

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/394195.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/394195.shtml
英文地址,請注明出處:http://en.pswp.cn/news/394195.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

leetcode64. 最小路徑和(dp)

給定一個包含非負整數的 m x n 網格,請找出一條從左上角到右下角的路徑,使得路徑上的數字總和為最小。說明:每次只能向下或者向右移動一步。示例:輸入: [[1,3,1],[1,5,1],[4,2,1] ] 輸出: 7 解釋: 因為路徑 1→3→1→1→1 的總和最小。代碼 …

mysql淺拷貝_深拷貝與淺拷貝

在Python中,對象賦值實際上是對象的引用。當創建一個對象,然后把它賦給另一個變量的時候,Python并沒有拷貝這個對象,而只是拷貝了這個對象的引用。1、淺拷貝:利用切片操作、工廠方法list方法拷貝2、深拷貝:…

盤州市“檢企聯合” 探索大數據應用新路

為認真貫徹落實“科技強檢”及推進大數據應用的決策部署,8月31日,盤州市人民檢察院組織召開以“檢察大數據”為主題的“兩長”座談會。市經信局、中國移動盤州分公司、中國電信盤州分公司等單位負責人,檢察院在家班子成員及院各部門主要負責人…

iOS中的顏色

最近在改Bug的時候,才注意到iOS 中的顏色竟然也大有文章,特來記錄一下。 先說一下問題,因為某界面中有用xib實現的一個view,而這個view 只在UIColletionView的layout 里通過nib 注冊使用,為這個xib設置了背景色&#x…

編程面試中需要了解的5件事

This article is intended for those who are trying to start their programming career, or are preparing to interview for their dream job. As someone who’s been on both sides of the interviewing table, I understand how it feels to be the interviewee.本文適用…

多線程的基礎知識

1、程序、進程、線程的基本概念 程序:為了完成某種任務用某一種語言編寫的一組指令的集合就叫程序。程序就是一段靜態的代碼。 進程:進程是程序的依次執行過程,或者說是正在運行的一個程序。這是一個動態的過程,有它自身的產生運行…

springboot實現單點登錄_什么是單點登錄,php是如何實現單點登錄的

文章來自:php中文網鏈接:https://www.php.cn/php-weizijiaocheng-429869.html作者:中文網商務合作:請加微信(QQ):2230304070視頻教程分享碼農網:http://www.mano100.cn/rjyfk_url-url.html ,升級終身會員即…

背景圖處理,這是個好東西記錄一下

背景圖處理 rgba (),前3個是三原色,第四個參數是透明度轉載于:https://www.cnblogs.com/ChineseLiao/p/7479207.html

python使用GUI(圖形用戶界面)

打開后: File→New File(Ctrl N) 轉載于:https://www.cnblogs.com/ly123456/p/6269859.html

Altium Designer(AD24)新工程復用設計文件圖文教程及視頻演示

🏡《專欄目錄》 目錄 1,概述2,復用方法一視頻演示2.1,創建工程2.2,復用設計文件 3,復用方法二視頻演示4,總結 歡迎點擊瀏覽更多高清視頻演示 1,概述 本文簡述使用AD軟件復用設計文件…

兩點定標法_一種兩點校正紅外熱像儀的非均勻性的模塊及方法

一種兩點校正紅外熱像儀的非均勻性的模塊及方法【技術領域】[0001] 本發明屬于紅外熱成像系統的非均勻性校正領域,特別是一種兩點校正紅外熱像 儀的非均勻性的模塊及方法。【背景技術】[0002] 在過去的幾十年中,紅外探測器件的元數不斷增加,由…

leetcode851. 喧鬧和富有(dfs)

在一組 N 個人(編號為 0, 1, 2, …, N-1)中,每個人都有不同數目的錢,以及不同程度的安靜(quietness)。 為了方便起見,我們將編號為 x 的人簡稱為 "person x "。 如果能夠肯定 perso…

如何選擇正確的容器編排以及如何進行部署

by Michael Douglass邁克爾道格拉斯(Michael Douglass) 如何選擇正確的容器編排以及如何進行部署 (How to choose the right container orchestration and how to deploy it) Running server processes inside containers is here to stay. If your environment is small with…

Oracle 學習筆記(三)

oracle 表查詢 oracle 表基本查詢 在此,基于 scott 用戶存在的 emp,dept 表演示學習。 emp 雇員表 clerk 員工 salesman 銷售 manager 經理 analyst 分析師 president 總裁 mgr 上級的編號 hiredate 入職時間 sal 工資 comm 獎金 deptno 部…

html meta標簽使用總結(轉)

之前學習前端中&#xff0c;對meta標簽的了解僅僅只是這一句。 <meta charset"UTF-8"> 但是打開任意的網站&#xff0c;其head標簽內都有一列的meta標簽。比如我博客的。 但是自己卻很不熟悉&#xff0c;于是把meta標簽加入了寒假學習計劃的最前方。 簡介 在查…

bzoj 4009 接水果 整體二分

Description 先給出一些盤子, 用路徑x-y表示, 有權值 再有Q個詢問, 表示水果, 用路徑x-y表示 如果盤子是水果的子路徑, 可以接住 對于每個水果, 輸出可以接住它的盤子的第k小權 Solution 對于x-lca-y的盤子&#xff0c;水果一定一個在x子樹&#xff0c;一個在y子樹 對于x-lca的…

離散元 python_剛開始學習離散元軟件Yade,有什么建議?

用Yade-DEM 做過博士期間的部分工作&#xff0c;也是從毫無所知到算是入門&#xff0c;分享一點我的學習過程&#xff0c;為那些剛接觸Yade的同學提供些許參考&#xff0c;希望對大家有幫助。0. Yade 簡介Yade 是一個用于離散元分析的開源平臺&#xff0c;是法國Lab 3SR-Grenob…

leetcode529. 掃雷游戲(dfs)

讓我們一起來玩掃雷游戲&#xff01; 給定一個代表游戲板的二維字符矩陣。 ‘M’ 代表一個未挖出的地雷&#xff0c;‘E’ 代表一個未挖出的空方塊&#xff0c;‘B’ 代表沒有相鄰&#xff08;上&#xff0c;下&#xff0c;左&#xff0c;右&#xff0c;和所有4個對角線&#…

redhat6 刪除mysql_Red Hat enterprise linux 6卸載默認安裝的 mysql

因為Red Hat enterprise linux 6 自帶了一個mysql&#xff0c;所以當你安裝新的mysql時&#xff0c;就會提示錯誤如&#xff1a;error&#xff1a;Failed dependencies&#xff1a;MySQL conflicts with mysql-5.1.47-4.el6.i686rmp -qa mysql 可以看到安裝的mysql于是將自帶的…

swift通知欄推送_如何使用Swift使用推送通知構建食品交付應用

swift通知欄推送by Neo Ighodaro由新Ighodaro 如何使用Swift使用推送通知構建食品交付應用 (How to build a food delivery app with push notifications using Swift) A basic understanding of Swift and Node.js is needed to follow this tutorial.要學習本教程&#xff0…