QQ登录

只需要一步,快速开始

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

使用 sklearn 进行 LASSO 回归

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

1198

主题

4

听众

2977

积分

该用户从未签到

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

: `0 E. y  |9 [0 c/ k% a, j+ j8 l+ z1.导入所需库:
9 p& z7 a7 S/ W( E1 ^7 y! ]+ ?$ r, O! P1 N; a
   import numpy as np
$ p, S  o  O5 n/ M8 P+ v/ ^   import pandas as pd
5 y. u$ n( g8 J   import matplotlib.pyplot as plt" f/ |: j+ P  t# L. |2 A4 s6 S' {
   from sklearn.linear_model import Lasso, LassoCV
. M8 m$ \. L. g. ^# ?, l6 W; Q' r
: H9 Y! ?9 n* c$ @9 k
2 m4 q6 G% s, A2.定义源数据:
3 w; i2 C+ a& n0 @4 W1 u) K  Q1 u+ [# v# C  A
   df = pd.DataFrame({
( D! v" i; ]0 }       'x1': [7, 1, 11, 11, 7, 11, 3],8 t9 Z! A: Q$ a7 u; E# w
       'x2': [26, 29, 56, 31, 52, 55, 71],2 @4 T$ ?6 M" O6 M; d* X- O3 L
       'y': [78.5, 74.3, 104.3, 87.6, 95.9, 109.2, 102.7],7 S4 C# G1 g& y' N  j, P: p
   })& @( u+ u$ U. Z) i5 r( }# i1 k

5 [6 J5 q2 ~) `创建了一个包含 x1、x2 和 y 列的 DataFrame,作为原始数据。
- Z5 s& ^6 u8 t( ?$ ?  F  F& K. r2 F* }
3.将数据转换为数组格式:. u- K" H; {. ~( V5 B

; V# X1 k1 k$ G) T* `0 U" P/ D, g2 y   X = np.array(df[['x1', 'x2']])
4 s8 G9 [- F- [, L: ]5 U0 [! |   y = np.array(df[['y']]): {- ?# N4 G& d  J

$ S) @6 y1 F3 x$ g! V. Z将特征和目标变量分别转换为 NumPy 数组格式。
% G5 \8 c4 K3 D8 T& i4 ^
7 k% D4 M$ W1 Z$ n: _/ W- `4.遍历不同的 alpha 值,计算 Lasso 回归模型的拟合结果:5 B8 e1 E; [6 E+ e1 M# `) m8 c

, v* H4 K4 E2 I9 \   k_array = np.logspace(-4, 1.5, 100)
" |! l) W  h1 E% U8 g0 M   x1_list, x2_list = [], []( r/ c8 s$ E3 G( X# w
   for k in k_array:. s! v2 S4 z0 }3 C6 {
       model = Lasso(alpha=k).fit(X, y). |0 p. S# j8 V/ w
       x1_list.append(model.coef_[0]); ^. p7 z) ]; k1 x
       x2_list.append(model.coef_[1])
" ~. [& ]! S. `& V+ J7 p
; Y* J# F+ {# n1 A% i. R使用 Lasso 回归模型,遍历不同的正则化参数 alpha 值,计算不同 alpha 值下 x1 和 x2 的系数。
: n  x! u7 t6 A3 X  D
  h. V2 ?- H& A4 `5.绘制岭迹图:
" R3 E1 T% Q6 e; u, N  a0 s, [% A: r) Q7 X+ G
   plt.scatter(k_array, x1_list)6 o/ T: H% D+ p- ]/ D
   plt.scatter(k_array, x2_list)
1 W/ ~! G0 q. B( N: j$ k( c   plt.plot(k_array, x1_list, label='x1'). {. ?: f0 c7 M# H2 ~0 n
   plt.plot(k_array, x2_list, label='x2')5 q' r! [& `/ W" @7 C' ~/ ]
   plt.legend()2 d" {4 g6 K5 i) ?6 e
$ U0 z$ t% K+ ], A- t/ {+ p
使用 plt.scatter() 绘制不同 alpha 值下 x1 和 x2 的系数散点图,并使用 plt.plot() 绘制岭迹图,分别标记了 x1 和 x2 的系数曲线,并添加图例。0 Z- D3 z- V: _, f( I
- }# a# @) m, D/ X3 K) |
6.使用 LassoCV 自动选择最佳 alpha 值:
' p4 r7 `  {. H: h) @/ u% }% Y  {3 z, `8 L$ k; B% _/ r
   model2 = LassoCV().fit(X, y)
! ^5 y" z7 V2 e+ v- e* {7 p7 y
& [: t. H  U7 j/ @/ D& N使用 LassoCV 进行交叉验证,自动选择最佳的正则化参数 alpha。2 w. z! ~/ e- X' v

6 u6 O: e  G( F4 V2 K7.输出模型参数和评估结果:% m5 @. v- s. S: r1 ]

  e) x9 H6 k& |$ f3 g! R+ X# \   b0 = model2.intercept_
* U1 \& T- x) x* j   b1, b2 = model2.coef_[0], model2.coef_[1]; w! K0 t2 o5 r7 P0 ~. h" F
   print('y = {:.4f} + {:.4f}*x1 + {:.4f}*x2'.format(b0, b1, b2))( w1 r; J9 j* z6 J
   print('R_square =', model2.score(X, y))& N5 j! c3 [- ]7 z8 ?0 Y
   print('k =', model2.alpha_)0 J2 w4 v5 |0 ~- U' s, a" K
* l) P6 o( P# @, p" G* V
输出拟合的线性模型的截距、系数以及 R_squared 值,还输出了最佳的正则化参数 alpha。7 a( L4 y, G0 {4 K1 S% ]1 O
这段代码通过 Lasso 回归模型拟合了给定的数据,并展示了不同 alpha 值下的系数变化,最后选择了最佳的 alpha 值进行拟合,并输出了拟合结果和评估指标。
5 l# p# i' e1 w1 z
1 i/ u# W6 r; B  ~: {6 s
2 p5 M4 m" v4 X0 d
  g; X& k! U% h% s1 s6 k

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-9-26 07:32 , Processed in 0.311008 second(s), 54 queries .

回顶部