QQ登录

只需要一步,快速开始

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

使用 sklearn 进行 LASSO 回归

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

1176

主题

4

听众

2887

积分

该用户从未签到

跳转到指定楼层
1#
发表于 2024-3-15 11:12 |只看该作者 |倒序浏览
|招呼Ta 关注Ta

% D8 x9 X3 c/ M1.导入所需库:
. o+ i1 M& T7 x1 Q% ~2 {1 L1 x: p" x( p' `' A, C, N! a& F* x
   import numpy as np* l8 \6 y. |5 H/ M4 d; e! p
   import pandas as pd$ O8 y5 ]' u/ q8 V3 D4 N/ [4 k0 j
   import matplotlib.pyplot as plt; ^5 b8 P% z5 `; y
   from sklearn.linear_model import Lasso, LassoCV
, W7 J* n- y- r$ M( O1 |7 p) a# Y( x  p& _+ i7 r9 a% L

5 @5 S4 m3 u3 A% d, ?+ A2.定义源数据:: P6 y4 z3 o& ?; F# n2 L

2 c. B5 J+ R. Y( D2 W- L3 i* L   df = pd.DataFrame({
. {- P/ p9 i$ x9 h       'x1': [7, 1, 11, 11, 7, 11, 3],
3 g2 C, Q- a2 A. B, t+ J* M       'x2': [26, 29, 56, 31, 52, 55, 71],
/ r8 `* q/ h; }- o. {       'y': [78.5, 74.3, 104.3, 87.6, 95.9, 109.2, 102.7],
: Z& \/ M: |1 @9 S/ K5 `* Z   })
) Y( w* R+ X& |7 R
; s/ c/ U& ^- y5 ?. ?$ U* I创建了一个包含 x1、x2 和 y 列的 DataFrame,作为原始数据。
. @( @/ g" U  ^. j( {- J3 }0 s* N7 I* G) d% d1 p
3.将数据转换为数组格式:4 n! T: ]+ D5 ^$ L8 _

$ q2 R+ x' f) |  n$ g0 {   X = np.array(df[['x1', 'x2']])" f# c4 ?# D/ m1 t* ]' G
   y = np.array(df[['y']])
* O! \, q. y0 a$ B. y& X) m# Y
9 Q8 B- Y  N+ k3 ]& X( S4 g% O将特征和目标变量分别转换为 NumPy 数组格式。. f/ H, h! G3 m( m

1 L1 w, y! E* s3 ^0 z4.遍历不同的 alpha 值,计算 Lasso 回归模型的拟合结果:, r+ f: z( m( C
/ a7 j5 R' i+ l% N1 N
   k_array = np.logspace(-4, 1.5, 100)7 ^7 X6 P/ f, M
   x1_list, x2_list = [], []
4 \# L+ W: p9 R" d$ j2 b# g/ Z   for k in k_array:
/ D1 e* V1 _# `+ C% f( H% `! |       model = Lasso(alpha=k).fit(X, y)+ Z$ F' O3 R5 v7 r
       x1_list.append(model.coef_[0])  |0 Z8 O' n- W; b( F
       x2_list.append(model.coef_[1])
' w. E4 ?9 E* L' I  S% B
4 P' ]* Z! \  W, f# }使用 Lasso 回归模型,遍历不同的正则化参数 alpha 值,计算不同 alpha 值下 x1 和 x2 的系数。
' W3 Y: h& R+ F) l& @' Q  {
9 D+ |* b  b9 T( ~1 N/ V4 j5.绘制岭迹图:
! N' j: g7 ~" I5 S& W) B- }. g2 n7 I4 y: ]+ K
   plt.scatter(k_array, x1_list)3 j  X" p, f% t3 C! }
   plt.scatter(k_array, x2_list)0 n3 @+ q3 E; |  c" J6 X* p1 {
   plt.plot(k_array, x1_list, label='x1')
) A/ u9 k1 e& n. u   plt.plot(k_array, x2_list, label='x2')7 j! j0 U3 B. F' R: D- q
   plt.legend()
0 o9 x4 y: m/ n# @& s4 X
/ T, `$ S$ S" _. C1 ^9 z  Q使用 plt.scatter() 绘制不同 alpha 值下 x1 和 x2 的系数散点图,并使用 plt.plot() 绘制岭迹图,分别标记了 x1 和 x2 的系数曲线,并添加图例。2 _/ d6 Y% a5 h4 {# H% M: r

. A" ^0 p) E% w& ]( n2 J6.使用 LassoCV 自动选择最佳 alpha 值:) p% j# ]* ~" A4 y1 O/ X$ y
. W7 J  D: h+ v
   model2 = LassoCV().fit(X, y)" q/ n+ i/ ?. `

  x$ D. v8 s$ z4 m4 L使用 LassoCV 进行交叉验证,自动选择最佳的正则化参数 alpha。6 p1 Z# f! X" o4 v; @. Q

3 C) \0 Q% l/ z3 g+ w7.输出模型参数和评估结果:$ j! d1 O  u: Z/ q' g

2 h, b7 |  C/ f$ T  P5 @   b0 = model2.intercept_& \/ w1 Y2 r+ e
   b1, b2 = model2.coef_[0], model2.coef_[1]' ~) q$ |" D7 F* v7 i( R& j0 k6 y
   print('y = {:.4f} + {:.4f}*x1 + {:.4f}*x2'.format(b0, b1, b2))" L) e" v* R5 ^7 {& _6 q: r5 b
   print('R_square =', model2.score(X, y))! M  S5 r6 f4 Y
   print('k =', model2.alpha_)
0 a5 P2 O! R! d# @7 T3 A0 C7 u9 j' h: W9 z5 q" T% C# r
输出拟合的线性模型的截距、系数以及 R_squared 值,还输出了最佳的正则化参数 alpha。
6 _; h5 X0 u* s- l这段代码通过 Lasso 回归模型拟合了给定的数据,并展示了不同 alpha 值下的系数变化,最后选择了最佳的 alpha 值进行拟合,并输出了拟合结果和评估指标。
$ ?; W0 x1 v% _/ Q* U, o4 T0 X7 k$ j# s1 Q  H0 E! O' R

: C3 h! Z4 [% @7 l+ |* F8 r! S( ?( [/ g

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, 2025-10-25 15:20 , Processed in 0.472086 second(s), 54 queries .

回顶部