QQ登录

只需要一步,快速开始

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

使用 sklearn 进行 LASSO 回归

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

1192

主题

4

听众

2946

积分

该用户从未签到

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

5 Q3 }% D! z: @. e. U7 Q( m& S$ A1.导入所需库:
! e( s: M5 \" Z. I/ U" p' B# W
% Z3 f2 U( l6 R+ r0 T% O1 f7 N/ E   import numpy as np2 \; ^7 m* e# X9 K: v9 F
   import pandas as pd8 f! P7 {- \2 F0 P& d/ T
   import matplotlib.pyplot as plt. _9 m  v* v' j2 y" u6 g
   from sklearn.linear_model import Lasso, LassoCV2 ^7 L2 B' A. _  T1 L
: a- c- [! m2 R7 q: W
- F' q' H* [( C; O) z* C( D5 {7 C
2.定义源数据:
4 `7 S4 O% E9 o  N( e7 x. Y5 {9 p  R% Z1 D
   df = pd.DataFrame({" Q1 \. g* `& ~6 n7 q
       'x1': [7, 1, 11, 11, 7, 11, 3],
# I9 h( T3 ~2 Y! w- D4 M       'x2': [26, 29, 56, 31, 52, 55, 71],+ H8 Q6 p( n# P4 T
       'y': [78.5, 74.3, 104.3, 87.6, 95.9, 109.2, 102.7],
$ G0 t9 W9 P9 _& c$ v' @   })
4 y! m4 e. @  m8 j' t9 @/ g+ \! M# C' L- E* D# O
创建了一个包含 x1、x2 和 y 列的 DataFrame,作为原始数据。
/ v! M$ Y  L; ^) U% y
3 ^# Q( b4 {3 T. ?3 i3.将数据转换为数组格式:8 v4 }9 m# h7 n. Z2 j5 e1 {

" w$ E& ^1 f) ?8 Y   X = np.array(df[['x1', 'x2']])1 F+ v. }* A1 Q: Q/ G; i/ v
   y = np.array(df[['y']])
& V5 ?2 U* X: l0 U8 n5 N: L6 Q
: X5 r: d# z2 d# `9 z将特征和目标变量分别转换为 NumPy 数组格式。
, `2 ?7 p, j* w1 x" s, q8 @# i1 {, l- Y
4.遍历不同的 alpha 值,计算 Lasso 回归模型的拟合结果:( p2 C/ {+ [; C2 o. L9 g# D6 _
( A- \$ x5 f2 O
   k_array = np.logspace(-4, 1.5, 100)
' Z! v7 D7 ^/ n- P   x1_list, x2_list = [], []8 e7 u5 H0 W- C
   for k in k_array:
, R6 P3 |  n) z! e' W0 m       model = Lasso(alpha=k).fit(X, y)
0 ^+ ?" e$ T, n6 m6 O$ A4 }: j* \       x1_list.append(model.coef_[0]). Y* S) H/ M: ?; X' \
       x2_list.append(model.coef_[1])
. _" S) Z0 z( y- D
2 E, ^% j9 H( N9 @* Y3 U+ v使用 Lasso 回归模型,遍历不同的正则化参数 alpha 值,计算不同 alpha 值下 x1 和 x2 的系数。$ s  L" }) ?$ i

; I  H1 e6 J- w& x5.绘制岭迹图:3 w/ h' \. p1 ?6 A/ s

" [9 q5 _. P3 S/ S- D% @   plt.scatter(k_array, x1_list)6 |$ \+ f3 X7 j+ U0 a: m8 O, h1 l
   plt.scatter(k_array, x2_list)
/ Q* `6 d9 c5 F; {6 ^- y   plt.plot(k_array, x1_list, label='x1')8 [9 x  R* `2 _' l& g) l. Z
   plt.plot(k_array, x2_list, label='x2')" `; s$ I& g0 Q
   plt.legend()
7 U1 l$ {5 t4 e6 l! D+ K% i7 d
3 Y7 ~9 x* f: \3 ?9 a* `) y7 g使用 plt.scatter() 绘制不同 alpha 值下 x1 和 x2 的系数散点图,并使用 plt.plot() 绘制岭迹图,分别标记了 x1 和 x2 的系数曲线,并添加图例。+ N5 Z& C" P* v" p

! @- t7 Z+ N; K" {" z" z; ^6.使用 LassoCV 自动选择最佳 alpha 值:* Q/ D4 ~* ?7 B) d6 f$ B
% J8 Y( {5 S7 c& [* k; ~' _. f7 h
   model2 = LassoCV().fit(X, y)
2 I( h2 `1 }! H# x: |/ h, e8 a, a8 }7 G5 k9 b; |" D
使用 LassoCV 进行交叉验证,自动选择最佳的正则化参数 alpha。2 K# D1 g- u+ W2 h, K! n0 n

  d  M9 n7 Y  S  ], S0 o9 x; T& m7.输出模型参数和评估结果:5 P7 A' h- ^0 S9 j- m

6 O6 J/ p+ U7 m; v8 }7 w/ s   b0 = model2.intercept_
& |, A& D* B) k2 j7 X7 L% h8 ?   b1, b2 = model2.coef_[0], model2.coef_[1]0 {, T, w" u: `( \
   print('y = {:.4f} + {:.4f}*x1 + {:.4f}*x2'.format(b0, b1, b2)): o, Y5 z  F; k' p2 C( y3 U' Z
   print('R_square =', model2.score(X, y))
7 P% A: c" K9 S' G) s/ o   print('k =', model2.alpha_)+ g/ p5 @, @0 B2 R+ D2 I, S* q
$ U& D7 y+ d! p/ z. e
输出拟合的线性模型的截距、系数以及 R_squared 值,还输出了最佳的正则化参数 alpha。: T8 y4 r! e7 e$ @+ G
这段代码通过 Lasso 回归模型拟合了给定的数据,并展示了不同 alpha 值下的系数变化,最后选择了最佳的 alpha 值进行拟合,并输出了拟合结果和评估指标。
/ j/ [) Z1 O0 F/ [' F- ?' |' P" A/ d- s/ e% R7 w: v( _4 P
" l0 h" A* B2 G

" b, V+ r$ j# K1 W

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-8-25 22:00 , Processed in 0.318555 second(s), 54 queries .

回顶部