QQ登录

只需要一步,快速开始

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

使用 sklearn 进行 LASSO 回归

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

1198

主题

4

听众

2977

积分

该用户从未签到

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

  X7 Q! Y7 ?7 t1.导入所需库:3 Q* i$ G) w. x% C' Q, v1 Q6 u
3 m( s8 F: b" z* m
   import numpy as np
& R' R* [* @' _8 u   import pandas as pd/ s! T& y- u* J4 `4 V9 U3 L
   import matplotlib.pyplot as plt- K# M! M9 x. A7 o
   from sklearn.linear_model import Lasso, LassoCV5 [# ?7 b9 n3 _  A3 e
! z* Y8 P, g) @% R8 @6 m3 M

. p* ]& |+ u3 }2 I8 U, E2.定义源数据:
& f4 f/ y0 i3 w# y/ p6 c7 }6 ^$ l
. e2 i0 I. P/ l; e  |% b   df = pd.DataFrame({
& C* d, x! @8 Z) e! _* e       'x1': [7, 1, 11, 11, 7, 11, 3],
' C$ g' ]3 i3 w1 u- z       'x2': [26, 29, 56, 31, 52, 55, 71],
) I& A4 ~$ b: e  k. t       'y': [78.5, 74.3, 104.3, 87.6, 95.9, 109.2, 102.7],
' X0 i# [4 n% G: I   })0 I9 @5 X- U1 i+ V0 Y" m/ C! ]

2 J) w+ q6 b+ c- ]1 z7 [3 b创建了一个包含 x1、x2 和 y 列的 DataFrame,作为原始数据。$ \- i6 {% _6 Z7 L1 J4 z

# J9 k2 r6 q6 R5 a* e# n" ^4 k3.将数据转换为数组格式:
6 K& c  U7 O: n2 A5 R! b1 \. X* w% c7 w4 {+ z. C
   X = np.array(df[['x1', 'x2']]); U6 ~" v* m2 e6 J" p( e
   y = np.array(df[['y']])  P. W9 e  ^, g! ^

! w' Y) A* q7 i将特征和目标变量分别转换为 NumPy 数组格式。9 K! w/ U3 T0 N# L
6 t' }4 Q0 j% L% {% Q
4.遍历不同的 alpha 值,计算 Lasso 回归模型的拟合结果:- ^9 u0 A* Q, m

- r3 ~% _  T! z  X( V. P   k_array = np.logspace(-4, 1.5, 100), s% X3 \0 P* V* `1 f" n; H
   x1_list, x2_list = [], []1 g- d$ m) @2 n6 k. v
   for k in k_array:- U0 D! L$ ]% I
       model = Lasso(alpha=k).fit(X, y)3 B2 W& J/ J# i5 B
       x1_list.append(model.coef_[0])  H9 P7 q3 _. ^8 r+ p( X. t
       x2_list.append(model.coef_[1])
) S, h8 z- {" @1 c* r6 ?( z
4 m  A7 e" A# }" Q使用 Lasso 回归模型,遍历不同的正则化参数 alpha 值,计算不同 alpha 值下 x1 和 x2 的系数。7 l5 M2 ]' g; o/ E
' m, U+ Z7 _5 h& L* ^8 q; L0 q
5.绘制岭迹图:
( X: H4 i3 X- E( m- l3 ?9 }  U
2 E  e& B- G7 b  d8 [  ]   plt.scatter(k_array, x1_list)
* X% q! C( B, d6 W: |7 k1 K   plt.scatter(k_array, x2_list)6 |# ]! x0 c7 Y4 [
   plt.plot(k_array, x1_list, label='x1')9 N+ ]1 I# h7 l4 ~
   plt.plot(k_array, x2_list, label='x2')
1 ]8 W' y- S' x" g- o   plt.legend()7 \7 s+ h8 A, k0 j& M" C
/ a  z8 Y( Y, [! J! y8 i7 D* R
使用 plt.scatter() 绘制不同 alpha 值下 x1 和 x2 的系数散点图,并使用 plt.plot() 绘制岭迹图,分别标记了 x1 和 x2 的系数曲线,并添加图例。
* g" R/ q6 Q% b: K6 ?$ G- i7 \: i; t" ]7 n2 {
6.使用 LassoCV 自动选择最佳 alpha 值:
! i: p9 u0 V4 n( f! O
8 E6 O7 c1 f1 D& s- ?2 L6 d3 }& `   model2 = LassoCV().fit(X, y), Y5 Y7 S0 e' s" B, k2 [2 y

9 m) G, G/ m4 q/ P/ t0 k使用 LassoCV 进行交叉验证,自动选择最佳的正则化参数 alpha。
  `' }4 X' g; k7 w% l1 ^" L% |) L! [* S/ @- b- _& N
7.输出模型参数和评估结果:
( S' m3 a) F2 ]' ^* c$ ?& C
7 l. C1 y1 e$ A0 T$ u9 t; b' R8 ^   b0 = model2.intercept_
1 l+ f- `- ^5 u: }. W$ w   b1, b2 = model2.coef_[0], model2.coef_[1]
# Y7 F$ v- Y8 U8 W2 l0 Q7 m. \   print('y = {:.4f} + {:.4f}*x1 + {:.4f}*x2'.format(b0, b1, b2))# \2 s& p' f- Q
   print('R_square =', model2.score(X, y))
) O) z( Q, t. X4 ~# Q4 ]: u   print('k =', model2.alpha_)7 D4 Z8 ]- s+ U6 E4 d3 x3 |8 w# e

! s- P$ v$ `! H1 C  _输出拟合的线性模型的截距、系数以及 R_squared 值,还输出了最佳的正则化参数 alpha。
. z3 k& F' Y! w4 E8 q这段代码通过 Lasso 回归模型拟合了给定的数据,并展示了不同 alpha 值下的系数变化,最后选择了最佳的 alpha 值进行拟合,并输出了拟合结果和评估指标。3 L' f) v: V1 J# m

) v% |. U0 h4 l. @; x: J; d3 C$ c1 i$ C; R- n2 j* D
! _0 V7 ], T8 C% R

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-9-26 06:46 , Processed in 0.438191 second(s), 55 queries .

回顶部