QQ登录

只需要一步,快速开始

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

使用 sklearn 进行 LASSO 回归

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

1189

主题

4

听众

2934

积分

该用户从未签到

跳转到指定楼层
1#
发表于 2024-3-15 11:12 |只看该作者 |正序浏览
|招呼Ta 关注Ta
& U& c4 T3 D& o: F
1.导入所需库:
) \$ c5 S8 v2 r) {& b* x, J' x9 U' }( r
   import numpy as np: I4 V' w* u% l* c$ J
   import pandas as pd
$ i0 r" H" y. v3 i$ {$ V' i   import matplotlib.pyplot as plt
' p. d. y' ?4 ^$ S6 o9 M   from sklearn.linear_model import Lasso, LassoCV
5 {' x3 C* Q/ w8 e; |" `3 B" W; v  l% d, J) I6 P) S

/ L1 P% t0 W7 s' x2.定义源数据:
2 N( e2 {9 h- l3 L+ U
. [/ F5 l- ?6 Z* g7 N3 ?; t   df = pd.DataFrame({7 [" K" f' H+ m6 G* i# L5 q1 V3 W
       'x1': [7, 1, 11, 11, 7, 11, 3],* V. I6 M* _9 ]& @
       'x2': [26, 29, 56, 31, 52, 55, 71],; y' X; ~4 G7 ?8 |2 t, N
       'y': [78.5, 74.3, 104.3, 87.6, 95.9, 109.2, 102.7],# V2 u' J6 ^, h/ n2 i
   })
6 i* P7 A8 _2 H. C! w& M! v
: B& x! ^' w2 q创建了一个包含 x1、x2 和 y 列的 DataFrame,作为原始数据。$ O- n# J$ \+ E/ w, {8 j1 w

8 b* B* T! b( f. g/ ^5 G/ o3.将数据转换为数组格式:
6 B, B/ e/ G+ L! P( c- @3 @  [: }5 R/ k8 y4 D7 ^( M6 P6 v
   X = np.array(df[['x1', 'x2']])
0 ^8 S6 O4 d9 ?   y = np.array(df[['y']])% d# k+ C- @% w; h

" P! P, E7 R8 ^5 r将特征和目标变量分别转换为 NumPy 数组格式。2 E' l* K: a5 o

) r) ~+ G7 x1 n" U0 d4.遍历不同的 alpha 值,计算 Lasso 回归模型的拟合结果:- }8 i4 ]. w3 n
) @% y# Z0 N% {" M: ]
   k_array = np.logspace(-4, 1.5, 100)
6 Y! Q& y9 r9 Y' k. I+ m2 }: g# c' z& `   x1_list, x2_list = [], []" h: j9 @% Y9 `" Q  r* P0 {
   for k in k_array:
3 ^" i5 {+ h* w( X0 y+ ?       model = Lasso(alpha=k).fit(X, y)
' P7 \, I0 d; q" B* j  P+ Q       x1_list.append(model.coef_[0])
4 m/ }( M% y: S3 Z# l9 E' C       x2_list.append(model.coef_[1])
( D2 O  l9 I1 F% `- c; y+ e+ q+ E2 ^" |7 q; I) E
使用 Lasso 回归模型,遍历不同的正则化参数 alpha 值,计算不同 alpha 值下 x1 和 x2 的系数。
* L( |" `7 j5 g4 }
. ?4 P3 M- O& e: K5.绘制岭迹图:
/ @1 K* M5 d+ r' a8 j4 g% X- J# v) h0 w2 |+ V
   plt.scatter(k_array, x1_list)
9 y$ ^/ e5 w: N+ p. u2 [   plt.scatter(k_array, x2_list)" p* L. r2 j3 N
   plt.plot(k_array, x1_list, label='x1'), Z, D2 P; v$ P6 ~
   plt.plot(k_array, x2_list, label='x2')
# z2 S  Y5 Y0 Q' g: M4 c. L) p# J3 p   plt.legend()
$ T# S* [1 I7 G+ [
* j8 s. m" I0 q0 B( S8 o使用 plt.scatter() 绘制不同 alpha 值下 x1 和 x2 的系数散点图,并使用 plt.plot() 绘制岭迹图,分别标记了 x1 和 x2 的系数曲线,并添加图例。7 Z7 ^, C# r' r8 k( j& m% Y; V

; S6 v6 M' t4 r  l) l0 v6.使用 LassoCV 自动选择最佳 alpha 值:
% t- N8 @/ K3 ~; Q
) J8 a6 r) r& Z. V' C   model2 = LassoCV().fit(X, y)
" p5 g$ ]$ Z5 k( [7 D( n2 L, q( H9 B6 N, U0 c) H6 @
使用 LassoCV 进行交叉验证,自动选择最佳的正则化参数 alpha。2 V. f0 J  G" J2 v, l$ s

# S8 b! f8 L( a9 m' @% ?5 }( _- w  a7.输出模型参数和评估结果:
; d  y# f# k6 I( ^
9 ~* Z& g$ X% W1 }% Z   b0 = model2.intercept_
0 {2 _2 q( l% s+ ~* Y   b1, b2 = model2.coef_[0], model2.coef_[1]
" l+ S9 T2 N. x) Q5 j   print('y = {:.4f} + {:.4f}*x1 + {:.4f}*x2'.format(b0, b1, b2))
4 _7 B  _! K# ?3 k5 Q   print('R_square =', model2.score(X, y))) `/ t! K) a# z0 b
   print('k =', model2.alpha_)& y8 G' Z6 a5 p2 ^
* V! \( n: I3 V( d: P) ^
输出拟合的线性模型的截距、系数以及 R_squared 值,还输出了最佳的正则化参数 alpha。
! f( T3 O, Z% C. {; ~这段代码通过 Lasso 回归模型拟合了给定的数据,并展示了不同 alpha 值下的系数变化,最后选择了最佳的 alpha 值进行拟合,并输出了拟合结果和评估指标。( K2 I" s, `8 ?* E7 d; |# g
; E# {( j. k: c! r. `0 c

5 q+ N. k' h2 \' H5 A: Q6 `
0 v/ H) Q8 [, o/ P

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-7 19:15 , Processed in 0.458934 second(s), 56 queries .

回顶部