QQ登录

只需要一步,快速开始

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

使用 sklearn 进行 LASSO 回归

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

1186

主题

4

听众

2922

积分

该用户从未签到

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

* s1 ^6 H! T* z: r1.导入所需库:
4 B5 R* k  F  c
9 d) v+ h% ], N0 ^7 }4 O3 I+ r   import numpy as np
/ P. y  v/ d: x* S' R3 Q* h   import pandas as pd
, o3 k" E' `/ Z! K   import matplotlib.pyplot as plt
. v% Y0 {1 J6 w' n) G   from sklearn.linear_model import Lasso, LassoCV
# z* M) \+ [; _6 W* y# R$ r5 H/ k' t9 @' e9 k" @( l) w0 c
1 j+ b9 u& |- a9 ^& R: D
2.定义源数据:; p/ ~3 ]+ @- N% ]( p+ @
6 w7 a" R0 Q7 i: o9 I  T4 }6 `4 S/ }
   df = pd.DataFrame({& h% R; V+ A0 X% n/ n+ I
       'x1': [7, 1, 11, 11, 7, 11, 3],4 o; D9 P' U' s# w& K: N0 G
       'x2': [26, 29, 56, 31, 52, 55, 71],' ^9 t8 A9 ]7 A( G! P/ \, Y6 x
       'y': [78.5, 74.3, 104.3, 87.6, 95.9, 109.2, 102.7]," Q1 ]7 ?9 X- p$ F7 t% l; J6 O
   })( W9 c' J, `. |8 ?, d

# c' b5 ~+ w# R1 h创建了一个包含 x1、x2 和 y 列的 DataFrame,作为原始数据。  ^/ X  P" b6 Y2 u

4 ^% i. y) |( Q. k: A3 j3.将数据转换为数组格式:* v& f3 A7 r8 S
1 t6 y5 X7 \" p* z/ ?
   X = np.array(df[['x1', 'x2']])& [- h4 c# q% p! c/ ^3 e
   y = np.array(df[['y']])
0 W! @5 K3 w1 o6 s' }+ j8 t
# T% y! @, _7 o) }3 p6 f将特征和目标变量分别转换为 NumPy 数组格式。, P- F" o, P: p* l
, t9 D, _5 p, H- q- w4 x4 `% k7 o
4.遍历不同的 alpha 值,计算 Lasso 回归模型的拟合结果:. k3 w* {; {9 f1 d) r

4 p* @! I7 Q6 ?6 ]+ t/ o1 ]8 a   k_array = np.logspace(-4, 1.5, 100)
6 {% i3 }6 k" j0 Y   x1_list, x2_list = [], []5 N& Q* Q$ ~) }  F3 [- S" l# E
   for k in k_array:
+ ?1 p" g1 I& a2 }  v& g       model = Lasso(alpha=k).fit(X, y)
  X/ v$ I* Z  S$ S& |8 L0 _, n       x1_list.append(model.coef_[0])  a+ [3 Q1 n) `. n8 {: |" R8 G
       x2_list.append(model.coef_[1])" m& v1 s, t3 ]

% Q. S3 v) N$ B9 m# p' j3 E" B使用 Lasso 回归模型,遍历不同的正则化参数 alpha 值,计算不同 alpha 值下 x1 和 x2 的系数。0 F$ V  i9 g2 V8 Y1 i: r& g
" \" N( z* i8 m! Y
5.绘制岭迹图:/ x2 i/ {6 t8 ?; u

, I; Z6 `& g7 {) n7 `' D2 E   plt.scatter(k_array, x1_list)! K: H. O  e2 ]1 w# h
   plt.scatter(k_array, x2_list)
. [1 c$ F. k: ~( _' U! l& l   plt.plot(k_array, x1_list, label='x1')% R% F3 S5 m1 H
   plt.plot(k_array, x2_list, label='x2')  A4 U) |8 {! T  _" J. \
   plt.legend()" \- u6 n6 Q* B' |3 i9 ~. G2 Y7 V

. l) F2 Y* _8 c) x1 z4 y使用 plt.scatter() 绘制不同 alpha 值下 x1 和 x2 的系数散点图,并使用 plt.plot() 绘制岭迹图,分别标记了 x1 和 x2 的系数曲线,并添加图例。
6 P( q7 n* w7 V* @
: P) ~; x/ \+ r  m9 Y) T2 B3 |5 E: E6.使用 LassoCV 自动选择最佳 alpha 值:
* ]# j. N+ A, P- X) J4 N( ]+ p4 P1 E, A1 |: M' ]" H5 q% K
   model2 = LassoCV().fit(X, y)
5 x- N' X9 i# ?' ?1 M6 ~6 a* h* E, Q' y
使用 LassoCV 进行交叉验证,自动选择最佳的正则化参数 alpha。
% U: K5 h( `' [7 `2 t3 j9 p  @7 ~( {/ q* b& c- b( P
7.输出模型参数和评估结果:- z0 d) p$ L% _1 Z0 G

8 K$ O" }2 O4 U/ t# R# h   b0 = model2.intercept_
3 M0 n5 |2 b, L* m2 _( L   b1, b2 = model2.coef_[0], model2.coef_[1]
" Z4 H# x" J. V6 r2 Y% ~   print('y = {:.4f} + {:.4f}*x1 + {:.4f}*x2'.format(b0, b1, b2))
* o; }( `+ O9 w* ~# [; v   print('R_square =', model2.score(X, y))/ w# l' z) q: n* L: C$ _  Z( m- G; |% Z
   print('k =', model2.alpha_)
0 k6 u2 z" ?$ C' a& V! z. p7 W. c& ^' A" b7 s0 k+ ?
输出拟合的线性模型的截距、系数以及 R_squared 值,还输出了最佳的正则化参数 alpha。
) b% R: R- v/ g( M1 |) q4 r这段代码通过 Lasso 回归模型拟合了给定的数据,并展示了不同 alpha 值下的系数变化,最后选择了最佳的 alpha 值进行拟合,并输出了拟合结果和评估指标。
" P' g' M" Y2 x* J; {8 B2 l
* d/ _& c7 U# n- c+ s- E9 S( t! y5 X  }( i# T6 E2 v, T/ t% U8 Y
" a/ i5 P: t5 |" e+ r4 m& U$ M

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-15 06:15 , Processed in 0.371875 second(s), 54 queries .

回顶部