QQ登录

只需要一步,快速开始

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

使用 sklearn 进行 LASSO 回归

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

1189

主题

4

听众

2934

积分

该用户从未签到

跳转到指定楼层
1#
发表于 2024-3-15 11:12 |只看该作者 |倒序浏览
|招呼Ta 关注Ta
1 o) _4 f  K5 U: o
1.导入所需库:7 m4 b! b( f9 K% I+ M

+ h% ~& c8 `. i  q  x; ~   import numpy as np
8 g& m0 `* d; U: R   import pandas as pd
/ d9 @% H' B0 i7 {9 [% T   import matplotlib.pyplot as plt6 e4 x6 @1 ~9 j; b& {2 U1 V
   from sklearn.linear_model import Lasso, LassoCV6 i- x5 I+ ~  q( Z2 \5 i1 n
3 j# X/ W/ n3 a& ]7 L7 u$ y& o2 x, o

3 H8 G  k# c0 w6 G" Y2.定义源数据:" E5 n& P3 b2 S: y- H! l" n9 R

4 t3 ]9 }& J& u' g8 V" ?   df = pd.DataFrame({( \  v  Q0 A2 f: b0 m
       'x1': [7, 1, 11, 11, 7, 11, 3],8 D3 M# O0 F4 G) {* \8 i9 m3 _( E
       'x2': [26, 29, 56, 31, 52, 55, 71],( I1 s; o6 f- g7 R( A
       'y': [78.5, 74.3, 104.3, 87.6, 95.9, 109.2, 102.7],
. s  P! E8 Y/ G3 s& W3 l! i! W) x   })
& L; `7 T3 V& n$ q; J# t- D# g
创建了一个包含 x1、x2 和 y 列的 DataFrame,作为原始数据。
( k3 y2 j$ ~3 o2 |4 u$ Z1 n* y% r" c
6 J& \1 c8 x  B9 X) v0 \6 v3.将数据转换为数组格式:& f7 y5 p1 Z' }- [0 ^3 _
7 G/ ]' f$ t6 B& W  t" ]) T
   X = np.array(df[['x1', 'x2']])4 f  b& s& t1 z5 p+ ?3 `# o
   y = np.array(df[['y']]); _- d2 T6 x  w. H! v! d
4 v5 P! O* r( Z) i
将特征和目标变量分别转换为 NumPy 数组格式。1 x% h$ }. S( [: U' h$ o7 |

$ B7 }0 `; x) J# T$ T3 {4.遍历不同的 alpha 值,计算 Lasso 回归模型的拟合结果:
* |5 w( n! Q* x& T. B. R8 o. ^' Q/ ^" y+ R. K0 N
   k_array = np.logspace(-4, 1.5, 100)
. p/ h: ~0 w: d8 O   x1_list, x2_list = [], []/ `" t# h) U/ i. V/ d; T
   for k in k_array:7 B/ `" u5 g3 p# K5 c; y) @" d1 S/ k* z
       model = Lasso(alpha=k).fit(X, y)7 ]$ r4 H6 J* N0 f* f+ ~
       x1_list.append(model.coef_[0])& @# c; O% y) v/ e
       x2_list.append(model.coef_[1])
* Z4 Y! ^* j- _0 C% @7 t! U1 T1 H9 u' |8 K( R/ d+ Z: i
使用 Lasso 回归模型,遍历不同的正则化参数 alpha 值,计算不同 alpha 值下 x1 和 x2 的系数。1 r& b& Y+ S9 q* r. ]( {/ O

  H9 |% g. l6 E9 y3 w7 t! l% p9 `5.绘制岭迹图:: F& n% q6 P9 i" b; M: B2 S6 S

  L5 ?, X5 `+ a" i! r6 C   plt.scatter(k_array, x1_list)
' r, M: B) F3 O4 Z. f   plt.scatter(k_array, x2_list)
$ Q( B* X: {2 [' p  t   plt.plot(k_array, x1_list, label='x1')
5 C9 M) X3 N8 ^+ `" @0 k   plt.plot(k_array, x2_list, label='x2')
/ _; h% E& E- B! M, A+ I   plt.legend()( j$ i0 F7 @* \/ \, X7 ?
3 a+ G- a. p1 e2 D. m5 w/ O
使用 plt.scatter() 绘制不同 alpha 值下 x1 和 x2 的系数散点图,并使用 plt.plot() 绘制岭迹图,分别标记了 x1 和 x2 的系数曲线,并添加图例。
  H" x9 W: Z) E
1 x6 q' V* z% w- k- d6.使用 LassoCV 自动选择最佳 alpha 值:
' k' ]: P0 r" a* {7 R4 g0 W+ y; R" t8 l" J, h
   model2 = LassoCV().fit(X, y)
0 W) }8 A3 A, ]3 Z& y. c! d
+ n$ n( @+ K: S6 n0 @& l使用 LassoCV 进行交叉验证,自动选择最佳的正则化参数 alpha。
5 Q7 j! X9 F: c7 Y) ^0 G, _8 [
; }# [" I$ K/ c. Y" C, Q$ y7.输出模型参数和评估结果:
8 {5 X# f2 P" K$ ~0 I  j6 D, q9 N$ i' B( I. h! G+ W" Q. t
   b0 = model2.intercept_. V6 }$ E, [+ l5 i; k' Q+ b6 E
   b1, b2 = model2.coef_[0], model2.coef_[1]
- B  w+ I. J: h   print('y = {:.4f} + {:.4f}*x1 + {:.4f}*x2'.format(b0, b1, b2))
* ?3 @% r; X: ^( Y   print('R_square =', model2.score(X, y))
9 k+ [/ y& z* {# `& i- u   print('k =', model2.alpha_)+ k: X. `3 x% K2 p* B

4 h. g! ?0 b/ M0 m) j2 Q; M) \# n输出拟合的线性模型的截距、系数以及 R_squared 值,还输出了最佳的正则化参数 alpha。" ~( |& s' }/ _, _: H. z. X" I
这段代码通过 Lasso 回归模型拟合了给定的数据,并展示了不同 alpha 值下的系数变化,最后选择了最佳的 alpha 值进行拟合,并输出了拟合结果和评估指标。
1 e6 P& ^+ W( E6 K4 @
' N# X( ~5 f; Y& _! _- |; R9 ]. ]4 w" n8 m# {' b
- _' i4 [/ O+ P+ |$ Y. [

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 17:46 , Processed in 0.604800 second(s), 55 queries .

回顶部