線性回歸模型之套索回歸

概述

本案例是基于之前的嶺回歸的案例的。之前案例的完整代碼如下:

import numpy as np
import matplotlib.pyplot as plt
from sklearn.linear_model import Ridge, LinearRegression
from sklearn.datasets import make_regression
from sklearn.model_selection import train_test_split
from sklearn.datasets import load_diabetes
from sklearn.model_selection import learning_curve, KFolddef plot_learning_curve(est, X, y):# 將數據拆分20次用來對模型進行評分training_set_size, train_scores, test_scores = learning_curve(est,X,y,train_sizes=np.linspace(.1, 1, 20),cv=KFold(20, shuffle=True, random_state=1))# 獲取模型名稱estimator_name = est.__class__.__name__# 繪制模型評分line = plt.plot(training_set_size, train_scores.mean(axis=1), "--", label="training " + estimator_name)plt.plot(training_set_size, test_scores.mean(axis=1), "-", label="test " + estimator_name, c=line[0].get_color())plt.xlabel("Training set size")plt.ylabel("Score")plt.ylim(0, 1.1)# 加載數據
data = load_diabetes()
X, y = data.data, data.target# 繪制圖形
plot_learning_curve(Ridge(alpha=1), X, y)
plot_learning_curve(LinearRegression(), X, y)
plt.legend(loc=(0, 1.05), ncol=2, fontsize=11)
plt.show()

輸出結果如下:
在這里插入圖片描述

套索回歸的基本用法

引入套索回歸,還是基于糖尿病數據,進行模型的訓練。

from sklearn.linear_model import Lasso
from sklearn.model_selection import train_test_split
from sklearn.datasets import load_diabetes
import numpy as np# 加載數據
data = load_diabetes()
X, y = data.data, data.target# 切割數據
X_train, X_test, y_train, y_test = train_test_split(X, y, random_state=8)# 使用套索回歸擬合數據
reg = Lasso().fit(X_train, y_train)# 查看結果
print(reg.score(X_train, y_train))
print(reg.score(X_test, y_test))
print(np.sum(reg.coef_ != 0))

輸出結果如下:

0.3624222204154225
0.36561940472905163
3

調整套索回歸的參數

上面的案例中,評分只有0.3,很低,我們可以試試調低alpha的值試試。

from sklearn.linear_model import Lasso
from sklearn.model_selection import train_test_split
from sklearn.datasets import load_diabetes
import numpy as np# 加載數據
data = load_diabetes()
X, y = data.data, data.target# 切割數據
X_train, X_test, y_train, y_test = train_test_split(X, y, random_state=8)# 使用套索回歸擬合數據
reg = Lasso(alpha=0.1, max_iter=100000).fit(X_train, y_train)# 查看結果
print(reg.score(X_train, y_train))
print(reg.score(X_test, y_test))
print(np.sum(reg.coef_ != 0))

輸出如下:

0.5194790915052719
0.4799480078849704
7

可以發現,評分有所增長,10個特征中,這里用到了7個特征。

過擬合問題

如果我們把alpha的值設置得太低,就相當于把正則化的效果去除了,模型就會出現過擬合問題。

比如,我們將alpha設置為0.0001:

from sklearn.linear_model import Lasso
from sklearn.model_selection import train_test_split
from sklearn.datasets import load_diabetes
import numpy as np# 加載數據
data = load_diabetes()
X, y = data.data, data.target# 切割數據
X_train, X_test, y_train, y_test = train_test_split(X, y, random_state=8)# 使用套索回歸擬合數據
reg = Lasso(alpha=0.0001, max_iter=100000).fit(X_train, y_train)# 查看結果
print(reg.score(X_train, y_train))
print(reg.score(X_test, y_test))
print(np.sum(reg.coef_ != 0))

輸出如下:

0.5303797950529495
0.4594491492143349
10

從結果來看,我們用到了全部特征,而且模型在測試集上的分數要稍微低于alpha等于0.1的時候的得分,說明降低alpha的數值會讓模型傾向于出現過擬合的現象。

套索回歸和嶺回歸的對比

我們采用圖像的形式,來對比不同alpha的值的時候,套索回歸和嶺回歸的系數。

