QQ登录

只需要一步,快速开始

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

使用 sklearn 进行 LASSO 回归

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

1189

主题

4

听众

2934

积分

该用户从未签到

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

4 o7 f/ k; r& }6 {; i1.导入所需库:
0 U% s" v& Q: u3 V  O8 Y5 m# E9 ~0 y; _4 x- G
   import numpy as np
$ b- x% F( p2 U% l6 q" p0 ~   import pandas as pd
1 w' w3 b4 F4 L! L, s   import matplotlib.pyplot as plt1 j, _0 ~' D( s7 D9 Z1 M
   from sklearn.linear_model import Lasso, LassoCV
/ W9 u' N8 Z* z$ \: ]  r
$ ?/ c2 G) g& {. [
' ?5 E% n* i; j2.定义源数据:
+ u' p$ p" i! G, g% m& K- c' i0 A/ g- Q
   df = pd.DataFrame({9 J! N. r0 ?( B, ?0 l7 B# V* y
       'x1': [7, 1, 11, 11, 7, 11, 3],
; A( ]+ n# X+ ^- s% v       'x2': [26, 29, 56, 31, 52, 55, 71],
( f' k- W) w) j9 w" `) r, N% o       'y': [78.5, 74.3, 104.3, 87.6, 95.9, 109.2, 102.7],
' k2 _4 E' t- u( ]* |7 a# a   })
7 o+ d8 X* c5 m' ?  J* ]  G! a+ y9 R. ]/ E( n4 d
创建了一个包含 x1、x2 和 y 列的 DataFrame,作为原始数据。
7 P5 c, E7 M5 B# r# M
! R* C% W8 K" K3 M$ W" j( J3.将数据转换为数组格式:
) a( C& J; H2 L0 k5 q& q$ [6 p" q( E5 v; v  \9 |6 A  f
   X = np.array(df[['x1', 'x2']])
! m: |  s$ A( t. K% c   y = np.array(df[['y']]). ]  R+ [/ {* c

) a3 Z6 k- F8 I" X5 c/ t将特征和目标变量分别转换为 NumPy 数组格式。# `: f- N" }" x  e2 r# }0 s

) B# R# C. M( ~" X# T; X0 n4.遍历不同的 alpha 值,计算 Lasso 回归模型的拟合结果:
2 l( r0 {: z1 _& k0 L
9 v# I1 d: s" _   k_array = np.logspace(-4, 1.5, 100)8 r, a; m4 ]3 U6 b. q' U
   x1_list, x2_list = [], []
% }' y4 C( g+ w$ i  X   for k in k_array:  }* j5 _2 j' u0 Q: F2 P
       model = Lasso(alpha=k).fit(X, y)6 C4 i: y* |: G' G/ E
       x1_list.append(model.coef_[0])
8 t) t  j0 X7 M& w7 ^1 x; Z$ I       x2_list.append(model.coef_[1])
0 x1 q/ E: m' h9 n- ]5 A9 j# \+ F3 D% M5 p6 U. g7 C
使用 Lasso 回归模型,遍历不同的正则化参数 alpha 值,计算不同 alpha 值下 x1 和 x2 的系数。
& L. P0 |7 t5 ^0 X0 ]! r! W8 ]! V2 ~& K! }  b) T6 j
5.绘制岭迹图:
( ]; ]6 w0 A7 E; w% j
' k. t! j5 y- D   plt.scatter(k_array, x1_list)' S: ?- t4 G: i5 c* _
   plt.scatter(k_array, x2_list)* Y/ e3 k  H& {! O
   plt.plot(k_array, x1_list, label='x1')
) ]( q0 N) g1 t6 W; M# A$ f/ |   plt.plot(k_array, x2_list, label='x2')
3 N3 x6 b, F  G2 S1 A  y+ \( f$ N# t   plt.legend()
$ ~6 s6 M. _1 d. e2 E
: w! u* }6 P; ^7 m! ~/ P使用 plt.scatter() 绘制不同 alpha 值下 x1 和 x2 的系数散点图,并使用 plt.plot() 绘制岭迹图,分别标记了 x1 和 x2 的系数曲线,并添加图例。
" u* P* [) h1 O1 X, t" T. r) k& K/ d
6.使用 LassoCV 自动选择最佳 alpha 值:% P+ _" G: W& `5 J( T$ z
2 Q* h# _+ h( `* F; g- e
   model2 = LassoCV().fit(X, y)
0 f, O3 d0 A: f' Q
0 l+ h8 ~3 u1 C+ z' N9 M使用 LassoCV 进行交叉验证,自动选择最佳的正则化参数 alpha。
& ]7 G/ a  }5 w3 ]9 |* {! F& N( N; z% R' A( I9 s
7.输出模型参数和评估结果:* K' ^" x9 _; T0 e/ s) t; x

; p' G/ g0 d3 p" c% f8 H5 u' z" X   b0 = model2.intercept_; x- r  X/ R# N% ~
   b1, b2 = model2.coef_[0], model2.coef_[1]
3 E+ e. V; x$ l8 k" J" a, k   print('y = {:.4f} + {:.4f}*x1 + {:.4f}*x2'.format(b0, b1, b2))$ _6 u+ c; e0 _3 M& g3 X
   print('R_square =', model2.score(X, y))
; T4 _3 N' C1 g8 i7 I   print('k =', model2.alpha_)
; a  H" _2 Y7 P6 ^9 Q7 j" A) L" g% f* h: }
输出拟合的线性模型的截距、系数以及 R_squared 值,还输出了最佳的正则化参数 alpha。
4 O% y7 D  Z" J8 Z这段代码通过 Lasso 回归模型拟合了给定的数据,并展示了不同 alpha 值下的系数变化,最后选择了最佳的 alpha 值进行拟合,并输出了拟合结果和评估指标。: d0 q+ n) Z8 l- Y+ l
" C  O7 O( ]; T8 Z8 h6 \2 m

" Z& ]5 v  m& L3 p
+ _9 T; {' U/ a) `+ b

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-8-7 21:42 , Processed in 0.445498 second(s), 55 queries .

回顶部