QQ登录

只需要一步,快速开始

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

使用 sklearn 进行 LASSO 回归

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

1192

主题

4

听众

2946

积分

该用户从未签到

跳转到指定楼层
1#
发表于 2024-3-15 11:12 |只看该作者 |倒序浏览
|招呼Ta 关注Ta
7 x3 u1 D& C# t( F( ~) G
1.导入所需库:
- x% X, J1 J2 D- ~( j0 B; Q# D# n  m$ I
   import numpy as np+ M/ q: x" Q# `  g
   import pandas as pd1 I) F3 x$ j7 ?; b- S) j6 _/ b
   import matplotlib.pyplot as plt
) _0 W- A- R( p$ H4 q   from sklearn.linear_model import Lasso, LassoCV# |9 L! c& e! O0 h) ?
1 m8 t7 B! r$ V! `5 ?( V
- i7 o% r. V% Z0 j0 E
2.定义源数据:
! ^; {8 e/ o) |; o, n9 j( _" b: D2 L# l! t
   df = pd.DataFrame({
) y' t' h& j  z! f       'x1': [7, 1, 11, 11, 7, 11, 3],
- y) D: }3 B: U% H3 v, r4 x. x       'x2': [26, 29, 56, 31, 52, 55, 71],
2 k1 J6 D) Q. Q) I' Y       'y': [78.5, 74.3, 104.3, 87.6, 95.9, 109.2, 102.7],
  J6 i5 H5 y9 k! l2 T6 @# a   })0 K7 J/ E1 l3 q& _# k1 {' F3 s( [8 f

  M; b$ O$ h3 |  Q: m创建了一个包含 x1、x2 和 y 列的 DataFrame,作为原始数据。4 [, ~) h  T$ u& `
1 @1 @: z1 B* d' V$ S4 p) k
3.将数据转换为数组格式:
- H5 |$ X8 w$ z8 P$ O. x8 Y( ^, T. P# z
   X = np.array(df[['x1', 'x2']]). S9 ?# g( t" ^( D; F' M. S+ z" K
   y = np.array(df[['y']])# a# p6 k  |/ k6 N/ g. c
1 E, R* K: @+ v! t# W
将特征和目标变量分别转换为 NumPy 数组格式。5 z$ o( B4 p. v0 U3 w

/ J& d, m* T4 C$ H% ]& Q4.遍历不同的 alpha 值,计算 Lasso 回归模型的拟合结果:$ e+ A; I) b, c& {9 V+ k0 D& `
- m5 ^4 L% J! Z1 v
   k_array = np.logspace(-4, 1.5, 100)
! Z/ l+ {* m- U4 ]" @3 P, c   x1_list, x2_list = [], []' `, B' ~% V' f, T6 P, S
   for k in k_array:  Z( i( `& X. r: `1 E
       model = Lasso(alpha=k).fit(X, y)
6 e& b1 i4 [. I' H) g       x1_list.append(model.coef_[0])
8 P# b% U6 P6 |       x2_list.append(model.coef_[1])
4 q/ q# B- v8 T8 l) Q  r2 J' @0 |* S$ e0 K
使用 Lasso 回归模型,遍历不同的正则化参数 alpha 值,计算不同 alpha 值下 x1 和 x2 的系数。# T5 G- ~$ v' U/ }2 v  h
: L: R/ ?' z% \
5.绘制岭迹图:
5 W, t! j9 [1 u& \& Q4 u
7 v; D$ j: \  Z1 c9 ?   plt.scatter(k_array, x1_list)
& k, L: p" \$ q9 Z0 h9 x   plt.scatter(k_array, x2_list)7 P. c8 ^' h( d* f' l; w: B2 V
   plt.plot(k_array, x1_list, label='x1')
' z! f8 i! c1 K  H! H  E4 E   plt.plot(k_array, x2_list, label='x2')3 A; Q8 z+ P  A9 Z' C" C
   plt.legend()  h: i. _. e1 k9 \3 K3 Q

* |& {1 U, T, @, D使用 plt.scatter() 绘制不同 alpha 值下 x1 和 x2 的系数散点图,并使用 plt.plot() 绘制岭迹图,分别标记了 x1 和 x2 的系数曲线,并添加图例。
& D( K+ p9 j, D+ J4 U( m
' m# t0 e$ f* O' T& p6.使用 LassoCV 自动选择最佳 alpha 值:
* v' t. J8 ~* z3 o7 T$ A8 [& k& L$ V$ l
   model2 = LassoCV().fit(X, y)
$ v% q3 p1 M5 g3 W% }8 R. @8 M* Z1 M2 V5 g3 ?, @
使用 LassoCV 进行交叉验证,自动选择最佳的正则化参数 alpha。
, q% U( {0 C# w! R* O( n& U$ x( z
7.输出模型参数和评估结果:
% h# c' R1 ?0 {. D, c/ G( e! A4 k4 `8 p6 {
   b0 = model2.intercept_# N8 v+ t/ h, g2 n) a
   b1, b2 = model2.coef_[0], model2.coef_[1]: y8 P6 k  e7 ?; M% X, ^$ {
   print('y = {:.4f} + {:.4f}*x1 + {:.4f}*x2'.format(b0, b1, b2))( w6 k# b* V9 @' S! x! B
   print('R_square =', model2.score(X, y))
5 s% {6 D  M9 c   print('k =', model2.alpha_)
( W% {- E4 ?4 E5 B6 ^
3 w, R. C, l$ i, J输出拟合的线性模型的截距、系数以及 R_squared 值,还输出了最佳的正则化参数 alpha。9 `6 w7 p% N+ D" Q7 A9 D2 R+ Q
这段代码通过 Lasso 回归模型拟合了给定的数据,并展示了不同 alpha 值下的系数变化,最后选择了最佳的 alpha 值进行拟合,并输出了拟合结果和评估指标。
% m" h6 G7 {$ u0 @9 E6 W- ^( I5 M. E9 h1 H8 v& r: A

, P3 ~9 i7 y2 l6 ]5 l; b: ]0 k& p. [  @3 p: [: T

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-8-25 21:02 , Processed in 0.334202 second(s), 55 queries .

回顶部