QQ登录

只需要一步,快速开始

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

使用 sklearn 进行 LASSO 回归

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

1186

主题

4

听众

2922

积分

该用户从未签到

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

7 o: i5 s: O( y/ V, F! H1.导入所需库:* k/ ]2 K- t& p$ A+ E& F) C

  h, W) y$ X6 r& P   import numpy as np
6 m, r; Q/ _8 w+ l( A   import pandas as pd% t0 s' g4 w  R) r( O9 O' m
   import matplotlib.pyplot as plt& v+ F+ B8 t( J! ~9 f& X
   from sklearn.linear_model import Lasso, LassoCV
: ?$ y, W* h/ U( F. B2 U+ i$ w# X7 A2 W

% M2 L* ^  I! n7 N2 I2.定义源数据:
0 l! i5 J9 [7 p8 o1 e. m& t3 o
9 _8 y# s8 X/ R   df = pd.DataFrame({% X  g8 w- h# P  w- H
       'x1': [7, 1, 11, 11, 7, 11, 3],
4 v) r0 `3 M* X" p9 f5 F. g4 y       'x2': [26, 29, 56, 31, 52, 55, 71],1 x% l  W) U+ J4 ?0 y$ g
       'y': [78.5, 74.3, 104.3, 87.6, 95.9, 109.2, 102.7],
) d3 `3 K( X7 Y3 n2 Z   })" }6 ]: {+ M- e  n1 y
2 ]: Y! L- O6 \) s
创建了一个包含 x1、x2 和 y 列的 DataFrame,作为原始数据。0 j" e8 G/ a( y2 R

6 x' v0 v! `% `) {3.将数据转换为数组格式:
+ t8 w' ?( ?" u5 O' f
% t6 `# j" m  ^# |$ c/ A3 W/ i7 n1 z   X = np.array(df[['x1', 'x2']])
. \, z: O. Y& w( ^5 `8 V. h   y = np.array(df[['y']])' n) A8 v' w3 F0 s3 G- [

% W/ u2 \; M8 }( {将特征和目标变量分别转换为 NumPy 数组格式。
1 z4 G' C1 u" I1 q: R3 i7 w
; ^$ G* c  V, M! b& E4 g! [4.遍历不同的 alpha 值,计算 Lasso 回归模型的拟合结果:: H1 B4 y" U9 @$ q; I; a) a1 F

. B  {. Z: g; H8 M$ h: a" r- ]+ G   k_array = np.logspace(-4, 1.5, 100)
6 T- q6 R# T$ f( |* a   x1_list, x2_list = [], []8 w' u9 f6 x. y
   for k in k_array:5 P; |) j" h; X& q: n. C8 Q$ h. I
       model = Lasso(alpha=k).fit(X, y)5 O% Z+ j6 Y/ M  w, k- L1 S
       x1_list.append(model.coef_[0])
9 T6 u! I) {& ~% q" @# R4 X       x2_list.append(model.coef_[1])2 w* b( a: s2 }2 Q

: H0 j* |3 y7 {8 m, V9 Y. b) m使用 Lasso 回归模型,遍历不同的正则化参数 alpha 值,计算不同 alpha 值下 x1 和 x2 的系数。
6 n7 H% H# K) _# H3 o/ f' k* h$ i0 S8 a; S7 \# }
5.绘制岭迹图:
2 ?5 D: E! X) P# Z& h+ r! H( A; s4 u- {- @
   plt.scatter(k_array, x1_list)0 u# c: k) V4 c% j
   plt.scatter(k_array, x2_list)$ _- [  |& A; v
   plt.plot(k_array, x1_list, label='x1')
8 v! C; U( Y7 ^   plt.plot(k_array, x2_list, label='x2')
6 ?. k8 p/ f! n, I; U  u! a   plt.legend()- B. A& c* j! _* h

5 S+ J! B/ M  b使用 plt.scatter() 绘制不同 alpha 值下 x1 和 x2 的系数散点图,并使用 plt.plot() 绘制岭迹图,分别标记了 x1 和 x2 的系数曲线,并添加图例。
6 P& w! n7 L3 h8 B3 ]: L) @. o9 d& ]
6.使用 LassoCV 自动选择最佳 alpha 值:2 U( H+ L& N- n5 p5 a3 Q
- d' Y( W8 j( D9 `# z2 t2 J( D
   model2 = LassoCV().fit(X, y), W( f. y# F: |

( }4 ~- F: ?. R2 ]8 n* e$ m使用 LassoCV 进行交叉验证,自动选择最佳的正则化参数 alpha。
& l$ Z/ A; E; ~# C4 j2 J# k* k2 d( |: u' e0 x8 Z0 @, c& V& N6 b
7.输出模型参数和评估结果:1 m% Z7 W+ q( f' V" h
" u: C2 |5 M8 q: d! t. B3 B) `
   b0 = model2.intercept_
: V2 k& f: S0 b# e7 I( }   b1, b2 = model2.coef_[0], model2.coef_[1]
4 K! z, }* S; T6 [' J8 W   print('y = {:.4f} + {:.4f}*x1 + {:.4f}*x2'.format(b0, b1, b2))
% w* D. k, ^$ z7 R+ e9 s   print('R_square =', model2.score(X, y))
# O2 p: t- |2 [, L! d: [  ~7 W, y/ n   print('k =', model2.alpha_)
$ K9 f9 ~$ p9 x6 }* w
; O7 u, }  y) n" u8 }; U输出拟合的线性模型的截距、系数以及 R_squared 值,还输出了最佳的正则化参数 alpha。! _* r% D$ t! i  a0 O
这段代码通过 Lasso 回归模型拟合了给定的数据,并展示了不同 alpha 值下的系数变化,最后选择了最佳的 alpha 值进行拟合,并输出了拟合结果和评估指标。" t& T5 ~6 O% I: {
( p2 E: k4 b+ R/ e  I: X- J, f
( i5 H$ a% R4 b( \$ D! E

9 }& X# t) h- t* x

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

回顶部