QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 2787|回复: 0
打印 上一主题 下一主题

使用 sklearn 进行 LASSO 回归

[复制链接]
字体大小: 正常 放大

1186

主题

4

听众

2922

积分

该用户从未签到

跳转到指定楼层
1#
发表于 2024-3-15 11:12 |只看该作者 |倒序浏览
|招呼Ta 关注Ta
! Y/ f. H! O' C) ]4 V1 ?/ k/ _: }
1.导入所需库:, @4 e% ~( B) P' Y7 T% [0 M: i6 n5 f

- O4 y3 U3 d$ t( b; L& e% d   import numpy as np# H* G; M3 A7 e% v4 x. G+ H
   import pandas as pd$ ]9 d0 u- j: R- E+ @) q
   import matplotlib.pyplot as plt! z3 d: P( X* ^7 K2 n4 e
   from sklearn.linear_model import Lasso, LassoCV
! b. e: i0 e9 ]: W/ X. V/ ^1 N
1 h% R, D9 @6 r  J5 ^) K8 B2 y, D. B5 N
2.定义源数据:0 V+ l' _* B3 E6 r( V! X
: A' i: ~) p) B8 K
   df = pd.DataFrame({; o' Z3 }) P1 P0 O9 l/ N& b
       'x1': [7, 1, 11, 11, 7, 11, 3],
4 R. u4 Z, w2 j% f% _) z+ ?       'x2': [26, 29, 56, 31, 52, 55, 71],
) o) f) E) K8 m- y$ f) @       'y': [78.5, 74.3, 104.3, 87.6, 95.9, 109.2, 102.7],; _3 ?5 n- X- L% x7 r
   })+ E) t$ M7 c9 ^/ L$ L

8 L7 K% x# T* U/ l* }& |/ J创建了一个包含 x1、x2 和 y 列的 DataFrame,作为原始数据。- e/ ^8 m; v6 f+ c' S

8 X- G: Z( h. g0 n: X$ Y3.将数据转换为数组格式:3 e+ H/ [' d, P9 P7 ~
! K- d# u7 x5 c
   X = np.array(df[['x1', 'x2']])" r+ C! }+ _" I8 a
   y = np.array(df[['y']])
  u- I  o8 ^; ^3 V9 q" @- ]8 M$ Q8 L' C! t0 b# O( U
将特征和目标变量分别转换为 NumPy 数组格式。8 Z7 m1 ]# D* u
/ C2 X9 T6 ~% d. w: D: v5 H$ R5 }
4.遍历不同的 alpha 值,计算 Lasso 回归模型的拟合结果:
! q4 D$ W8 G/ h  R3 J
) N! w/ e* `, Z+ t   k_array = np.logspace(-4, 1.5, 100)# S8 S8 h& G+ I
   x1_list, x2_list = [], []
6 y# R9 C  b5 T1 V! \  b   for k in k_array:
& g8 H# H: X- Y       model = Lasso(alpha=k).fit(X, y)
( y8 z, M8 ], f2 s       x1_list.append(model.coef_[0])6 N9 }; T* E; o8 Y: w4 O: T
       x2_list.append(model.coef_[1])
: G8 ]; T9 H) K/ z: u6 t8 ?$ u8 j4 c$ v$ L/ x
使用 Lasso 回归模型,遍历不同的正则化参数 alpha 值,计算不同 alpha 值下 x1 和 x2 的系数。& L: y/ \& _5 o! d3 U2 W

8 @9 K* Z+ ^/ D" |5.绘制岭迹图:
" u' ?* E; j5 ]( V4 f" M  V
: o0 G! G# |- f4 v! M4 L5 m   plt.scatter(k_array, x1_list)
6 I0 ^+ f: e# \5 K  u   plt.scatter(k_array, x2_list)1 r0 Y, H4 ]3 D) A5 O
   plt.plot(k_array, x1_list, label='x1')
" b% f8 ?2 w: j+ f1 `   plt.plot(k_array, x2_list, label='x2')& _0 J6 I* u$ w9 L) h; D! D
   plt.legend()
6 q0 u* A: j+ V1 z: S2 e: `5 M4 d& B% a
使用 plt.scatter() 绘制不同 alpha 值下 x1 和 x2 的系数散点图,并使用 plt.plot() 绘制岭迹图,分别标记了 x1 和 x2 的系数曲线,并添加图例。  h# l# d# I7 x) E. o0 s2 I- |$ N
$ N# |# Y% g& ?; S5 c+ G) l" O
6.使用 LassoCV 自动选择最佳 alpha 值:
) A7 z1 N1 Q& Y1 E/ Y, P* u
) ^: y( k' F3 D   model2 = LassoCV().fit(X, y)
7 H- X6 p8 D* }0 {; l  ]( ~2 i; k: c, s" A$ A' m
使用 LassoCV 进行交叉验证,自动选择最佳的正则化参数 alpha。6 O5 d5 m! E" W) Q, j7 X

- F; X- p2 `7 ]% |4 k6 q! P! W% F7.输出模型参数和评估结果:
( E- ~( p6 ~; o* B6 p5 F: A6 n& O5 e6 W1 d" B' h  r6 b% |7 @' Z
   b0 = model2.intercept_) S' j) t* z0 H+ i
   b1, b2 = model2.coef_[0], model2.coef_[1]7 ~( E5 M* L' N7 `% ?
   print('y = {:.4f} + {:.4f}*x1 + {:.4f}*x2'.format(b0, b1, b2))
. n' X; L" @8 G( Z+ ?& ^   print('R_square =', model2.score(X, y))
2 t' ?- U1 N* W0 k   print('k =', model2.alpha_)
1 e3 q7 K* R/ h- H6 s* T/ y
) Y/ r( f. c  ?4 e" s输出拟合的线性模型的截距、系数以及 R_squared 值,还输出了最佳的正则化参数 alpha。3 w/ l$ r) w! I
这段代码通过 Lasso 回归模型拟合了给定的数据,并展示了不同 alpha 值下的系数变化,最后选择了最佳的 alpha 值进行拟合,并输出了拟合结果和评估指标。0 B- z4 V8 {% r' r( O# u

6 w5 E2 n* c, g- K/ F6 t9 p6 w9 e* X5 }

5 v6 X$ W  b* l8 h

12.lasso_regression.py

1.16 KB, 下载次数: 0, 下载积分: 体力 -2 点

售价: 2 点体力  [记录]  [购买]

zan
转播转播0 分享淘帖0 分享分享0 收藏收藏0 支持支持0 反对反对0 微信微信
您需要登录后才可以回帖 登录 | 注册地址

qq
收缩
  • 电话咨询

  • 04714969085
fastpost

关于我们| 联系我们| 诚征英才| 对外合作| 产品服务| QQ

手机版|Archiver| |繁體中文 手机客户端  

蒙公网安备 15010502000194号

Powered by Discuz! X2.5   © 2001-2013 数学建模网-数学中国 ( 蒙ICP备14002410号-3 蒙BBS备-0002号 )     论坛法律顾问:王兆丰

GMT+8, 2026-4-15 14:29 , Processed in 0.435973 second(s), 54 queries .

回顶部