QQ登录

只需要一步,快速开始

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

使用 sklearn 进行 LASSO 回归

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

1189

主题

4

听众

2934

积分

该用户从未签到

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

% T6 U6 f4 ^1 s( V4 ]$ z7 D  {- j1.导入所需库:
: e. C, ~( h# e# G! R7 S- f% k9 h" Q; j; K: y+ S5 k& R& K
   import numpy as np% n( U1 ~* V/ q! G8 b$ a4 I3 @
   import pandas as pd# b% r# d$ }( [7 l2 E
   import matplotlib.pyplot as plt
6 h# p/ D4 ~% C% M   from sklearn.linear_model import Lasso, LassoCV
' w4 j/ h6 T2 D( k. Y
$ a- H4 w) O& p7 W8 W- T. D4 Y2 `7 e7 [+ J% m
2.定义源数据:8 @/ _4 X- c: t1 m3 A2 u1 c9 W

2 q5 R8 n4 r! H6 E6 r4 `  q7 E4 }   df = pd.DataFrame({8 G5 t& s+ e/ t2 g& I! U7 P0 K
       'x1': [7, 1, 11, 11, 7, 11, 3],$ Z* m) J( \# Z2 n$ ?6 V& N# W4 F
       'x2': [26, 29, 56, 31, 52, 55, 71],& m. c* U1 K) I1 g" Z9 ]
       'y': [78.5, 74.3, 104.3, 87.6, 95.9, 109.2, 102.7],
1 }* G  q% m4 k$ m, n: U" v1 p   })
8 G) m3 u, ?1 Q! U- L" g/ i
$ }- I: ]& M8 q; \- }创建了一个包含 x1、x2 和 y 列的 DataFrame,作为原始数据。7 p- m% |1 p, F3 T

8 H- |* O  o2 z% b+ N& V3.将数据转换为数组格式:& }; z8 ?* c( {& [( N6 W: S1 I
2 i" G7 e% n8 E7 C2 K
   X = np.array(df[['x1', 'x2']])
6 J3 z' h/ f' J% o: o   y = np.array(df[['y']])
4 Z3 Q% ]& O/ q" {' j
  J9 H4 K8 Z. }' I6 U; W将特征和目标变量分别转换为 NumPy 数组格式。! F; ]1 z) c) ~5 }

' D1 {- _. i. S9 w# w# h( \4.遍历不同的 alpha 值,计算 Lasso 回归模型的拟合结果:' j8 H+ B' M. N3 d) n) t8 X/ |7 z5 t
- T+ M/ ^# Y1 v  A7 e
   k_array = np.logspace(-4, 1.5, 100)' g2 E/ K7 S' J' a9 |1 K) R
   x1_list, x2_list = [], []
+ m7 c3 ?6 E# O6 U- g6 q: `$ {4 f/ R   for k in k_array:! v, u  r* V6 ^! y; `- x
       model = Lasso(alpha=k).fit(X, y)& f, H4 _& T+ O9 m+ B
       x1_list.append(model.coef_[0])6 S8 Q' e' Z# w! p
       x2_list.append(model.coef_[1])2 n& S, J* Y2 D5 P9 S

5 S4 z% M, u; h2 n  o& B使用 Lasso 回归模型,遍历不同的正则化参数 alpha 值,计算不同 alpha 值下 x1 和 x2 的系数。, c- e" P4 k" b! x

0 D* |, {; ?0 e5.绘制岭迹图:( @9 x& C3 b5 {+ h" S

& R6 N  w% {$ B; J! Z4 }   plt.scatter(k_array, x1_list)
3 T/ X. t3 }1 [   plt.scatter(k_array, x2_list)4 ]: @2 a5 C& W+ g" R! A$ I) U
   plt.plot(k_array, x1_list, label='x1')
8 X* k4 L1 E3 `   plt.plot(k_array, x2_list, label='x2')
1 w& V, Q* X% n# O2 c! [2 B$ D- o   plt.legend()+ Z9 N6 `9 I6 q6 Q9 R7 ~6 \5 f
* M. Z- F" W4 I
使用 plt.scatter() 绘制不同 alpha 值下 x1 和 x2 的系数散点图,并使用 plt.plot() 绘制岭迹图,分别标记了 x1 和 x2 的系数曲线,并添加图例。
3 u; l- d+ s* a  F6 L% e5 ]! Z2 Z4 H3 P# Q+ B% q$ q
6.使用 LassoCV 自动选择最佳 alpha 值:  w- `: m4 E% ]3 `$ A: s6 g2 e
5 o, `7 b" Q3 c4 A1 d
   model2 = LassoCV().fit(X, y)
5 ^$ r# V+ T% }' `. g' O' W6 J
% W8 z% o1 _4 L" p" ?4 u使用 LassoCV 进行交叉验证,自动选择最佳的正则化参数 alpha。
4 d0 M* ~5 O5 Z* {. r# x* c4 g% ]7 R, n& w* C9 i3 N& B
7.输出模型参数和评估结果:0 R! ?7 n1 ^' q) x7 ^

+ ~( L" q+ I' j. M4 f   b0 = model2.intercept_
" Q# i. N8 d  C   b1, b2 = model2.coef_[0], model2.coef_[1]
5 X' h6 b( X/ M8 P; d9 i3 v- N   print('y = {:.4f} + {:.4f}*x1 + {:.4f}*x2'.format(b0, b1, b2)), h  f9 N5 _( j% C9 q
   print('R_square =', model2.score(X, y))0 A# M7 g# B8 k: t5 K
   print('k =', model2.alpha_)) s1 g8 m2 D2 Z1 ?: a5 d

: j- f. M0 Z. R输出拟合的线性模型的截距、系数以及 R_squared 值,还输出了最佳的正则化参数 alpha。
/ C! [* n/ V0 r这段代码通过 Lasso 回归模型拟合了给定的数据,并展示了不同 alpha 值下的系数变化,最后选择了最佳的 alpha 值进行拟合,并输出了拟合结果和评估指标。
: c5 x! X  [6 @
6 Q  S( |% Z" K! s7 m, P$ Q& x0 ]" A/ J1 G9 M2 z

; O7 p: j4 l9 A* {7 N1 `' f3 N) 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-8-8 22:00 , Processed in 0.306749 second(s), 54 queries .

回顶部