QQ登录

只需要一步,快速开始

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

使用 sklearn 进行 LASSO 回归

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

1186

主题

4

听众

2922

积分

该用户从未签到

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

; y4 j& A) E6 v: X8 e$ |( P# L1.导入所需库:" u* W2 o5 ]& T
* {0 |* E" K# G! h& e* O2 H
   import numpy as np* \- ~6 i9 U" I) Q3 Q2 p" h
   import pandas as pd
9 E/ T$ j5 N3 z% B' ]   import matplotlib.pyplot as plt
- h- Z' D* {" k4 b   from sklearn.linear_model import Lasso, LassoCV
4 j3 `; ^. g" p& F2 W
0 \1 w) G+ p  g3 T5 t- y
+ M) w$ ~/ k- s" o2.定义源数据:% K( \+ P. b- @

3 _3 a# A; c; L/ h) }   df = pd.DataFrame({3 c2 g6 J9 D, _% `) N2 x4 u* c
       'x1': [7, 1, 11, 11, 7, 11, 3],
/ Y- n1 }1 E+ n: N, J3 L( c       'x2': [26, 29, 56, 31, 52, 55, 71],5 c, c8 b& r7 Q. X# s! E/ O7 F
       'y': [78.5, 74.3, 104.3, 87.6, 95.9, 109.2, 102.7],
0 c& L1 L& W" F   })
6 j% X! d( L5 J; a  j
# i! x2 Y$ D# M- B4 }创建了一个包含 x1、x2 和 y 列的 DataFrame,作为原始数据。
  t: E2 z( ?, P  b) z+ F# @+ V+ h# d% `# Y: d
3.将数据转换为数组格式:
- V8 ]6 J9 m2 W2 L; F4 P, Z" W4 y; ^# f
   X = np.array(df[['x1', 'x2']]); ?% b5 H) T2 k8 Q! ]2 ?
   y = np.array(df[['y']])
/ @5 b9 ?6 `% Y  [. C: R2 A  P9 U7 M/ y' F% j! o1 y# `1 o* n
将特征和目标变量分别转换为 NumPy 数组格式。; a" }: v1 g7 x6 x' E/ ^
5 D" a. u  u% O# j: G% G6 j
4.遍历不同的 alpha 值,计算 Lasso 回归模型的拟合结果:! ^  b( u1 {% B2 q/ M  V+ \
+ [) A+ G& o( ?5 D2 o
   k_array = np.logspace(-4, 1.5, 100)- }! D7 Y2 ^) ]4 H
   x1_list, x2_list = [], []
) N; Y8 N& v+ W4 z8 Y   for k in k_array:; l6 ~+ i' ^3 y2 J
       model = Lasso(alpha=k).fit(X, y)
- Z- D6 e" q' L" e8 B3 S+ N! X       x1_list.append(model.coef_[0])* G' z5 I, z& O8 t7 e# v
       x2_list.append(model.coef_[1])
/ \! S$ j# E  a8 b8 J+ A8 X4 x/ O5 M/ F' m1 m& v4 n' V5 }
使用 Lasso 回归模型,遍历不同的正则化参数 alpha 值,计算不同 alpha 值下 x1 和 x2 的系数。9 e) `$ _; H. ^- l# E; [0 e+ [2 m- J

) A. k# F) b& x8 d, s0 |& ]5.绘制岭迹图:
, K9 O8 ?' r8 k& M6 f  I: {0 c+ N0 D9 k) n
   plt.scatter(k_array, x1_list)
/ e1 {2 ^' i0 x0 K- Z   plt.scatter(k_array, x2_list)
& N1 L$ A; ?: B1 ?   plt.plot(k_array, x1_list, label='x1')5 Y2 i. l% ?' \% c4 [# s6 Z
   plt.plot(k_array, x2_list, label='x2')
6 x& d4 n/ u: h# L5 y$ r! H6 m   plt.legend()
+ E, K# f; f9 o, S7 J: c
/ a) N" y- L/ C8 W- y' q使用 plt.scatter() 绘制不同 alpha 值下 x1 和 x2 的系数散点图,并使用 plt.plot() 绘制岭迹图,分别标记了 x1 和 x2 的系数曲线,并添加图例。
8 u  r" O4 `& l0 S" F" ?! i( Q& B4 I& x4 U* A4 m
6.使用 LassoCV 自动选择最佳 alpha 值:
8 ~2 T: ^: i# o" t
  G1 x; ]! T8 G3 ?0 o5 u# I   model2 = LassoCV().fit(X, y). Z1 O, p- Y6 _; i4 l3 }
- z/ y9 E1 w  Y
使用 LassoCV 进行交叉验证,自动选择最佳的正则化参数 alpha。
) J2 t3 O8 M8 q4 S) l* f6 Y
3 n3 F" @7 ^! b* m! k7 H5 N7.输出模型参数和评估结果:
4 e6 B; P9 A2 N) U3 N- q% C! u3 I" z
   b0 = model2.intercept_
# K- S; |, Q; J4 x( a   b1, b2 = model2.coef_[0], model2.coef_[1]7 P, j: T; l& u4 x2 _; S
   print('y = {:.4f} + {:.4f}*x1 + {:.4f}*x2'.format(b0, b1, b2))' z' t: T: Q% j" P2 W& R/ i
   print('R_square =', model2.score(X, y))
+ W2 x, a( t" U  j4 G/ B   print('k =', model2.alpha_)% h! m+ C( @1 [" w4 I6 k

' d' h$ `- c; R; D# q) v输出拟合的线性模型的截距、系数以及 R_squared 值,还输出了最佳的正则化参数 alpha。+ d. S4 w1 R; f% Y8 X: @
这段代码通过 Lasso 回归模型拟合了给定的数据,并展示了不同 alpha 值下的系数变化,最后选择了最佳的 alpha 值进行拟合,并输出了拟合结果和评估指标。
: W! p' A( A/ A- t
$ B+ ]7 p2 _" w  ?9 F( g% K$ q/ K% l' q9 e6 G+ u3 |' N7 l
# {6 T* {" J! V& q7 v* q

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-4-10 11:45 , Processed in 0.295345 second(s), 55 queries .

回顶部