使用线性回归,岭回归,Lasso回归预测鲍鱼年龄
實驗目的
掌握數據預處理方法
掌握線性回歸預測基本原理與實現。
實驗問題背景
鮑魚的年齡可以通過鮑魚殼的“環數”來判斷,但是獲取這個“環數”是十分耗時的,需要鋸開殼,然后在顯微鏡下觀察得到。
可以通過鮑魚的其他特征比如性別、長度、直徑、高度、整體重量、去殼后重量、臟器重量、殼的重量等,通過機器學習的方法來預測其環數,從而得到年齡,具有很大的應用價值。
實驗問題描述
現有一份鮑魚的數據集abalone.csv,該數據集有4177個數據樣本,每個樣本有9個特征,具體信息如下:
屬性 數據類型 單位 內容描述
性別(Sex) 標稱 M, F,I(infant)
長度(Length) 連續 毫米
直徑(Diameter) 連續 毫米
高度(Height) 連續 毫米
整體重量(Whole weight) 連續 克
去殼后重量(Shucked weight) 連續 克
臟器重量(Viscera weight) 連續 克
殼的重量(Shell weight) 連續 克
環數(Rings) 連續
實驗內容:
1.數據預處理:
(1)標稱數據的連續化:利用函數將性別Sex列中的‘F’,’M’用‘0’,‘1’等數字表示
程序:
結果:Sex標稱已經實現連續化
(2)發現數據中的NaN,并用中位值填補
程序實現
發現NaN
中位值填補
結果:數據中空值已被填補
(3)處理極端值,并導出到新的csv文件中
1.為了觀察有沒有明顯錯誤的值,采用了畫圖的方法來觀測極端值
箱型圖:
發現散點圖更為直觀。
1.在第二三列中發現極端值,而且極端值的絕對值遠遠大于普通數據的絕對值,因此利用其特性將其替換
想法:去掉絕對值大于平均值四倍的數據,并用該列的中位數填補
( 選擇臨界點為平均值四倍的原因:為了適應每列的情況不同,最好采用每列的特征值,而不是固定數,平均值是反映數據集中趨勢的一項重要指標,而且還要給數據一些靈活度,因此選擇平均值的四倍作為臨界點。
選擇中位數的原因:極端值會影響平均值,因此用中位數來替代。
)
結果:發現max,min恢復正常,原極端值被刪除
2.將數據集按照3:1分為訓練集和驗證集
因為目的是通過鮑魚其它特征來預測鮑魚年齡環數,因此用X,Y來將變量因變量分開。
然后引入 sklearn.model_selection 中的train_test_split包,劃分訓練集和驗證集。
程序:
3.調用第三方軟件包(比如Sklearn)實現線性回歸、嶺回歸、LASSO回歸
① 普通線性回歸實現
調用sklearn.linear_model中的LinearRegression,將訓練集帶入,求出參數,
并將測試集帶入用來檢測,并畫出擬合圖像。
結果:b = 3.0132231704721466
各列的系數為:
[ 0.08407275 -2.66150222 15.14972465 10.03392069 8.79095617
-19.95672912 -8.20363118 8.61863201]
Score值,即決定系數R^2為:
0.5266091889605017
(決定系數R^2
決定系數(coefficient ofdetermination),有的教材上翻譯為判定系數,也稱為擬合優度。
決定系數反應了y的波動有多少百分比能被x的波動所描述,即表征依變數Y的變異中有多少百分比,可由控制的自變數X來解釋。
意義:擬合優度越大,說明x對y的解釋程度越高。自變量對因變量的解釋程度越高,自變量引起的變動占總變動的百分比高。觀察點在回歸直線附近越密集。)
可視化圖像:
② 嶺回歸
由于嶺回歸受參數alpha的影響較大,所以先畫圖分析,選取較好的alpha參數。
上圖能夠看到各個數組的回歸系數隨參數alpha的變化。可以看到,隨著λ的變大,所有回歸系數都縮減到0。
橫坐標選擇:通過觀察,選取喇叭口附近的值,此時各系數取值已趨于穩定,通過觀察嶺跡線大于10次方 各個特征的權重就幾乎為0了,而小于10^-2次方 某些特征的權重的變化幅度就會非常大,很容易出問題,所以猜測,在10^-3次方到10的1次方之間取一個alpha值比較合適。
規定大致范圍后,選取尚不明顯,因此通過枚舉的方式作圖來更加直觀的觀察。
令alpha取各個不同的值,分別帶入嶺回歸求取score,發現alpha在接近10^-2到10這一段score值較為平緩,而后隨著alpha的增大,score逐漸變小,這也與上個回歸系數圖的觀察相吻合,因此選取alpha == 1.
然后借助sklearn函數,帶入訓練測試集,創建嶺回歸。
結果:
b = 3.272111284388725
各列系數:[ 0.07303543 2.41349521 8.20099343 7.32182758 6.69908352 -17.21552799 -4.83336808 10.46067075]
Score值(R^2):0.5189765084864537
擬合圖像顯示:
③ LASSO回歸
與嶺回歸相似的是,lasso也受參數alpha的影響,因此先通過可視化選取適合的alpha值。
首先:
畫出lasso的正則化擬合曲線,觀察到在alpha變化的過程中,通過觀察大于0.1各個特征的權重就已經接近0,小于0.05時,而特征權重變化幅度過大,j極易出問題.因此,初步確定alpha在0.1-0.05這個范圍內。
進一步確定:
將alpha的多個值帶入,求出其score值,通過圖像觀察,發現隨著alpha的增大,score減少,且當alpha的值大于1時,score值幾乎接近于0,因此,選取alpha為0.01,并將參數帶入,求lasso回歸
得出結果:
b = 3.610186708754836
各項系數:[ 0. 0. 9.35199529 9.47261795 0. -8.60890724 0. 17.80445353]
Score值:0.49434794625533063
擬合圖像:
4.編程實現線性回歸和嶺回歸算法
1)實現線性回歸
根據原理,進行編程:
注意:將X,Y轉化為矩陣。
另外,引用了numpy的庫,來實現矩陣運算。
輸出結果:
得到各項系數:[ 0.10762547 5.0079725 15.42687314 12.4400711 8.21075551
-20.84413583 -9.86107619 6.9365935 ]
實現嶺回歸
程序實現:
得出結果:
各項系數:[ 0.1007056 8.83355883 11.08854968 9.39323737 5.66562161
-17.8600036 -5.96550196 9.10760764]
發現分析:
分析:1.由于嶺回歸實質上是一種改良的最小二乘估計法,通過放棄最小二乘法的無偏性,以損失部分信息、降低精度為代價獲得回歸系數更為符合實際、更可靠的回歸方法,對病態數據的擬合要強于最小二乘法。lasso回歸在線性回歸的損失函數的基礎上加上了L1正則化參數,L1正則項是為了使得那些原先處于零(即|w|≈0)附近的參數w往零移動,使得部分參數為零,從而降低模型的復雜度(模型的復雜度由參數決定),從而防止過擬合,提高模型的泛化能力。也因此,訓練集的擬合能力被限制住了.相比普通線性回歸模型確實不容易過擬, 但是卻有可能出現欠擬。因此,在該已經處理過異常值的數據下,普通的線性回歸模型所得到的決定系數要優于犧牲了部分信息降低精度的嶺回歸與lasso回歸。
2.Lasso 的基本思想是在回歸系數的絕對值之和小于一個常數的約束條件下,使殘差平方和最小化,從而能夠產生某些嚴格等于0 的回歸系數,得到可以解釋的模型。所以在lasso回歸中可以看到許多為0的回歸系數。
代碼及數據集下載:
https://github.com/wmj555/-01
總結
以上是生活随笔為你收集整理的使用线性回归,岭回归,Lasso回归预测鲍鱼年龄的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 软件工程之他见——鲍周晓
- 下一篇: 利用决策树算法在鲍鱼数据集上对年龄进行预