QQ登录

只需要一步,快速开始

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

使用 sklearn 进行 LASSO 回归

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

1192

主题

4

听众

2946

积分

该用户从未签到

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

/ `1 Q7 t( c# e1.导入所需库:1 L& F. b, m5 T* y

# n+ [# A4 A) k& w- o   import numpy as np2 U' c/ w8 E3 h7 G, `5 B4 z! E
   import pandas as pd/ U8 ^* b# \& C. k6 E& C
   import matplotlib.pyplot as plt
; B4 T" q# g+ [( C6 m   from sklearn.linear_model import Lasso, LassoCV
( {3 p$ C, i5 |/ Q  \# t5 F2 U
9 j4 w# m/ h0 d5 V  A2 _6 L) M* k; b) v  i
2.定义源数据:2 I* x" \7 c- I
" f" @& ]7 W6 Q* v
   df = pd.DataFrame({
8 r' D! }# E% S       'x1': [7, 1, 11, 11, 7, 11, 3],
, t# j: k8 Y% T& I, \3 w       'x2': [26, 29, 56, 31, 52, 55, 71],' I. M; l3 U' f! n
       'y': [78.5, 74.3, 104.3, 87.6, 95.9, 109.2, 102.7],+ n$ r5 U/ R) I) N
   })# Z7 J! a. V2 z2 \# g& z

5 O. c9 b' L) w0 d创建了一个包含 x1、x2 和 y 列的 DataFrame,作为原始数据。  w1 L0 N6 d$ M2 q
. f: {5 L' p  ~7 Y% \9 [- D( a4 s
3.将数据转换为数组格式:1 Z8 ]3 C& p; q* W# O& e* X

# ^# y7 a' |- v( G, u   X = np.array(df[['x1', 'x2']])
. |$ P! c- k" r5 M. Y- \# T   y = np.array(df[['y']])
1 {$ w5 k! ^- m! @
9 |* E1 ]# ?( j2 c" o6 b4 `/ e将特征和目标变量分别转换为 NumPy 数组格式。
5 U. s- x$ \4 U" n& ~- w5 F, n
1 G- L' F$ G0 D' l4.遍历不同的 alpha 值,计算 Lasso 回归模型的拟合结果:
7 a5 I; j2 Z$ U0 I
- X! r/ {, k9 ?8 H8 i   k_array = np.logspace(-4, 1.5, 100)
& G9 l# \% K0 a: K5 b   x1_list, x2_list = [], []& W1 J) \8 v3 n) b+ Z* `$ q
   for k in k_array:
( e+ l& K9 Y; j+ y( }: N# o       model = Lasso(alpha=k).fit(X, y)! g/ B* ~& s1 f# M% B  z
       x1_list.append(model.coef_[0])
" o# ?- r8 P9 l1 X- w       x2_list.append(model.coef_[1])
+ R! Q+ k  n- R/ A' \; W/ f
5 `4 ]4 ?" |! S) H* l6 D使用 Lasso 回归模型,遍历不同的正则化参数 alpha 值,计算不同 alpha 值下 x1 和 x2 的系数。
7 J+ g0 U* b& s9 m
8 m' y" H8 E# ~! Z; E, X5.绘制岭迹图:
* E9 q: a5 h2 }/ u- r, |/ y8 G! N- ~# m* F/ B
   plt.scatter(k_array, x1_list)' v  }( L3 V# B4 F$ L! r2 [
   plt.scatter(k_array, x2_list)
. \/ ]1 K8 V' m6 y) y3 [7 r0 x   plt.plot(k_array, x1_list, label='x1')4 n, h9 l% f* }% ]1 f- y8 {) e
   plt.plot(k_array, x2_list, label='x2')
  k$ k5 ^% u  P& W' h. H   plt.legend()
% R; P; ~3 C( N* W7 Y$ e; [& T" B
: g& g, T% y1 c# G2 [% |  v. k2 a使用 plt.scatter() 绘制不同 alpha 值下 x1 和 x2 的系数散点图,并使用 plt.plot() 绘制岭迹图,分别标记了 x1 和 x2 的系数曲线,并添加图例。
- K" {6 C: f, ]' |2 N* b
3 Q- K7 o9 a* {# E/ F# i6.使用 LassoCV 自动选择最佳 alpha 值:
# B2 d. g. {- E4 s  ~$ n
$ z) Z4 C( y9 J2 p4 |) `   model2 = LassoCV().fit(X, y)
2 N- [: _0 o6 D% E1 u. `7 c8 G( r# G$ v7 w# ^8 p
使用 LassoCV 进行交叉验证,自动选择最佳的正则化参数 alpha。+ O8 [' V) F3 c5 c$ u

+ D& H" r+ ], R) z/ y7 h* L, H7.输出模型参数和评估结果:
) \9 c$ J. H% Q! e
! b7 l/ ^# X* I) B+ \   b0 = model2.intercept_
1 ~' c& A, M! q( O. I   b1, b2 = model2.coef_[0], model2.coef_[1]# K# v1 M% N" X" q
   print('y = {:.4f} + {:.4f}*x1 + {:.4f}*x2'.format(b0, b1, b2))
/ Y$ V; f% N& U# Q* t   print('R_square =', model2.score(X, y))+ ]# ]! ?: M8 g
   print('k =', model2.alpha_)4 W  f4 @6 _+ Z. n

" i  c% C3 M& p: S: f; C0 T- w输出拟合的线性模型的截距、系数以及 R_squared 值,还输出了最佳的正则化参数 alpha。8 ^2 C! q1 L& [1 @' A+ G+ x
这段代码通过 Lasso 回归模型拟合了给定的数据,并展示了不同 alpha 值下的系数变化,最后选择了最佳的 alpha 值进行拟合,并输出了拟合结果和评估指标。
- G3 F3 Z7 p1 B
0 x' ]9 n7 V6 G" J6 |2 i
  r5 }7 y! f" \1 c8 }; k  F* [; v' @7 `- z" ^

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

回顶部