QQ登录

只需要一步,快速开始

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

使用 sklearn 进行 LASSO 回归

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

1189

主题

4

听众

2934

积分

该用户从未签到

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

9 y5 X7 P  U! F, e! S" G9 M1.导入所需库:
9 R3 Y% @3 j) `, y( M) x
4 Q+ j# ]) ^$ P" E   import numpy as np9 s$ _) a3 B8 |) Z- c3 Y
   import pandas as pd" v+ z: o1 T# k# ~6 m& I/ u. U
   import matplotlib.pyplot as plt
4 b# {% n: e" \/ u   from sklearn.linear_model import Lasso, LassoCV# d, U+ J! E( J, r
- j1 l4 e5 l) R* M

5 F7 ?- [) y) U, F1 r* d- o. b: p2.定义源数据:
$ e! u6 P- m( u% o* O! n& w7 @4 t! v" o; D5 O1 y
   df = pd.DataFrame({6 ?# u- x  t' D! N
       'x1': [7, 1, 11, 11, 7, 11, 3],
1 i8 d( f: ~' `; P- o/ G       'x2': [26, 29, 56, 31, 52, 55, 71],
/ @/ S; s7 w  y7 E9 s       'y': [78.5, 74.3, 104.3, 87.6, 95.9, 109.2, 102.7],
0 q1 K2 J! l+ L! h" h9 `* ]   })
. y; k* X/ l0 z& y" X$ h3 R( }& Q: T8 c3 F
创建了一个包含 x1、x2 和 y 列的 DataFrame,作为原始数据。8 t; U- `$ _  D) w1 {8 ^# a, {! \

0 Z( \" Y' z: }% c: q7 h3.将数据转换为数组格式:
8 l3 I* [& h& Q3 t0 F! d: V% D( G% w' m' f$ X" V
   X = np.array(df[['x1', 'x2']])7 P( J8 l# v; g1 [% H: [4 x
   y = np.array(df[['y']])/ w* Y' @9 }8 i7 G1 G  w; G4 P+ D3 L

! P. n, T4 w% \4 q+ _0 o0 Y, ]' q将特征和目标变量分别转换为 NumPy 数组格式。
3 i9 C& G# K: g3 @
! |3 z3 {( y* [+ D8 F' |/ y: E4.遍历不同的 alpha 值,计算 Lasso 回归模型的拟合结果:; n% g; V+ D% i
+ Q: @( W' K( ^1 z; S! ^! a
   k_array = np.logspace(-4, 1.5, 100)& |: ?0 t, G) p: ]) B6 r( S% _8 j
   x1_list, x2_list = [], []( R! z% l" p0 O& k( b
   for k in k_array:6 P# B. m% h. L/ x6 E
       model = Lasso(alpha=k).fit(X, y)
3 a  q+ f  z' V2 D       x1_list.append(model.coef_[0])1 i2 Q" {; O, H
       x2_list.append(model.coef_[1])9 H0 l$ T7 N2 f
4 o! N/ u: `- x& e: q. Z  ~
使用 Lasso 回归模型,遍历不同的正则化参数 alpha 值,计算不同 alpha 值下 x1 和 x2 的系数。3 J% w, C" o' y- ?4 w( ^- X" w
" R* x' P/ R" O1 _% O8 e' V- ^
5.绘制岭迹图:9 M4 l) ?% c/ Z  [9 ?: N5 y; S4 t
0 n  p+ d" v6 H8 @; G& g
   plt.scatter(k_array, x1_list)
1 @- T) T4 w& W/ O   plt.scatter(k_array, x2_list). ]2 O+ ?$ c! \8 o- }
   plt.plot(k_array, x1_list, label='x1')9 v. p3 m  ~: X' S6 d
   plt.plot(k_array, x2_list, label='x2')6 B. ~7 b+ v4 j% p
   plt.legend()
% u9 F1 m0 h  p8 Z) Y, ]% r) o" F5 `- J( M" g/ E3 _
使用 plt.scatter() 绘制不同 alpha 值下 x1 和 x2 的系数散点图,并使用 plt.plot() 绘制岭迹图,分别标记了 x1 和 x2 的系数曲线,并添加图例。
$ b  o: X9 `) X2 O6 m( Q7 P6 d0 E
$ \  I5 e, d8 `- r( k6.使用 LassoCV 自动选择最佳 alpha 值:
( N& u) L( e" R8 Q2 D& n7 w& v8 ]/ V- V7 ^8 ?$ c
   model2 = LassoCV().fit(X, y)
8 f: @" g5 I0 {% C1 y6 _" k$ X5 |- D+ D' j* T$ Q; Z# c9 O- {
使用 LassoCV 进行交叉验证,自动选择最佳的正则化参数 alpha。/ U5 g3 z" N" P

. j! @2 d) B6 g$ n$ O5 O; u7.输出模型参数和评估结果:
' A9 [2 J9 M$ g" ^! L: F
9 X0 s2 n) g4 O+ a9 |   b0 = model2.intercept_
  }6 T& i( ?, B+ F, q   b1, b2 = model2.coef_[0], model2.coef_[1]
" Y& Z, o# j! C; f% X( x   print('y = {:.4f} + {:.4f}*x1 + {:.4f}*x2'.format(b0, b1, b2))! s6 [8 \* J& b1 U/ N7 y
   print('R_square =', model2.score(X, y))# O/ o3 t# u4 i$ f  M* @- m
   print('k =', model2.alpha_)
4 Y# I/ b. Q& ?9 |6 G( b
. M  G+ d" N* B输出拟合的线性模型的截距、系数以及 R_squared 值,还输出了最佳的正则化参数 alpha。: b, |0 M$ F& @4 L
这段代码通过 Lasso 回归模型拟合了给定的数据,并展示了不同 alpha 值下的系数变化,最后选择了最佳的 alpha 值进行拟合,并输出了拟合结果和评估指标。' {3 `1 i: y5 a& `7 J" M6 l- H

  H( ]4 y+ l/ a( @* o
/ h& u; k# [# J3 f  e4 L$ I
1 f, l) Z: ]5 }) z9 M. \

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 14:52 , Processed in 0.295853 second(s), 55 queries .

回顶部