QQ登录

只需要一步,快速开始

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

使用 sklearn 进行 LASSO 回归

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

1186

主题

4

听众

2922

积分

该用户从未签到

跳转到指定楼层
1#
发表于 2024-3-15 11:12 |只看该作者 |倒序浏览
|招呼Ta 关注Ta
! t. d) Y5 Y4 w7 }: \
1.导入所需库:3 j7 m! m. d1 u) h0 I
1 J9 J# r9 W7 @5 j9 _2 ]
   import numpy as np+ y( f9 I6 ?  P+ N& z5 h
   import pandas as pd
# n/ c+ D! z1 j6 Y7 v! p   import matplotlib.pyplot as plt
, f, P! M6 [4 v2 i. I2 k   from sklearn.linear_model import Lasso, LassoCV" n& V( x3 K( ~9 l5 A! f" J/ q
/ {. {( F% L, K; P
, `, M# y$ N' J% F. i, x+ A
2.定义源数据:
& V2 Z3 b( Y! K9 n: [0 q& c
8 D% Q/ ~6 ~- F   df = pd.DataFrame({5 O4 I& t4 i/ X# J6 j9 `- |  ?
       'x1': [7, 1, 11, 11, 7, 11, 3],4 L0 {) U$ e, j
       'x2': [26, 29, 56, 31, 52, 55, 71],
& I3 h9 [9 q( N) X       'y': [78.5, 74.3, 104.3, 87.6, 95.9, 109.2, 102.7],
  j" `& ]( h3 x6 X  b   })
3 A% @5 _' w, O, e0 z
/ E, X3 S+ ]& M创建了一个包含 x1、x2 和 y 列的 DataFrame,作为原始数据。
4 B& x+ f* ?& M
3 @1 E2 ]$ t& q5 H3.将数据转换为数组格式:: o( I+ `8 Z8 F& K! f/ m% n- {: G
* _9 Z/ w6 o* g) q% t* \0 l; G
   X = np.array(df[['x1', 'x2']])& b4 t# n0 b( U7 `
   y = np.array(df[['y']])
- H. q2 K7 W; y) p3 R! Y( W& R  _" F: J9 m) b+ r
将特征和目标变量分别转换为 NumPy 数组格式。+ _' v5 ~- r* h
& U! m3 ^/ j; O/ d& C9 _; n4 Q
4.遍历不同的 alpha 值,计算 Lasso 回归模型的拟合结果:; a  a, a; ?- L" y# u
8 ~" \3 D" i6 l& k
   k_array = np.logspace(-4, 1.5, 100)
0 w# T+ E1 n' y  p! ?   x1_list, x2_list = [], []
$ I+ _% B, P, l0 H. y* g$ v   for k in k_array:
2 ^# ^0 S" v0 i; w5 G! p: n       model = Lasso(alpha=k).fit(X, y)
# `% f  Y" {) f8 n1 m! }( @2 u       x1_list.append(model.coef_[0])) r5 X8 |# B8 D# z: P' L- m
       x2_list.append(model.coef_[1])6 [  i7 h  m: N" C; R

7 J7 p1 I" H3 W* p) X使用 Lasso 回归模型,遍历不同的正则化参数 alpha 值,计算不同 alpha 值下 x1 和 x2 的系数。
* m% T. g3 C5 m/ y: t: ~% J
; L0 v" u* @; s/ b* ]' P, E) u5.绘制岭迹图:
! K1 F1 @8 J. J% y0 g$ A2 X1 ?9 c7 }' C) Q5 x4 l* r
   plt.scatter(k_array, x1_list)
" s" Z: |' G' ~, |: }9 n2 O' i   plt.scatter(k_array, x2_list)  H. j+ F% A, G2 A
   plt.plot(k_array, x1_list, label='x1')" Z( U; l8 ^* a9 Z2 y
   plt.plot(k_array, x2_list, label='x2')) {/ s* N/ c: l. q2 m
   plt.legend()
" V; @4 q" k: X$ |; L5 G/ h
! b, u2 Q5 e- Z4 H' {6 y使用 plt.scatter() 绘制不同 alpha 值下 x1 和 x2 的系数散点图,并使用 plt.plot() 绘制岭迹图,分别标记了 x1 和 x2 的系数曲线,并添加图例。8 G5 `) Q; G4 j, s
3 v, u/ O; E& O7 t) ]* y& r
6.使用 LassoCV 自动选择最佳 alpha 值:" M  D! p) f; @/ b; [9 D
' I4 `% j' b3 R% ~% U; B* m' K. i6 P5 A
   model2 = LassoCV().fit(X, y)
8 d( i  V( Z, L
& o* B7 m) ^$ f) w; {% k2 W使用 LassoCV 进行交叉验证,自动选择最佳的正则化参数 alpha。& U- u0 @0 \! C. {
; ~0 U8 S: W5 l% z
7.输出模型参数和评估结果:
( b; u0 `  f6 \  [3 c
) l5 p9 \! G* H/ M+ y   b0 = model2.intercept_; Z+ p* I# ^4 c3 A9 n7 L" w; M
   b1, b2 = model2.coef_[0], model2.coef_[1]1 V* e6 `7 o4 ]0 v' z$ o2 \
   print('y = {:.4f} + {:.4f}*x1 + {:.4f}*x2'.format(b0, b1, b2))
! H  U/ b, ^$ a% D   print('R_square =', model2.score(X, y))
1 B/ l- D' T' d; [# [5 \   print('k =', model2.alpha_)7 G0 J3 \& x1 g. h
' d6 C* l* }8 Z# H6 t2 y, Z
输出拟合的线性模型的截距、系数以及 R_squared 值,还输出了最佳的正则化参数 alpha。
8 |  ?" f- i; y5 q这段代码通过 Lasso 回归模型拟合了给定的数据,并展示了不同 alpha 值下的系数变化,最后选择了最佳的 alpha 值进行拟合,并输出了拟合结果和评估指标。
: |( k3 D9 W7 C7 q
( d6 l  r$ Z; @  Q# }3 a$ T1 h. b8 i$ x

  F' ]6 x$ F6 K0 J# 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-4-10 13:13 , Processed in 0.359308 second(s), 55 queries .

回顶部