QQ登录

只需要一步,快速开始

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

使用 sklearn 进行 LASSO 回归

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

1189

主题

4

听众

2934

积分

该用户从未签到

跳转到指定楼层
1#
发表于 2024-3-15 11:12 |只看该作者 |倒序浏览
|招呼Ta 关注Ta
# }( W- W; h4 @& U' i2 Z
1.导入所需库:
% A$ n; J+ H6 v9 A( }+ S) l+ E/ X7 x$ Y2 {$ H4 Y3 K8 q
   import numpy as np
4 g. B$ @. ]9 S  t4 A' V% r   import pandas as pd
+ P8 q% n8 b# e; |, f   import matplotlib.pyplot as plt4 t! B3 O  b; y* ^
   from sklearn.linear_model import Lasso, LassoCV
9 I3 ?3 s  _) U5 P
- W$ a/ o) D# Q7 C
4 L" n) ^8 v6 [1 i' W2.定义源数据:) y: \9 {7 j, p8 p! h0 J
7 I! _5 s1 Z4 J2 F
   df = pd.DataFrame({
6 V% C, z- A. a- o       'x1': [7, 1, 11, 11, 7, 11, 3],# T( A) |9 X6 ~8 w! Y
       'x2': [26, 29, 56, 31, 52, 55, 71],/ n  @1 V- D- y
       'y': [78.5, 74.3, 104.3, 87.6, 95.9, 109.2, 102.7]," J/ e1 t3 E: }7 ?3 \1 _5 \0 k
   })+ I/ @) N$ L* \" Q! N

0 F$ u& W+ A( E0 A创建了一个包含 x1、x2 和 y 列的 DataFrame,作为原始数据。1 T, n) r5 B* l! K4 G; e0 c

; x$ j. ]- D/ Z( [3.将数据转换为数组格式:1 v* l9 L0 n) d+ P, e  `3 u: |

  a1 n$ ?- s4 j( b5 I   X = np.array(df[['x1', 'x2']])
' ]" N' Q/ Y! k. r   y = np.array(df[['y']])
. x+ X- ^, T; J0 p+ o0 a, m! }7 X: m6 E7 _
将特征和目标变量分别转换为 NumPy 数组格式。9 I. v5 S* H0 n- W( J) {
3 f0 C/ U" e5 B. R
4.遍历不同的 alpha 值,计算 Lasso 回归模型的拟合结果:
6 @2 L' f8 U; w
& f  \- P3 a( R+ P   k_array = np.logspace(-4, 1.5, 100)
9 S% r* X: K! q! [   x1_list, x2_list = [], []; G; E& J7 v/ i9 T  c
   for k in k_array:/ Q% V' h, X/ d% J' d0 v
       model = Lasso(alpha=k).fit(X, y)" d. [' P# v5 t- h# H$ z
       x1_list.append(model.coef_[0]), P) B) ?! N. W5 B7 Z5 n
       x2_list.append(model.coef_[1])
! R& L! e- P. Z+ X) g" M' K1 v  G7 B% v' o$ L3 |2 f
使用 Lasso 回归模型,遍历不同的正则化参数 alpha 值,计算不同 alpha 值下 x1 和 x2 的系数。4 K, `! f5 V% q9 ]; `
) x& I# U. e3 F$ ?: I- ?8 j
5.绘制岭迹图:/ Z0 ^  ^4 ?3 W; T: f
2 [$ F. [. I% R0 ^% R
   plt.scatter(k_array, x1_list)
; b8 M/ b( S& T+ M  ]   plt.scatter(k_array, x2_list)
2 t4 Q) I3 W& ~; V8 M! i   plt.plot(k_array, x1_list, label='x1')
, Z8 P* d: \( y3 K" G   plt.plot(k_array, x2_list, label='x2')
3 [. Z+ B( _* q   plt.legend()
5 y5 a7 h: L% N# j6 B
9 s! d) t$ z# T. q2 W  W使用 plt.scatter() 绘制不同 alpha 值下 x1 和 x2 的系数散点图,并使用 plt.plot() 绘制岭迹图,分别标记了 x1 和 x2 的系数曲线,并添加图例。
; Q1 U' A  D3 ^& q: T* k, L" X# c2 Q2 R
6.使用 LassoCV 自动选择最佳 alpha 值:% r6 d" ~- w8 L, Z/ S. q% u9 v( f0 N
- `! j$ q* i8 C. K
   model2 = LassoCV().fit(X, y)& m# i9 ?& m9 |" ]1 C4 \/ F

0 T3 z) S  M+ P: }) \  m; u; Y) L1 [使用 LassoCV 进行交叉验证,自动选择最佳的正则化参数 alpha。
2 s5 K' @) O, }
/ [/ T1 ]6 ?, y5 _9 R7.输出模型参数和评估结果:" _# ~5 V9 Y' v0 P6 j+ T8 j2 c

+ o% H) C7 T; y   b0 = model2.intercept_
" c1 X6 g+ ]/ \* E   b1, b2 = model2.coef_[0], model2.coef_[1]
4 Q2 u! D/ X+ Q. D1 s   print('y = {:.4f} + {:.4f}*x1 + {:.4f}*x2'.format(b0, b1, b2))- B% W2 x8 i& l
   print('R_square =', model2.score(X, y))
- [2 q* G: X. C* F" g% C   print('k =', model2.alpha_)4 C. Q9 P1 l0 P: |3 j
& x& T- `2 G( D4 M' P! o% J& Y9 ~
输出拟合的线性模型的截距、系数以及 R_squared 值,还输出了最佳的正则化参数 alpha。* H! W! J. [! h$ r8 ?+ g
这段代码通过 Lasso 回归模型拟合了给定的数据,并展示了不同 alpha 值下的系数变化,最后选择了最佳的 alpha 值进行拟合,并输出了拟合结果和评估指标。
/ N. H% Q' @8 k4 M) o  b$ K
6 T9 n& g3 q; U( R; L- F- n: k, i
7 S9 {5 l  Y" X& J: u  [0 L; s
2 K9 b. H/ Y5 P0 S

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-7-10 09:26 , Processed in 0.313511 second(s), 55 queries .

回顶部