QQ登录

只需要一步,快速开始

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

使用 sklearn 进行 LASSO 回归

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

1189

主题

4

听众

2934

积分

该用户从未签到

跳转到指定楼层
1#
发表于 2024-3-15 11:12 |只看该作者 |倒序浏览
|招呼Ta 关注Ta
. l- C9 b  e$ q- d0 M. n
1.导入所需库:1 m" |0 B' P3 v" g' M
; {" b) `" Q$ r% M/ x- v, Y: y7 r# ^% y
   import numpy as np
, j/ G" n& d/ q7 z" v  J   import pandas as pd
; M% {: {; Y3 ]& w1 O# Y- z( [   import matplotlib.pyplot as plt9 s/ L& e9 l- O; c
   from sklearn.linear_model import Lasso, LassoCV  U2 Z0 F3 H. C; _$ U
! k& H! V1 y5 b7 c; c
1 Z; |' [5 m6 c% _" [
2.定义源数据:
' O7 P! }) B0 W, m3 K* O- ~  H& G+ T# }0 f  b/ y6 z: n# C* U
   df = pd.DataFrame({% k4 E0 b. |* R; }8 \  }) _/ D
       'x1': [7, 1, 11, 11, 7, 11, 3],
$ j. R( X+ Q" S       'x2': [26, 29, 56, 31, 52, 55, 71]," P! v  g: R% A  p7 J2 g& H
       'y': [78.5, 74.3, 104.3, 87.6, 95.9, 109.2, 102.7],4 ]! T2 M( A' m
   })
& w  e, U. V2 _3 z; y1 m/ a7 s/ y0 a5 Q2 P0 A
创建了一个包含 x1、x2 和 y 列的 DataFrame,作为原始数据。0 S0 l5 q8 j. z& z- P1 H/ m; e

- [8 X; P/ Z+ n( L9 n* ]" m0 C3.将数据转换为数组格式:
) L/ g/ ^# D) x+ l( Y0 o1 P% g. V
7 ]. k: S) w. Y9 O( T/ ]& E   X = np.array(df[['x1', 'x2']])8 o3 s& O1 g- y, U7 w
   y = np.array(df[['y']])
$ k+ ~# h$ m' b4 T* p% [
3 c+ N) k7 d/ w( d! f# D  p8 N将特征和目标变量分别转换为 NumPy 数组格式。* z5 m; I+ ^* v6 Y. y& k

# {5 E) @$ }: _$ A4.遍历不同的 alpha 值,计算 Lasso 回归模型的拟合结果:9 ?/ L, Q# k9 j  d  r
+ C# r* `9 _+ j8 D5 g9 @; Y
   k_array = np.logspace(-4, 1.5, 100)) P" H+ U" \! Z/ G
   x1_list, x2_list = [], []& z. x3 O! r& {0 I. A9 \3 \
   for k in k_array:7 E) z' _* M# K1 b
       model = Lasso(alpha=k).fit(X, y)
4 P- S! w! ?8 V$ i8 z       x1_list.append(model.coef_[0])
, o6 D" q) n; H       x2_list.append(model.coef_[1])9 H5 ?8 C- |0 B1 C& F9 q

8 }+ D9 f. f9 E# o: B使用 Lasso 回归模型,遍历不同的正则化参数 alpha 值,计算不同 alpha 值下 x1 和 x2 的系数。
" t# b5 }# f" H3 C! }
( I5 u; S5 {* N. m& `# |) y  E5.绘制岭迹图:0 [2 g/ f1 K: l8 x. J$ o
9 H# p( m1 j, u5 j; p  x0 W, m
   plt.scatter(k_array, x1_list)
$ i1 e6 z! q' o   plt.scatter(k_array, x2_list)
$ w8 ]- O4 [5 W* N   plt.plot(k_array, x1_list, label='x1')
6 o1 C2 P9 x. r   plt.plot(k_array, x2_list, label='x2')
+ R% F2 F- o2 q7 ~   plt.legend()4 h; ?* ?( N2 I6 ?& }

# k2 \) @' l2 @使用 plt.scatter() 绘制不同 alpha 值下 x1 和 x2 的系数散点图,并使用 plt.plot() 绘制岭迹图,分别标记了 x1 和 x2 的系数曲线,并添加图例。
  f. O) \2 s2 e7 f- a) I$ N1 T$ w/ U: X  G& N. _
6.使用 LassoCV 自动选择最佳 alpha 值:  c% L) C7 s) s
: `3 m1 R& O' J- x$ R
   model2 = LassoCV().fit(X, y)
" }2 Z# D* X. X
: M4 C9 b+ Z# }+ H& p3 Y% U使用 LassoCV 进行交叉验证,自动选择最佳的正则化参数 alpha。
2 ]' ~% H* [0 \- m3 b$ a; F7 M/ H# u5 l9 N4 }* P, s! [! \" U8 C6 ]5 o
7.输出模型参数和评估结果:3 y" K8 `, b) [& v) W! @$ r' j
" F" g9 u# t+ q9 u) D. C. l
   b0 = model2.intercept_6 \$ ~4 Q, s) N# }2 k6 q
   b1, b2 = model2.coef_[0], model2.coef_[1]
  M+ W7 L6 k) D  A   print('y = {:.4f} + {:.4f}*x1 + {:.4f}*x2'.format(b0, b1, b2))* X& x1 Z/ O+ _( ^' X! E
   print('R_square =', model2.score(X, y))3 N! U: D4 j! O. B
   print('k =', model2.alpha_)
% v: {+ i* N( d% o2 |/ T/ \6 i7 K2 J: [  p; f$ e% C0 D
输出拟合的线性模型的截距、系数以及 R_squared 值,还输出了最佳的正则化参数 alpha。
: w: t$ u& o. G; w7 Z- c, p8 q这段代码通过 Lasso 回归模型拟合了给定的数据,并展示了不同 alpha 值下的系数变化,最后选择了最佳的 alpha 值进行拟合,并输出了拟合结果和评估指标。; Q! J4 a; c  ^! i4 X7 J8 O

: A, V# A* @/ {( ^4 \7 k
$ w& a, s2 n7 {" R$ C6 D2 G1 n
/ X8 \2 H/ ?. R$ g

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 18:31 , Processed in 0.517617 second(s), 55 queries .

回顶部