QQ登录

只需要一步,快速开始

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

使用 sklearn 进行 LASSO 回归

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

1189

主题

4

听众

2934

积分

该用户从未签到

跳转到指定楼层
1#
发表于 2024-3-15 11:12 |只看该作者 |倒序浏览
|招呼Ta 关注Ta
: X% I2 S  P9 k' k" @+ G7 b
1.导入所需库:
7 a' n. x- O' Z+ \
# D3 q( k! H& f. k   import numpy as np% ]* ^* W0 }# l0 ^0 d5 ~  a) ?
   import pandas as pd' s/ d/ o/ t$ \
   import matplotlib.pyplot as plt0 r5 t! {" @: r: R0 s5 n
   from sklearn.linear_model import Lasso, LassoCV
( r# v0 W) W/ I% f3 T, J
! `- g' o" V) _4 Q7 o. ]+ u5 W- j
* J7 T  [: v$ b) G3 @" T% R( H2.定义源数据:
1 y! r0 y: n2 v2 O& i) Q$ m$ _, O
7 \0 Y' ~+ L7 O, b   df = pd.DataFrame({
2 G+ G1 h% j; a/ L$ o$ v% N       'x1': [7, 1, 11, 11, 7, 11, 3],
  ?# U) q. P7 G. ~       'x2': [26, 29, 56, 31, 52, 55, 71],. m7 Z% J0 r% B2 L& h7 z, o
       'y': [78.5, 74.3, 104.3, 87.6, 95.9, 109.2, 102.7],# p/ ?! `% a3 ]0 o1 F/ V6 Z1 i
   })6 F$ _  S$ Z5 s3 o4 y

& P" v# W# ?& a. v3 r( a. [5 }3 z+ j创建了一个包含 x1、x2 和 y 列的 DataFrame,作为原始数据。& S1 a6 Z, u# Q  H3 d
6 f! ?: X" H$ Q- Y/ Y: A) S" |
3.将数据转换为数组格式:! e" J6 {+ V* U) D
% Y4 z5 p$ w& m/ K. `
   X = np.array(df[['x1', 'x2']]); ]  [" s& N+ n$ C3 `. A2 S
   y = np.array(df[['y']])
0 v1 D5 ~& `4 f0 Z* j: V" i" v. I3 @# t. {
将特征和目标变量分别转换为 NumPy 数组格式。
9 \3 v# T# N4 c; O- m
. P: S% v6 I+ e5 j. F# y  `4.遍历不同的 alpha 值,计算 Lasso 回归模型的拟合结果:% F3 E. }8 m; {1 [
- L3 i% _4 B( T$ T5 w
   k_array = np.logspace(-4, 1.5, 100)0 }+ q$ A. [$ H
   x1_list, x2_list = [], []$ ]; T5 y6 J4 D) C; Q$ [
   for k in k_array:- b: ?8 Y! [1 A8 V' c( O
       model = Lasso(alpha=k).fit(X, y)
( R' f6 k! F. f) c       x1_list.append(model.coef_[0])$ Z" M4 v4 [2 ?9 [2 |
       x2_list.append(model.coef_[1])
/ q+ q! r2 U. W& J* |7 l7 m
. Z6 U+ x3 E/ R2 Y. ^  f1 f9 X使用 Lasso 回归模型,遍历不同的正则化参数 alpha 值,计算不同 alpha 值下 x1 和 x2 的系数。
/ R6 U" P1 \; V6 D+ \
! H1 ]% J' b/ g& m7 {; n" J/ I5.绘制岭迹图:
' X% F; L$ t4 _% Q' S1 Y* s' h$ c9 t, ~* u
   plt.scatter(k_array, x1_list)1 O& F) `+ m1 z8 A" G( p  g( u
   plt.scatter(k_array, x2_list)% K$ z- a, _  ~0 a/ ?4 [
   plt.plot(k_array, x1_list, label='x1')
3 [; S0 X' Z4 s' l3 c' i   plt.plot(k_array, x2_list, label='x2')
( S* N$ [- G$ r5 d   plt.legend()
% q& Q# U' l" s, x' d0 x
* t+ r9 e- q9 {  D! e使用 plt.scatter() 绘制不同 alpha 值下 x1 和 x2 的系数散点图,并使用 plt.plot() 绘制岭迹图,分别标记了 x1 和 x2 的系数曲线,并添加图例。; K3 R* A1 q  }3 m" F
0 W7 i5 J, c4 H
6.使用 LassoCV 自动选择最佳 alpha 值:* b$ H" H* Z/ C9 Y6 U2 O

9 `2 T0 J! p' m9 |3 d( j( H   model2 = LassoCV().fit(X, y)
( A! O/ G$ u# K9 g5 B8 \
, Q8 S& E- K) Y# F1 `7 _$ C- b使用 LassoCV 进行交叉验证,自动选择最佳的正则化参数 alpha。# v/ c& X4 o0 e1 T; M8 ~. ]3 U- F
5 `; {1 W6 ]8 Q) Q
7.输出模型参数和评估结果:+ o7 O8 A" C  ~% p

4 P/ w: y/ }+ a& P" c* g" l6 L   b0 = model2.intercept_7 {! B8 Z. F" _0 r: r/ I# B' K
   b1, b2 = model2.coef_[0], model2.coef_[1]
) K% v. f; g+ F- @2 p. Q   print('y = {:.4f} + {:.4f}*x1 + {:.4f}*x2'.format(b0, b1, b2))3 D+ b4 b& ~5 B" C  Z
   print('R_square =', model2.score(X, y))
1 Z5 H) f# \8 m) w: o1 k* m   print('k =', model2.alpha_)
& z! X0 L% ]+ ?% T0 v# @; p* L  ]' i+ x& `! J7 H) }2 q9 Z
输出拟合的线性模型的截距、系数以及 R_squared 值,还输出了最佳的正则化参数 alpha。
6 U! n8 G8 y- d* A4 [2 l这段代码通过 Lasso 回归模型拟合了给定的数据,并展示了不同 alpha 值下的系数变化,最后选择了最佳的 alpha 值进行拟合,并输出了拟合结果和评估指标。3 R7 ?6 W2 f7 Y$ J6 Z
6 Q# a( X  g3 [% _  n3 A9 [* g
9 i. ?. y. A" S/ E8 ?0 A3 b
$ l, B& r: |4 z( G6 S; }

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

回顶部