QQ登录

只需要一步,快速开始

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

使用 sklearn 进行 LASSO 回归

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

1189

主题

4

听众

2934

积分

该用户从未签到

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

) F+ D$ ^1 V" Z3 ^1.导入所需库:, F1 Y6 @2 x5 n3 C( q
+ p" P, E" v% S2 g* o0 P( s8 k
   import numpy as np& C' \6 j$ E2 K) x( s& F# i1 n2 y* C
   import pandas as pd
: `/ c+ ~* B8 U; `   import matplotlib.pyplot as plt
9 k9 Q( r! U  K$ O. ~2 E   from sklearn.linear_model import Lasso, LassoCV% z4 @0 N& o* f# p" Z

" p3 v5 S% H1 B8 |5 H* b& C+ T( S8 z9 R: m
2.定义源数据:
$ M/ a( ^: I3 b$ s: k( b' c
4 k" @4 q: Q2 S/ Q2 a   df = pd.DataFrame({
7 ~. S+ T& K- F7 o4 Q5 w6 \% p       'x1': [7, 1, 11, 11, 7, 11, 3],7 {. V( M7 v* K" C4 g* H
       'x2': [26, 29, 56, 31, 52, 55, 71],( N% d0 d" }! f  Y
       'y': [78.5, 74.3, 104.3, 87.6, 95.9, 109.2, 102.7],$ O  ~! U; z: s" Z" ]$ v
   })
, x4 l6 j; R) p( e
" r1 S  g' j- `2 c" T8 O) m创建了一个包含 x1、x2 和 y 列的 DataFrame,作为原始数据。
& L2 W/ _, Q. d1 H( F- X: u5 b3 O. p$ u- S2 v: ]  z1 P
3.将数据转换为数组格式:
' V0 M1 ]" P/ N! ^/ M$ m' Y/ G
5 A+ m& P* j( [) J9 j+ z   X = np.array(df[['x1', 'x2']])
2 t) S* p2 m! T; m   y = np.array(df[['y']])
0 X2 O# e: A4 D4 _6 e$ O
! T0 q4 @) ^1 r7 N0 Q6 L8 m将特征和目标变量分别转换为 NumPy 数组格式。4 b1 ~& D; q& K( D# _: o
$ m# z7 N" n% ]( T1 E2 [
4.遍历不同的 alpha 值,计算 Lasso 回归模型的拟合结果:& G# h- b7 R* u% R, g( L- u7 K
4 E  F3 x# [0 n6 S" u
   k_array = np.logspace(-4, 1.5, 100): g# _' P, P8 k1 f  A  ?
   x1_list, x2_list = [], []4 [4 O$ E% Y4 O% H/ r, r6 [
   for k in k_array:3 `  R/ D9 L9 @  z. c/ g! M
       model = Lasso(alpha=k).fit(X, y)
; h& q% i% n( z3 A: c       x1_list.append(model.coef_[0])- ?) p# h5 f9 `* n  D9 z
       x2_list.append(model.coef_[1])
6 \6 x2 @7 B# {/ ]
$ a% c) t  q& d使用 Lasso 回归模型,遍历不同的正则化参数 alpha 值,计算不同 alpha 值下 x1 和 x2 的系数。# _, W$ c: f6 \$ r4 }

/ r7 \7 |# C5 f, e5.绘制岭迹图:+ d8 q1 n/ C) y3 L# [- ]
6 v' C' P% A1 C+ V
   plt.scatter(k_array, x1_list)
! y( Q9 S( H6 C/ J, F   plt.scatter(k_array, x2_list)! T' H1 ~. |, o, k( b( Z
   plt.plot(k_array, x1_list, label='x1')0 S" v+ G% N7 r2 }% T. m8 N6 q
   plt.plot(k_array, x2_list, label='x2')
2 y! x- R4 w  s) l2 {   plt.legend()
5 b8 M: b" j9 e; g6 g9 b5 J& i, Y2 K5 N4 G, M8 V$ u  t
使用 plt.scatter() 绘制不同 alpha 值下 x1 和 x2 的系数散点图,并使用 plt.plot() 绘制岭迹图,分别标记了 x1 和 x2 的系数曲线,并添加图例。' U/ p  B; T4 D# [( @7 ?& N1 N. x

4 R2 Q" X7 G0 N) k0 b; I6.使用 LassoCV 自动选择最佳 alpha 值:
0 j' d% _5 ^! {( Y: A+ z' ~* U3 H4 _' e7 R1 W9 l- C
   model2 = LassoCV().fit(X, y)9 N9 j$ _4 o& Y& z

9 o0 b1 Q  [7 |0 f3 k7 i使用 LassoCV 进行交叉验证,自动选择最佳的正则化参数 alpha。8 m. o6 y+ c, g; D1 e! K

8 \' k, }: R: `' W' M9 X7.输出模型参数和评估结果:$ o- k0 @; r/ O2 `1 h; H/ R

. o7 W) v+ ^. x8 e; z   b0 = model2.intercept_0 a7 _2 ~: y1 i( J* s9 n2 e2 h
   b1, b2 = model2.coef_[0], model2.coef_[1]
# N$ g5 ]' x! E; A   print('y = {:.4f} + {:.4f}*x1 + {:.4f}*x2'.format(b0, b1, b2))' J- ?9 y9 a6 W$ k
   print('R_square =', model2.score(X, y))
. [& T2 X7 {% H' \9 w   print('k =', model2.alpha_)
9 n, U0 }3 N6 U3 B/ X3 @
0 Y" L/ P' E  b# C输出拟合的线性模型的截距、系数以及 R_squared 值,还输出了最佳的正则化参数 alpha。: [) C! `+ s8 W: E% q* @
这段代码通过 Lasso 回归模型拟合了给定的数据,并展示了不同 alpha 值下的系数变化,最后选择了最佳的 alpha 值进行拟合,并输出了拟合结果和评估指标。& v; }# ~2 ]4 a9 L
1 L8 l. L) q( |) k& s8 [, {# `

8 ]2 Q; f! i& c" O0 ^
2 q! V, B  `# X+ m! Y& A

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-6-20 13:18 , Processed in 0.625137 second(s), 55 queries .

回顶部