QQ登录

只需要一步,快速开始

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

使用 sklearn 进行 LASSO 回归

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

1189

主题

4

听众

2934

积分

该用户从未签到

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

- P2 F/ H( x: I0 r  I/ f+ ^. \! G$ ]4 y1.导入所需库:9 b# Y+ T& q: {  y2 E, D+ ?
9 J% f5 f+ _3 }$ p* W
   import numpy as np9 Y  z6 M0 @! p$ m% i
   import pandas as pd% r+ H# n" ?7 F9 ~& X3 [2 y( b+ m. u
   import matplotlib.pyplot as plt
. @5 D! Z& c) E7 }) ^) a$ b$ ~! v   from sklearn.linear_model import Lasso, LassoCV
) c( ]8 J& d8 ~1 A" [5 U( G9 a2 g4 T  H

: c0 Q' y8 s! `& g2 C; e+ H2.定义源数据:
9 Q; t! ^# J- c, x  d; z8 Z( |7 W4 C" d- S8 S0 Y* M
   df = pd.DataFrame({/ j7 Q5 Q+ R9 R8 U
       'x1': [7, 1, 11, 11, 7, 11, 3],4 i) b7 x' X" v; Z
       'x2': [26, 29, 56, 31, 52, 55, 71],' \0 g: q$ |$ [: i* \: q- ^
       'y': [78.5, 74.3, 104.3, 87.6, 95.9, 109.2, 102.7],: C/ ~, i6 Q$ |1 d9 E
   }): p  V  t4 f5 o* [, h4 a  P* r3 a
: y' y# i( |" i1 r+ q; G
创建了一个包含 x1、x2 和 y 列的 DataFrame,作为原始数据。6 I$ V/ i/ }8 N* L

& {6 _9 u4 R. `2 M& t' I( b3.将数据转换为数组格式:
! v! r& m7 `( N5 J1 S8 `2 w
- d( M6 ~# j2 H! o   X = np.array(df[['x1', 'x2']])7 [3 d; m: f5 E4 b% H( o. e
   y = np.array(df[['y']])
3 K, }% k6 I. J4 h5 g0 D  N. H" `, Q6 c$ K. M& Y# G; T
将特征和目标变量分别转换为 NumPy 数组格式。
& G! b5 ~2 t- w9 B! a4 L! ~
, l( u" q, S4 F# }" v2 b0 D4.遍历不同的 alpha 值,计算 Lasso 回归模型的拟合结果:& T, r6 n, p6 a) ?9 f3 ]! L" u
+ u0 J% ?* I+ A0 U7 n
   k_array = np.logspace(-4, 1.5, 100)2 A& }% ^5 y; W/ Q3 H
   x1_list, x2_list = [], []
/ d- \! e- [* f9 x* l7 I   for k in k_array:' L% B6 n( K! G
       model = Lasso(alpha=k).fit(X, y), c; H* ]7 A% T5 f: t
       x1_list.append(model.coef_[0])
$ H3 k+ a6 o5 `( T# W6 N3 t! r       x2_list.append(model.coef_[1])
- R2 B% F7 u; C) z
7 W5 M. z3 }( ?6 X使用 Lasso 回归模型,遍历不同的正则化参数 alpha 值,计算不同 alpha 值下 x1 和 x2 的系数。
8 K' r' v7 z: P" E' c
; y' k! H. e, N* v! B5.绘制岭迹图:
+ n& w2 D$ N  l! g" U- g; z) G; y$ P4 j& F$ x2 ~$ ]: t" s
   plt.scatter(k_array, x1_list): h1 X. M1 h/ r" J0 n
   plt.scatter(k_array, x2_list)
4 L) L; X& `& g   plt.plot(k_array, x1_list, label='x1')6 h# c, g2 f' }3 l9 u) X5 Y
   plt.plot(k_array, x2_list, label='x2')
5 {9 v$ Y1 E2 Y6 r( ^3 b& k9 Y   plt.legend()5 O  B" w) M" W" R# {
; c7 C- \: |; K- _, R# h
使用 plt.scatter() 绘制不同 alpha 值下 x1 和 x2 的系数散点图,并使用 plt.plot() 绘制岭迹图,分别标记了 x1 和 x2 的系数曲线,并添加图例。5 }% `, G) }6 D

/ n! }) C# z- |& J" ]) D6.使用 LassoCV 自动选择最佳 alpha 值:
" S9 K& x* ]' `7 L7 ]4 h! k4 B* v* L9 G
   model2 = LassoCV().fit(X, y)
7 Y9 T5 a5 `4 u/ `2 P$ Z6 q" ]9 E* j6 ~
使用 LassoCV 进行交叉验证,自动选择最佳的正则化参数 alpha。- v! L. U, L' M, g! }& D1 b

% S) q+ c# R5 _; Y5 X* {7.输出模型参数和评估结果:+ h3 O# Y3 @) h; u) ?6 ~) ]
  ^+ a" N) i$ u) I& E& S; s
   b0 = model2.intercept_0 v! y9 J3 Z. {  i
   b1, b2 = model2.coef_[0], model2.coef_[1]+ v* x, O' _8 I! d$ i
   print('y = {:.4f} + {:.4f}*x1 + {:.4f}*x2'.format(b0, b1, b2)), r3 O' c9 s$ \. R
   print('R_square =', model2.score(X, y))+ u1 y. O0 `6 f6 B! g$ c
   print('k =', model2.alpha_)" d4 t/ |1 c) x4 I4 N. l  {# F
2 T4 C& Y& W' ~; H. c8 D
输出拟合的线性模型的截距、系数以及 R_squared 值,还输出了最佳的正则化参数 alpha。
  x& n% k. d8 w% h- `# z" H3 q这段代码通过 Lasso 回归模型拟合了给定的数据,并展示了不同 alpha 值下的系数变化,最后选择了最佳的 alpha 值进行拟合,并输出了拟合结果和评估指标。- v, Y, a; c- n3 Z( T# ?% k' i& D3 w

6 w% C* Y( j7 C5 S' f
4 ?. a2 F9 E* |1 I% Q9 L# U  c
% @; L& P# K/ c: Y( B& j

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 11:51 , Processed in 0.439948 second(s), 55 queries .

回顶部