QQ登录

只需要一步,快速开始

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

使用 sklearn 进行 LASSO 回归

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

1186

主题

4

听众

2922

积分

该用户从未签到

跳转到指定楼层
1#
发表于 2024-3-15 11:12 |只看该作者 |倒序浏览
|招呼Ta 关注Ta
/ N! a3 P0 [% t  u1 S
1.导入所需库:' D' n# }+ \- s% f* J' H; i( S
4 l/ _& }+ n/ Y# g' Y! Y0 b
   import numpy as np7 K$ E, T& F5 t
   import pandas as pd
" l" _4 p* b' a9 E. O+ H4 O   import matplotlib.pyplot as plt  l  V  L1 H4 d7 m
   from sklearn.linear_model import Lasso, LassoCV. w* Z/ W2 _% p+ B
5 t' f' O6 {( g4 v" b7 ~

; V7 C4 ]3 L" o' X4 H; A3 X2.定义源数据:1 H) o4 O4 R0 b! u+ y: N. I
7 \1 d5 `7 \* s1 ~+ E/ ?
   df = pd.DataFrame({& d- C- d+ ?8 B! u' l$ m
       'x1': [7, 1, 11, 11, 7, 11, 3],$ ]! m5 q2 i% L! P: o9 }- ]
       'x2': [26, 29, 56, 31, 52, 55, 71],& w) E( G) {! m. t# `, |
       'y': [78.5, 74.3, 104.3, 87.6, 95.9, 109.2, 102.7],7 L1 W9 m& R. p
   })
1 M+ \- k/ O( ~+ i' I0 e
6 {: c* W# X) o6 W9 ~3 H创建了一个包含 x1、x2 和 y 列的 DataFrame,作为原始数据。
$ ?7 u0 z0 c/ y7 J
$ w3 H4 C0 Q. q& G! U  A) z, j- p# B3.将数据转换为数组格式:
7 F2 F/ {2 S; l0 G$ v) j
3 o  q$ i9 G, B: ~$ N) v+ a   X = np.array(df[['x1', 'x2']])# m3 ~9 z3 f" R: Q% [# k
   y = np.array(df[['y']])
, O; \7 A$ i5 e$ A
, ?$ H# U2 A" z. y$ V; L将特征和目标变量分别转换为 NumPy 数组格式。0 ]1 U7 O) |8 }7 d3 Q# h

$ ~6 c, Q2 @7 R# b1 l4.遍历不同的 alpha 值,计算 Lasso 回归模型的拟合结果:2 r0 M. r# e  a$ ~) _1 z" Z; `% w
6 N+ l" m, D0 X0 A' Y" Q' ~
   k_array = np.logspace(-4, 1.5, 100)
- u- ?. l) y2 r. J   x1_list, x2_list = [], []7 d2 H5 b, F5 j/ j7 a# M# w
   for k in k_array:! y7 ?  m, ?! }4 F) f7 d5 E9 f
       model = Lasso(alpha=k).fit(X, y)" ~6 O7 a. Y+ m' @  D$ W5 X+ O0 W
       x1_list.append(model.coef_[0])
0 @& h! M5 M0 S- \3 Z1 ?$ Z- v       x2_list.append(model.coef_[1]), M. n$ W% `( o& `/ @6 `3 @  ?, S
5 w# E( T$ a6 D* y: Y5 y2 Z
使用 Lasso 回归模型,遍历不同的正则化参数 alpha 值,计算不同 alpha 值下 x1 和 x2 的系数。: q; j' l6 S3 V  f# X
; `) ^; d& [+ k- e7 t( |( }, Z' q3 E0 l
5.绘制岭迹图:
' B9 [: Z3 ]+ p; _1 k
: J! U; z, \/ w   plt.scatter(k_array, x1_list)
  q$ ]8 v& v& B! M9 _   plt.scatter(k_array, x2_list)
7 k% N; I  i% {" U  m/ s( w   plt.plot(k_array, x1_list, label='x1')
' S0 i  ^. D+ O$ i  v. r   plt.plot(k_array, x2_list, label='x2')" c! o2 C. Q% X& f
   plt.legend()
' C3 T$ U. d: l5 ^$ {4 ~# q( \$ A6 @( Y! `. r$ L- l! @/ m# }# P1 M
使用 plt.scatter() 绘制不同 alpha 值下 x1 和 x2 的系数散点图,并使用 plt.plot() 绘制岭迹图,分别标记了 x1 和 x2 的系数曲线,并添加图例。
7 j6 z/ V" }  A8 x* ^( m' V8 l7 n' b6 K# {4 j, m2 Y" ?7 g1 S
6.使用 LassoCV 自动选择最佳 alpha 值:* k1 b0 M+ e" B- u& J: W9 w

3 j: \: ^" T; X7 j   model2 = LassoCV().fit(X, y)1 n% D% [. w  D8 a
3 E$ l. S6 C8 w& u7 Q+ p: u: V
使用 LassoCV 进行交叉验证,自动选择最佳的正则化参数 alpha。) s9 k) y" r6 M5 g
1 M, q3 M9 k" c& n
7.输出模型参数和评估结果:
) S# O6 P$ r0 p2 {% Z
) o: j4 ]+ y8 |* B   b0 = model2.intercept_( W+ X* {) X2 b9 d* @
   b1, b2 = model2.coef_[0], model2.coef_[1]
: O. I7 W- c+ s& U1 ~) F" f: W4 i   print('y = {:.4f} + {:.4f}*x1 + {:.4f}*x2'.format(b0, b1, b2))
7 E0 [, s8 A$ _8 d0 w   print('R_square =', model2.score(X, y))
$ f& c  u9 ]8 ~# |   print('k =', model2.alpha_). e4 V& W7 e, V5 |* V/ N5 a4 N
2 T; g7 [. |% U+ I* H3 _3 d2 y! w
输出拟合的线性模型的截距、系数以及 R_squared 值,还输出了最佳的正则化参数 alpha。+ _" m, C. B- ^! p- Y
这段代码通过 Lasso 回归模型拟合了给定的数据,并展示了不同 alpha 值下的系数变化,最后选择了最佳的 alpha 值进行拟合,并输出了拟合结果和评估指标。
; I" X. I* b8 b/ v! U0 M' @# ?2 l7 k* ^5 |, U5 B
* D0 H3 O6 l0 u
, i1 c6 d2 g! X# Q/ N3 x. U

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-14 18:17 , Processed in 0.385795 second(s), 55 queries .

回顶部