QQ登录

只需要一步,快速开始

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

使用 sklearn 进行 LASSO 回归

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

1176

主题

4

听众

2887

积分

该用户从未签到

跳转到指定楼层
1#
发表于 2024-3-15 11:12 |只看该作者 |倒序浏览
|招呼Ta 关注Ta
7 I5 M. F1 S1 n* s( }, P2 G) J
1.导入所需库:5 R7 R4 ?/ k. ]
$ ?& k7 V$ F, ~8 d# t
   import numpy as np
3 r" E0 B2 c* \' ^   import pandas as pd+ v/ v+ L' |6 D
   import matplotlib.pyplot as plt. y1 O% h  D$ u! z
   from sklearn.linear_model import Lasso, LassoCV" D+ j1 k7 t' @; s

& T( n' I1 n9 ]
, H2 ]/ ?7 B0 L) w) r% R2.定义源数据:+ V, N% P: ^. L* h' ^

' w, k4 \& U" Q1 @( s' L   df = pd.DataFrame({' [8 a: E/ X3 G8 I3 G1 v
       'x1': [7, 1, 11, 11, 7, 11, 3],, D( e7 p& v' g/ F( E! v* A! H
       'x2': [26, 29, 56, 31, 52, 55, 71],; |0 f9 x" v7 L& U3 t
       'y': [78.5, 74.3, 104.3, 87.6, 95.9, 109.2, 102.7],% D6 Y, X3 N4 @6 h" T9 \4 Q' Z/ m
   }), K! ]  t! B# X. Z9 q1 f) S2 e" w

) M9 B$ k! \2 |创建了一个包含 x1、x2 和 y 列的 DataFrame,作为原始数据。8 V5 F& Z4 c# _' [0 g% C% A1 P
/ X% Z% o9 s0 p4 a& `% ^9 n
3.将数据转换为数组格式:+ @8 R; @1 a) d: @' d

1 T, J  L, J. X5 z   X = np.array(df[['x1', 'x2']]). {" N6 U0 d" r. V) l$ m& n* K
   y = np.array(df[['y']])5 L7 G- r8 u+ A- U- G/ ~) t: Y

; ]) V' c; o% s9 D, E: p将特征和目标变量分别转换为 NumPy 数组格式。
* x7 ?. n' s  f) N) D6 y, K
4 u- }6 s8 V$ l% C. i) H4.遍历不同的 alpha 值,计算 Lasso 回归模型的拟合结果:' g6 _# Q& J4 C6 r7 i: N" m

' P% ]# B+ t" I: ?   k_array = np.logspace(-4, 1.5, 100)9 x" D7 a; D3 i1 `- ]
   x1_list, x2_list = [], []$ h3 U! q$ C' P! o' h9 Y  n2 {, Z  I
   for k in k_array:( U& N( I7 X# L: `1 G1 Y& W% ~
       model = Lasso(alpha=k).fit(X, y)$ w, E1 y  h* K; V8 `0 {
       x1_list.append(model.coef_[0])4 u! \" O- n9 I) ]$ o, }* L7 x* k
       x2_list.append(model.coef_[1])
6 K& I' {2 Q8 i2 u
8 v' l# J: m: s7 S& K3 M+ @. k) O使用 Lasso 回归模型,遍历不同的正则化参数 alpha 值,计算不同 alpha 值下 x1 和 x2 的系数。
$ t3 g% O- A9 s& y
! k$ z2 t7 s" ]4 k1 J5.绘制岭迹图:
/ k& o. s& Q8 M* H: i
. `% p0 s' [9 w. H# Y* o6 A) o   plt.scatter(k_array, x1_list)- T! X! D' o4 T
   plt.scatter(k_array, x2_list)
) _9 k* j* _! i6 {7 B   plt.plot(k_array, x1_list, label='x1')8 D% ?3 R% N/ J. u/ q7 ~: q
   plt.plot(k_array, x2_list, label='x2')
- K& B9 G- ?7 B9 V   plt.legend(); r  q- _0 x/ a$ g

4 a7 \/ S1 P- x/ O0 f. Q! @' Z使用 plt.scatter() 绘制不同 alpha 值下 x1 和 x2 的系数散点图,并使用 plt.plot() 绘制岭迹图,分别标记了 x1 和 x2 的系数曲线,并添加图例。
! z& H" M2 B/ h) B9 K+ ]+ v( d" }  L- d7 ~
6.使用 LassoCV 自动选择最佳 alpha 值:
0 K/ V$ M( a# b8 J& ]
) V6 [0 O' C7 K: T$ b   model2 = LassoCV().fit(X, y)# `/ y% p( ]# I6 ]+ g7 ]; O, I

1 G$ e! j; N) b! l* L  u& h; P使用 LassoCV 进行交叉验证,自动选择最佳的正则化参数 alpha。
- {1 N- t  a8 U/ {7 D! T$ J% S
0 Y9 V+ F! C, T$ A* T+ h7.输出模型参数和评估结果:
+ f5 ?" Z6 W# U) S0 n: l9 l7 d3 g8 C8 `; V
   b0 = model2.intercept_1 O3 z1 `/ N4 t+ q' S) K% C5 T9 V
   b1, b2 = model2.coef_[0], model2.coef_[1]
# e& Q- D0 |7 c" F& b# t   print('y = {:.4f} + {:.4f}*x1 + {:.4f}*x2'.format(b0, b1, b2))7 j! x3 N5 q% y1 i: w7 ?: u9 l
   print('R_square =', model2.score(X, y))
+ v+ K# \( y; T1 G5 J' U% A: W+ d   print('k =', model2.alpha_)
7 M* K& Q( C. {1 ~4 J9 Z
) J* d) u. h# ~, l2 r8 ?输出拟合的线性模型的截距、系数以及 R_squared 值,还输出了最佳的正则化参数 alpha。
; G& R: h* ^# q# Y2 c% _这段代码通过 Lasso 回归模型拟合了给定的数据,并展示了不同 alpha 值下的系数变化,最后选择了最佳的 alpha 值进行拟合,并输出了拟合结果和评估指标。
4 _% p  T( X: u, t* o: {
8 E" K( G0 L/ U7 O! V2 B2 e
& [' r( F, O; g+ `$ Y6 o  U
* L+ J  {' x: P

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-26 01:58 , Processed in 0.621716 second(s), 54 queries .

回顶部