from sklearn.linear_model import Lasso
from sklearn.model_selection import train_test_split
from sklearn.datasets import load_diabetes
import numpy as np# 加載數據
data = load_diabetes()
X, y = data.data, data.target# 切割數據
X_train, X_test, y_train, y_test = train_test_split(X, y, random_state=8)# 使用套索回歸擬合數據并繪圖
reg = Lasso(alpha=1, max_iter=100000).fit(X_train, y_train)
plt.plot(reg.coef_, "s", label="Lasso alphat=1")reg = Lasso(alpha=0.11, max_iter=100000).fit(X_train, y_train)
plt.plot(reg.coef_, "^", label="Lasso alphat=0.11")reg = Lasso(alpha=0.0001, max_iter=100000).fit(X_train, y_train)
plt.plot(reg.coef_, "v", label="Lasso alphat=0.0001")reg = Lasso(alpha=0.1, max_iter=100000).fit(X_train, y_train)
plt.plot(reg.coef_, "o", label="Lasso alphat=0.1")plt.legend(ncol=2,loc=(0,1.05))
plt.ylim(-25,25)
plt.xlabel("Coefficient index")
plt.show()

輸出:
在這里插入圖片描述

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

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

相關文章

NegativePrompt:利用心理學通過負面情緒刺激增強大型語言模型

【摘要】大型語言模型 (LLM) 已成為各種應用不可或缺的一部分,從傳統的計算任務到高級人工智能 (AI) 應用。這種廣泛的應用促使社會科學等各個學科對 LLM 進行了廣泛的研究。值得注意的是,研究表明 LLM 具有情商,可以通過積極的情緒刺激進一步…

C++:深入理解多態

一、多態的概念 多態的概念:通俗來說,就是多種形態,具體點就是去完成某個行為,當不同的對象去完成時會產生出不同的狀態。 那究竟多態的實際價值體現在哪里呢?? 1、舉個例子比如說購買高鐵票這個行為&…

Spring Boot | SpringBoot 中 自定義 “用戶授權管理“ : 自定義“用戶訪問控制“、自定義“用戶登錄控制“

目錄: 一、SpringBoot 中 自定義 "用戶授權管理" ( 總體內容介紹 ) :二、 自定義 "用戶訪問控制" ( 通過 "HttpSecurity類" 的 authorizeRequests( )方法來實現 "自定義用戶訪問控制" ) :1.基礎項目文件準備2.實現 "自定義身份認…

4. 分布式鏈路追蹤客戶端工具包Starter設計

前言 本文將從零搭建分布式鏈路追蹤客戶端工具包的Starter,并將在后續文章中逐步豐富支持的場景。這里首先將搭建一個最基礎的Starter,能提供的功能和1. 看完這篇文章我奶奶都懂Opentracing了一文中的示例demo類似。 相關版本依賴如下。 opentracing-…

Scala學習2: 控制結構和函數

目錄 第二章 控制結構和函數1- 條件表達式2- 語句終止3- 塊表達式和賦值4- 輸入和輸出5- 循環6- 高級for循環和for推到式7- 函數8- 默認參數和帶名參數9- 可變參數10- 過程11- 懶值12- 異常end 第二章 控制結構和函數 1- 條件表達式 Scala的 if/esle 語法結構與java一樣, 但是…

MySQL表突然卡死,刪、查操作加載不停解決辦法

今天遇到了MySQL刪表的時候卡死情況。然后通過網上查閱資料和項目組溝通,了解到了有多人同時對同一張表進行了操作。我和另一個同事同時進行了刪除操作,然后另兩位同時進行了查詢操作,然后還有一位同事用dolphin調度,用datax采集數…

【SQL】SQL常見面試題總結(4)

目錄 1、空值處理1.1、統計有未完成狀態的試卷的未完成數和未完成率1.2、0 級用戶高難度試卷的平均用時和平均得分 2、高級條件語句2.1、篩選限定昵稱成就值活躍日期的用戶(較難)2.2、篩選昵稱規則和試卷規則的作答記錄(較難)2.3、…

SmartEDA助力電工基礎實驗:打造高效、智能的學習新體驗

在電工基礎實驗的教學與學習中,傳統的實驗設備往往存在著操作復雜、數據處理繁瑣等問題,給學生的學習帶來了不小的挑戰。然而,隨著科技的不斷發展,一種名為SmartEDA的智能電工實驗輔助設備正逐漸走入課堂,以其高效、智…

Es6-對象新增了哪些擴展?

