QQ登录

只需要一步,快速开始

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

使用 sklearn 进行 LASSO 回归

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

1188

主题

4

听众

2931

积分

该用户从未签到

跳转到指定楼层
1#
发表于 2024-3-15 11:12 |只看该作者 |倒序浏览
|招呼Ta 关注Ta
# M/ L, n* p! p
1.导入所需库:8 {. _( U3 e$ w# T8 d3 R' ~7 i

- q$ Q& c  A9 S5 g! w6 M   import numpy as np
+ x! a* F8 _; M; D+ F8 R   import pandas as pd7 E; w$ G9 R6 ~' g3 T
   import matplotlib.pyplot as plt
( l2 O; z# u' j. |& ]8 d   from sklearn.linear_model import Lasso, LassoCV
$ N! B( M# z# b2 }1 n2 e' U' h) ?! y. ?  o

6 z4 r5 n  _$ h5 m* M  V) m* a0 X2.定义源数据:' C# b2 A4 c2 o& s( [( _
& W( U# p% b+ P& K! n) e$ K
   df = pd.DataFrame({
0 r2 O; ?5 {6 a" ~8 o0 N2 [% k+ a       'x1': [7, 1, 11, 11, 7, 11, 3],
" L' u4 c) d" @! |       'x2': [26, 29, 56, 31, 52, 55, 71],# G) a" Y2 K% w4 K
       'y': [78.5, 74.3, 104.3, 87.6, 95.9, 109.2, 102.7],
" |0 e" P1 c( v   })) L: a. Q. p5 S, z1 N$ g

  D3 z( y# j! N% `创建了一个包含 x1、x2 和 y 列的 DataFrame,作为原始数据。) G' J) [  h2 M. I

" \4 I9 w+ i, Q7 b8 t" w- R; x3.将数据转换为数组格式:& h) C7 d2 r% k6 A

* b) H* m! T" n6 F& j" l   X = np.array(df[['x1', 'x2']])
, H; h0 g/ V( \: g& P   y = np.array(df[['y']])# F0 [5 p' R3 B/ z% x% u. j

5 S+ V2 }' g/ a将特征和目标变量分别转换为 NumPy 数组格式。' t: [7 b; c# F! f% h

. g/ W1 j9 A! _0 E4.遍历不同的 alpha 值,计算 Lasso 回归模型的拟合结果:
  }3 D0 D0 ~0 }% S7 T  k( Q- P+ L
   k_array = np.logspace(-4, 1.5, 100)# W1 M% q; n! h% |5 k" _9 o; t+ c
   x1_list, x2_list = [], []& x6 L2 U6 S. y! |; ?0 v
   for k in k_array:4 `; m2 }( w( Z0 B. D# I% ]) h
       model = Lasso(alpha=k).fit(X, y)1 W5 p7 t: L7 t- F+ ^. R4 k
       x1_list.append(model.coef_[0])2 J1 ~% P) n9 i4 V$ g
       x2_list.append(model.coef_[1])
3 n1 X: H+ [  A3 B8 T. w! E
' `6 v+ i1 t3 M$ m( w1 U1 d" h使用 Lasso 回归模型,遍历不同的正则化参数 alpha 值,计算不同 alpha 值下 x1 和 x2 的系数。
4 Z: B! n; X) V* \. U9 f' i. o( S* \" x9 G: }; g, Z
5.绘制岭迹图:4 G7 |0 |# k1 s6 P" Y* J

& D! y! J# h* s- t6 ~   plt.scatter(k_array, x1_list), x" k/ `0 u) ?7 d
   plt.scatter(k_array, x2_list)
! B& _+ p# {! r   plt.plot(k_array, x1_list, label='x1')
0 W# S: V& b( e& D, ^   plt.plot(k_array, x2_list, label='x2')2 T2 S) N' W6 _- B; H+ g
   plt.legend()& N2 E0 c. C+ _# J7 k4 g. H

0 e( v& C0 Y( `/ X- y! o- w8 \使用 plt.scatter() 绘制不同 alpha 值下 x1 和 x2 的系数散点图,并使用 plt.plot() 绘制岭迹图,分别标记了 x1 和 x2 的系数曲线,并添加图例。# r+ R. N$ t3 r& }- f0 h( [

2 G! ^6 v9 u" B, O6.使用 LassoCV 自动选择最佳 alpha 值:
! h& a1 _4 I% E0 D! b+ c) K/ G& s# w/ E
  Q3 k" t4 ~) n   model2 = LassoCV().fit(X, y)  [, @- p; V- m  `9 d

' d) m: A! e7 v* }2 r0 W4 W使用 LassoCV 进行交叉验证,自动选择最佳的正则化参数 alpha。2 ?  z" N+ ^9 S4 D
5 e$ J, y  v4 g6 T. P3 \2 u5 }
7.输出模型参数和评估结果:1 Y( ~, }" O+ K! i+ ]
4 t( S' j( K! x) |8 b! H9 o1 Y0 p: |
   b0 = model2.intercept_
0 D! {* O6 B* x# G) G% a# i* i   b1, b2 = model2.coef_[0], model2.coef_[1]
1 {+ @! Z& d$ V/ K   print('y = {:.4f} + {:.4f}*x1 + {:.4f}*x2'.format(b0, b1, b2)): f6 B. S! b. s, i! X( ?
   print('R_square =', model2.score(X, y))
: O3 p% \: x- E7 o0 U! M6 }   print('k =', model2.alpha_)8 r2 Z; b! L3 O4 k5 v* f
6 u" U0 v5 F* ]% q0 w5 v
输出拟合的线性模型的截距、系数以及 R_squared 值,还输出了最佳的正则化参数 alpha。
8 \; X  E1 x/ M- a4 o# R3 s  i3 S这段代码通过 Lasso 回归模型拟合了给定的数据,并展示了不同 alpha 值下的系数变化,最后选择了最佳的 alpha 值进行拟合,并输出了拟合结果和评估指标。5 l( k: ?( z; J+ Z: [
/ r9 _8 p5 Z4 ^) @% C$ h4 c

- ~% H4 T7 R( S4 }% K
. `- V0 D  e. q/ e) ^8 c  q8 i

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-5-26 00:17 , Processed in 0.390597 second(s), 55 queries .

回顶部