QQ登录

只需要一步,快速开始

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

使用 sklearn 进行 LASSO 回归

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

1198

主题

4

听众

2978

积分

该用户从未签到

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

6 ~  f# r: K: N1.导入所需库:& x1 e2 d: J: _1 N) E* X. n. Z

: J! v* ]  W, G6 u1 k# q   import numpy as np" G) e: l% w6 B6 G2 C& U# j1 ]6 n
   import pandas as pd
- X8 H& r4 N# ^! t0 H" e- U   import matplotlib.pyplot as plt
% h2 p. {0 R! ]% T   from sklearn.linear_model import Lasso, LassoCV
% w* r% _2 v: e/ P  I1 v+ C5 J2 X; A2 A' j
0 Z* Q" E0 [* x) F; f2 R! F" `8 H
2.定义源数据:' ^( S% Q* J% X+ Z0 u  G9 {1 w

( K2 H5 E, V8 s6 c/ _" f) k* A- o; n   df = pd.DataFrame({6 x  x& T, }" b  K' X
       'x1': [7, 1, 11, 11, 7, 11, 3],0 p: q% \% d2 M( Z- _. y
       'x2': [26, 29, 56, 31, 52, 55, 71],
5 q; O" T% o4 @# \0 i0 ]       'y': [78.5, 74.3, 104.3, 87.6, 95.9, 109.2, 102.7],8 v( n. p! {0 a$ G4 h* N+ v7 o
   })
6 w1 y: v: [' P& ^, C7 O) h# Z7 P) x! x" b- L& L" _7 Z" i
创建了一个包含 x1、x2 和 y 列的 DataFrame,作为原始数据。
6 x) V) R. }. a4 y( C9 C# J+ [- u* g0 K; a
3.将数据转换为数组格式:
/ a1 |" V0 P/ t5 l- s3 X, q" k! x
0 }, |% t6 N* \  _/ c+ l: @* C   X = np.array(df[['x1', 'x2']]); A! N! ~5 B! B0 x+ @6 p
   y = np.array(df[['y']]): y3 g. F8 p5 t1 }$ A

9 q8 |3 U* }4 i; O将特征和目标变量分别转换为 NumPy 数组格式。
; \  ?# Q1 E+ i0 [6 L% Y
8 L7 f  u9 s0 t4.遍历不同的 alpha 值,计算 Lasso 回归模型的拟合结果:
6 R0 n+ t- {8 N. g) x7 _7 H" m& q/ m
5 n, w! W& x$ _2 j3 z   k_array = np.logspace(-4, 1.5, 100); o0 A% T# ]+ [' P5 m. K8 B
   x1_list, x2_list = [], []0 e* l4 w" W( [. U- v
   for k in k_array:, e* b) d$ u4 d4 W# J  M
       model = Lasso(alpha=k).fit(X, y)0 ~8 z2 z+ m4 y$ F2 R
       x1_list.append(model.coef_[0])
8 n+ F9 r2 y# ?( X. I. ]       x2_list.append(model.coef_[1])/ z7 d/ d) V/ O% ^

$ c3 ], R. t9 T) b$ t4 ]( `' U使用 Lasso 回归模型,遍历不同的正则化参数 alpha 值,计算不同 alpha 值下 x1 和 x2 的系数。
: O# d8 n4 g8 F3 p; }8 m: i4 [
( ?6 ^3 j: Q2 G; Q& K; n5.绘制岭迹图:/ O5 ^3 {! E; Y4 T2 C# i
9 L6 W3 A; q3 l' Q* h
   plt.scatter(k_array, x1_list)1 I, X/ ^* ]3 X
   plt.scatter(k_array, x2_list)
3 D! s2 U# L7 q   plt.plot(k_array, x1_list, label='x1')& o/ d' z6 }; ^2 t$ f
   plt.plot(k_array, x2_list, label='x2')' i; q2 V. v$ W6 a* s/ P, ~& {
   plt.legend()
6 U* M) m$ |( B" ]  M" g
& N/ ]; N& S, r, l: [3 O# e. E& f使用 plt.scatter() 绘制不同 alpha 值下 x1 和 x2 的系数散点图,并使用 plt.plot() 绘制岭迹图,分别标记了 x1 和 x2 的系数曲线,并添加图例。& h$ m0 O) F6 d$ B

; f" S5 r5 q0 T0 {" e) p9 J. P6.使用 LassoCV 自动选择最佳 alpha 值:# t# M( B( }& c: L3 f: p
) i/ `/ P/ a$ F& N; I
   model2 = LassoCV().fit(X, y)% g5 I2 M. H2 N
" }3 M; j& q; V- k$ u( T* g
使用 LassoCV 进行交叉验证,自动选择最佳的正则化参数 alpha。( l* A% Y& o; [2 v& F9 s

/ X; A# R* l0 g7.输出模型参数和评估结果:* s9 l2 g( g2 {& o

3 k2 ]+ f# v& U: n; u   b0 = model2.intercept_& _4 J1 v! A/ N7 S* n( M0 G. A; H
   b1, b2 = model2.coef_[0], model2.coef_[1]
. }  N- s' F# e7 {   print('y = {:.4f} + {:.4f}*x1 + {:.4f}*x2'.format(b0, b1, b2))
# C2 m2 s6 g. z. a   print('R_square =', model2.score(X, y)): s6 N; L! h5 y% C
   print('k =', model2.alpha_). @1 S4 c  B& T# y

8 @% y2 E2 m: E/ M1 C+ T输出拟合的线性模型的截距、系数以及 R_squared 值,还输出了最佳的正则化参数 alpha。* z  @. v- j2 g5 B$ z! k3 X: C
这段代码通过 Lasso 回归模型拟合了给定的数据,并展示了不同 alpha 值下的系数变化,最后选择了最佳的 alpha 值进行拟合,并输出了拟合结果和评估指标。% K3 t9 }7 t+ o# r- C
) z" L& _. t" X* T  g
% }& \+ [; K* |0 D) `$ m

' R# k+ \5 y. g+ w: t$ a

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-10-11 09:32 , Processed in 1.759217 second(s), 55 queries .

回顶部