QQ登录

只需要一步,快速开始

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

使用 sklearn 进行 LASSO 回归

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

1189

主题

4

听众

2934

积分

该用户从未签到

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

( l& d1 I- A) G; N/ S& ^1.导入所需库:
- q5 ~. n; m0 X# G8 h  T: ~
; E; r+ Z! t# W5 t   import numpy as np
6 n. [& {- Q6 M4 O! ]   import pandas as pd/ k. h& J% V) M& U) a9 F$ {  b
   import matplotlib.pyplot as plt
/ [  k8 ?" s8 |  _8 n   from sklearn.linear_model import Lasso, LassoCV
' l% {' d1 o7 B
1 \0 ]/ X- T* D
' {6 t3 V$ Q' i9 ^, A4 F3 x2.定义源数据:; u$ m. O4 R: a/ p  b
* @4 [/ `2 w, H' I2 R" t1 n( z
   df = pd.DataFrame({
( n; p$ i) a5 q3 S5 b       'x1': [7, 1, 11, 11, 7, 11, 3],
) g9 Q2 G/ ~. S, J: V) [       'x2': [26, 29, 56, 31, 52, 55, 71],' g0 z7 }: a" H0 N
       'y': [78.5, 74.3, 104.3, 87.6, 95.9, 109.2, 102.7],& L7 [' w$ Y) K* v( ?
   }); f1 s& U- E2 k/ u( W

, a1 W  i7 p: U9 e( Q  X* H创建了一个包含 x1、x2 和 y 列的 DataFrame,作为原始数据。
3 [4 V% ^4 z: z8 z7 C7 L5 L& z- }7 d0 [; }+ m
3.将数据转换为数组格式:: q1 t% B3 P: ~$ c) H) k
; W- p+ d$ f  b  D# c) d8 {
   X = np.array(df[['x1', 'x2']])5 E" I& }+ _2 J" K0 h# O
   y = np.array(df[['y']])$ ?' `1 U4 N2 h) P( f
- {. C( u5 ?: E+ b  @1 v. {) v
将特征和目标变量分别转换为 NumPy 数组格式。
# Z4 [0 f; p0 a, U# s
! q/ ?0 Q) h. S% t3 N& @+ |4.遍历不同的 alpha 值,计算 Lasso 回归模型的拟合结果:$ w4 C+ m6 o7 J4 m
% X0 N6 a3 _- W% t* p
   k_array = np.logspace(-4, 1.5, 100)
" o0 p( _/ L# Y6 j   x1_list, x2_list = [], []* H# n+ R( d  h) O7 b4 _
   for k in k_array:
6 Z) D. h1 ^7 D. o% c       model = Lasso(alpha=k).fit(X, y)
5 ?" E: G. f; l7 s4 p1 p       x1_list.append(model.coef_[0])
! q" _% w" c3 g' V       x2_list.append(model.coef_[1])
: ]6 y$ ?" B. P5 o2 x# D& M+ i0 K, W1 y8 X: B: u) Z
使用 Lasso 回归模型,遍历不同的正则化参数 alpha 值,计算不同 alpha 值下 x1 和 x2 的系数。
6 h: J: |! k9 n7 K6 F2 p! l
/ o$ a. n6 \0 I  L3 X5.绘制岭迹图:7 m" Y8 B' o1 z. A' `( K7 x
2 |: o) Y6 L3 M7 o+ ]
   plt.scatter(k_array, x1_list)
  E: Y* v- ]' t   plt.scatter(k_array, x2_list)  ?4 s4 B8 b1 ]% \6 f3 J
   plt.plot(k_array, x1_list, label='x1')8 \; ], Y; a" M3 x8 C
   plt.plot(k_array, x2_list, label='x2')
% d9 _/ \$ [# a7 [! j   plt.legend()4 Y/ s' P% p3 L8 h; r7 D$ V

: {6 b$ ^  v4 M3 @4 m6 t* n1 d使用 plt.scatter() 绘制不同 alpha 值下 x1 和 x2 的系数散点图,并使用 plt.plot() 绘制岭迹图,分别标记了 x1 和 x2 的系数曲线,并添加图例。8 O; Q% D; `8 P- n, w% T& ?9 z

$ m! m$ B( l/ C$ d$ E# N: d6.使用 LassoCV 自动选择最佳 alpha 值:
2 I2 N# c+ Q2 @
1 R- C- ~* T' p! c3 W   model2 = LassoCV().fit(X, y)+ G  a! x8 P' B* g; l: R

; l; q1 w# t" |7 D使用 LassoCV 进行交叉验证,自动选择最佳的正则化参数 alpha。
0 d& K: X4 b8 V: U1 R( ]5 m3 _
6 S2 v) w! r4 j: O7.输出模型参数和评估结果:, h: J6 i; s, e
# K2 w6 G- y/ A, m4 q
   b0 = model2.intercept_
9 y/ V  U5 R. ~' |7 x. |) E   b1, b2 = model2.coef_[0], model2.coef_[1]6 b- Q! k, U% B. E- o) Q
   print('y = {:.4f} + {:.4f}*x1 + {:.4f}*x2'.format(b0, b1, b2))
, m$ \( s! ?6 r& s/ `# H# ^   print('R_square =', model2.score(X, y))
1 C# m' Q4 v# B$ `  }+ h$ K; I   print('k =', model2.alpha_)
8 N# L* a; `$ j3 l5 y. a: l; v' O; ?- n) D# C& N# [
输出拟合的线性模型的截距、系数以及 R_squared 值,还输出了最佳的正则化参数 alpha。
  d+ Z6 {: a/ g3 R  {8 Q这段代码通过 Lasso 回归模型拟合了给定的数据,并展示了不同 alpha 值下的系数变化,最后选择了最佳的 alpha 值进行拟合,并输出了拟合结果和评估指标。7 y9 X8 o4 h* t) ^1 Q% f3 ]

0 o! x( t$ i6 Y( Z  P* g# W. a. o/ r3 r. r/ D! y; O. q& h8 @
( W6 q& ^) q& o; w, P5 p% \( f

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-6-20 14:42 , Processed in 0.343465 second(s), 54 queries .

回顶部