?🌈個人主頁:前端青山 🔥系列專欄:Javascript篇 🔖人終將被年少不可得之物困其一生 依舊青山,本期給大家帶來Javascript篇專欄內容:Es6-對象新增了哪些擴展? 目錄 一、參數 二、屬性 函數的length屬性 …

Unsupervised Out-of-Distribution Detection with Diffusion Inpainting

Unsupervised Out-of-Distribution Detection with Diffusion Inpainting 摘要1.介紹2 背景3 3. Lift, Map, Detect摘要 無監督的異常分布檢測(OOD)旨在通過僅從未標記的域內數據中學習來識別域外數據。我們提出了一種用于此任務的新方法——提升、映射、檢測(LMD),該方法…

數據結構-棧(帶圖)

目錄 棧的概念 畫圖理解棧 棧的實現 fun.h fun.c main.c 棧的概念 棧(Stack)是一種基本的數據結構,其特點是只允許在同一端進行插入和刪除操作,這一端被稱為棧頂。遵循后進先出(Last In, First Out, LIFO&#…

瀏覽器下載附件流建議

大文件下載可采用附件流的方式,后端設置一下響應參數,然后以流的方式返回前端 res.set({ "Content-Type": "application/octet-stream", "Content-Disposition": "attachment;filename* UTF-8"fixedEncodeUR…

【論文粗讀|arXiv】GaSpCT: Gaussian Splatting for Novel CT Projection View Synthesis

Abstract 本文提出了一種新穎的視圖合成和3D場景表示方法,用于為計算機斷層掃描(CT)生成新的投影視圖。 方法采用了Gaussian Splatting 框架,基于有限的2D圖像投影集,無需運動結構(SfM)方法&am…

CSPM-4是什么?報考條件有哪些?

2021年10月,《國家標準化發展綱要》明確提出構建多層次從業人員培養培訓體系,開展專業人才培養培訓和國家質量基礎設施綜合教育。建立健全人才的職業能力評價和激勵機制。由中國標準化協會(CAS)組織開展的項目管理專業人員能力評價…

Swift 5.9 中 if 與 switch 語句簡潔新語法讓擼碼更帶勁

概覽 在實際代碼開發中,可能初學 Swift 語言的小伙伴們在擼碼時最常用的得數 if 和 switch…case 條件選擇語句了。不過在某些場景下它們顯得略有那么一丟丟“矯揉造作”,還好從 Swift 5.9 開始蘋果知趣的為其簡化了語法且增強了它們的表現力。 在本篇…

Vitis HLS 學習筆記--優化本地存儲器訪問瓶頸

目錄 1. 簡介 2. 代碼解析 2.1 原始代碼 2.2 優化后 2.3 分析優化措施 3. 總結 1. 簡介 在Vitis HLS中,實現II(迭代間隔) 1是提高循環執行效率的關鍵。II1意味著每個時鐘周期都可以開始一個新的迭代,這是最理想的情況&…

Java實現音頻轉文本(語音識別)

在Java中實現音頻轉文本(也稱為語音識別或ASR)通常涉及使用專門的語音識別服務,如Google Cloud Speech-to-Text、IBM Watson Speech to Text、Amazon Transcribe、Microsoft Azure Speech Services,或者一些開源庫如CMU Sphinx。 …

2024年第四屆長三角高校數學建模競賽C題思路

賽道C:汽后配件需求預測問題 在汽后行業的供應鏈管理中, 精準的需求預測是后續管理及決策的基礎。 各個汽后配件即為一個庫存單位(SKU, Stock Keeping Unit), 如果可以準確預知未來對于各個配件的市場需求, 就可以提前將庫存放在靠近需求的倉庫中, 從而降低庫存成本,…

HNCTF ——baby_python

H&NCTF 2024 官方WP (qq.com) OpCodes Pickle.jl (juliahub.com) nc之后 PS D:\ForCode\pythoncode\.idea> nc hnctf.yuanshen.life 33267 # Python 3.10.12 from pickle import loads main b"\x80\x04ctypes\nFunctionType\n(ctypes\nCodeType\n(I1\nI0\nI0\n…

[Linux] 常用服務器命令(持續更新)

文件操作 # 顯示文件系統的磁盤空間使用情況 df -h全局查找文件 find / -type f -iname "java"find / -name libncurses*拷貝整個文件夾 cp -r /home/a/ /home/b/ 解壓,撤銷解壓 撤銷zip解壓 zipinfo -1 path/xx.zip | xargs rm -rf 撤銷tar解壓 tar …