QQ登录

只需要一步,快速开始

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

使用 sklearn 进行 LASSO 回归

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

1198

主题

4

听众

2978

积分

该用户从未签到

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

( n  _3 T/ @0 t7 C0 p1.导入所需库:
! V) L6 U, _* m* S5 ?* S% R: S( Z4 {( V4 P  Q
   import numpy as np
4 m: Q$ e+ t# w5 Y7 y" I   import pandas as pd
9 r/ U8 F" C. Q   import matplotlib.pyplot as plt
4 o* p4 V( v6 o. ]9 ^   from sklearn.linear_model import Lasso, LassoCV
+ _; z' a2 O, m' ^
5 d% B0 [5 J$ ?0 o; z
9 ]# d! P1 M! ~2.定义源数据:
5 F8 ]4 j5 L0 b. T
, a# F" T- w4 w8 L* O( h2 W( @   df = pd.DataFrame({. w4 ?4 K- X" V! d: y+ s  k
       'x1': [7, 1, 11, 11, 7, 11, 3],0 N/ i9 b' n, m
       'x2': [26, 29, 56, 31, 52, 55, 71],
9 q2 b  S4 \+ q       'y': [78.5, 74.3, 104.3, 87.6, 95.9, 109.2, 102.7],
* k1 O. I+ V4 [, i; X  }, K   })+ Q, w# D0 u2 {$ l/ }

9 O- M2 L  o8 b( [9 X. z( G创建了一个包含 x1、x2 和 y 列的 DataFrame,作为原始数据。# j3 c$ H7 W5 I8 h7 C# J( h; Z* ?

0 I0 s$ N" D# w; o( p# }3.将数据转换为数组格式:1 o1 K3 F( \" B4 u

! I$ o( C) q7 ?4 }5 P   X = np.array(df[['x1', 'x2']])
1 ^0 I" M& N- s9 G0 r$ X- a   y = np.array(df[['y']])
, G8 i( a5 F' K# u$ T, ?
. ]3 O0 R' N$ p9 n: l" `" L( p将特征和目标变量分别转换为 NumPy 数组格式。
; q: O" G0 W  l% C) ]1 y
0 d$ ^1 s6 k' p+ b4.遍历不同的 alpha 值,计算 Lasso 回归模型的拟合结果:5 E* ]) ?+ z$ P% H* `
  H* B% A! ~: y' f$ x% N" @4 J. I3 }
   k_array = np.logspace(-4, 1.5, 100); h8 |% y5 B( f% [- R( y/ H
   x1_list, x2_list = [], []: |; }0 d. t' ~+ c5 F# ]  v- L
   for k in k_array:$ b- |9 w# H4 a( X% G8 I/ T2 i
       model = Lasso(alpha=k).fit(X, y). t; _" k; Z9 O& m) V: C
       x1_list.append(model.coef_[0])
0 ~9 c  u7 y& d4 w  W. w- U9 F. ]+ ]* [       x2_list.append(model.coef_[1]), S& p# K1 t4 ]5 j1 M% l! q, W8 l* |

9 N7 j2 n/ Q) i8 x9 k使用 Lasso 回归模型,遍历不同的正则化参数 alpha 值,计算不同 alpha 值下 x1 和 x2 的系数。# P. e# L, K1 ]5 m

- Q% V: D( g% X  S) ~, |5.绘制岭迹图:
# Q8 J$ D# b6 W8 d/ Q% Z3 x. C1 `: M
   plt.scatter(k_array, x1_list)
  i0 \6 O( z$ g$ U   plt.scatter(k_array, x2_list)" J* X; F1 n+ {: z% ?& h
   plt.plot(k_array, x1_list, label='x1')
9 L6 a. k4 S  G6 \8 L( }4 x' S   plt.plot(k_array, x2_list, label='x2')! W5 ]5 b8 _$ L
   plt.legend()
) u0 ~) `  i* `6 P/ a( J! J6 l( E9 u  K' l% l. P3 [% A
使用 plt.scatter() 绘制不同 alpha 值下 x1 和 x2 的系数散点图,并使用 plt.plot() 绘制岭迹图,分别标记了 x1 和 x2 的系数曲线,并添加图例。3 |  S7 b9 f  i9 _8 e3 N6 x5 _# o

- E: m" z7 P- ~0 C0 H4 R9 j6.使用 LassoCV 自动选择最佳 alpha 值:1 a, l" }* }# l) e2 @  g

+ V% W9 a5 S  [   model2 = LassoCV().fit(X, y)
. K; R/ A! ?7 l2 y; v( ]! ~) Z  p* {- g1 T% W
使用 LassoCV 进行交叉验证,自动选择最佳的正则化参数 alpha。
& q" g# k7 w* w% h" h
* k9 R# O! ]/ c7.输出模型参数和评估结果:# I3 d# T, `0 \3 o7 m& K
: y2 D% t4 M; i. u4 v
   b0 = model2.intercept_
" V5 R5 z, @! ?  p7 `  p   b1, b2 = model2.coef_[0], model2.coef_[1]3 S! a  U3 h+ v9 B$ m
   print('y = {:.4f} + {:.4f}*x1 + {:.4f}*x2'.format(b0, b1, b2))
& Z1 ?8 Z, C- t5 h' G' f  t   print('R_square =', model2.score(X, y))
0 {8 c( |5 ?5 y3 F/ l  @/ H8 z   print('k =', model2.alpha_)
4 }, [! a9 \6 J
4 }- v/ A5 i8 D输出拟合的线性模型的截距、系数以及 R_squared 值,还输出了最佳的正则化参数 alpha。
- H, m5 B. H5 }8 D0 `这段代码通过 Lasso 回归模型拟合了给定的数据,并展示了不同 alpha 值下的系数变化,最后选择了最佳的 alpha 值进行拟合,并输出了拟合结果和评估指标。
0 z3 \; N  A4 s$ l
' A6 h2 G" {# |( L3 z3 d
! g( i6 A% ^" d* z; x
1 [! X: h, z: }2 X

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-10-12 01:25 , Processed in 1.160143 second(s), 55 queries .

回顶部