QQ登录

只需要一步,快速开始

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

使用 sklearn 进行 LASSO 回归

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

1176

主题

4

听众

2887

积分

该用户从未签到

跳转到指定楼层
1#
发表于 2024-3-15 11:12 |只看该作者 |正序浏览
|招呼Ta 关注Ta
8 i! D. b) }; n! h7 A
1.导入所需库:
0 y2 y( K" r$ j+ Q, \3 D" O* }" K3 \4 i0 h2 C! ~
   import numpy as np
, W! P6 E- J1 l4 d   import pandas as pd! ?9 m  b0 U7 ?* h# j& Y$ F
   import matplotlib.pyplot as plt5 ]& _  d7 b+ q# G0 c
   from sklearn.linear_model import Lasso, LassoCV
, c) [& u9 d- O9 T: V
/ i4 [+ k* l1 a' Z( v& {+ l! U. h1 T+ M
2.定义源数据:, U# I* G0 `1 i: X7 G% K2 z
! w* Q1 B5 @( t) ~
   df = pd.DataFrame({% h7 Z) J/ ?# t" {0 @" p
       'x1': [7, 1, 11, 11, 7, 11, 3],
: P% t! H# G+ ]3 q       'x2': [26, 29, 56, 31, 52, 55, 71],
3 [7 `& Y  g1 A1 G/ a       'y': [78.5, 74.3, 104.3, 87.6, 95.9, 109.2, 102.7],$ J. L1 y5 E6 E  c
   })
% g% E* v: {* Z+ C
* U; o' d/ y' z创建了一个包含 x1、x2 和 y 列的 DataFrame,作为原始数据。
7 J1 P2 S+ G: ?6 Y( {' ?, M# O1 }/ J2 o
3.将数据转换为数组格式:; X# ~2 I  m! v

; h8 U/ i* a1 g- h. }0 D   X = np.array(df[['x1', 'x2']])& A7 w) X8 {: K  T. F! j
   y = np.array(df[['y']]): |, ]+ t& h& u) s7 Y
5 C& E$ j/ Y( y4 ~
将特征和目标变量分别转换为 NumPy 数组格式。
9 i6 c1 X. M! d+ Y, ^% N
4 r% j  n* [9 t  X$ K) `5 D4.遍历不同的 alpha 值,计算 Lasso 回归模型的拟合结果:  ]+ [/ I3 }1 T0 I  g+ b3 A
# a4 S* r7 _# j) p/ i
   k_array = np.logspace(-4, 1.5, 100)1 u0 O; h4 X, _: e+ t5 q0 ~
   x1_list, x2_list = [], []4 g7 i" V- c4 K. B$ c6 j  _! h
   for k in k_array:
( \5 P0 a8 A" O+ A       model = Lasso(alpha=k).fit(X, y)
" F1 Q- ~2 K& w* s- H       x1_list.append(model.coef_[0])4 d4 m/ `; l6 G7 u  t% v
       x2_list.append(model.coef_[1]). D1 [& C9 l. ~8 s8 p# ?' g. I
" Y5 A- k( Z! o$ T9 n& L/ |! c
使用 Lasso 回归模型,遍历不同的正则化参数 alpha 值,计算不同 alpha 值下 x1 和 x2 的系数。" c& s1 L5 x5 N6 x# R- ~- k! g$ f

/ _! y8 Y1 Z% [% N6 S( g  z5.绘制岭迹图:
2 P, r* Y! E" c4 O: l" ?* n3 M, |& m! f( H+ @0 }
   plt.scatter(k_array, x1_list)
& Y4 q' U: {2 h5 y1 c2 {   plt.scatter(k_array, x2_list)
" w* v5 j3 y$ ]4 g  z. _& s   plt.plot(k_array, x1_list, label='x1')
" f1 f* Q7 _% X) n$ d/ I   plt.plot(k_array, x2_list, label='x2')2 n2 q! M8 }) O! V
   plt.legend()
0 {3 w  ?* q, M1 e- ]) k5 D
) k: f8 X) q% m. s/ `使用 plt.scatter() 绘制不同 alpha 值下 x1 和 x2 的系数散点图,并使用 plt.plot() 绘制岭迹图,分别标记了 x1 和 x2 的系数曲线,并添加图例。* P. E. q6 G4 n+ y- X4 Z! `' I; {

$ X" a; s, u" {, L5 m- m" D/ q, k6.使用 LassoCV 自动选择最佳 alpha 值:
8 \' K8 f+ O! R# w% ?0 f/ S" K+ H- [( l5 F9 T% ?! y. R
   model2 = LassoCV().fit(X, y)+ o7 S# O& G% h6 o' `
) _+ H/ ^$ z3 \9 Y( i
使用 LassoCV 进行交叉验证,自动选择最佳的正则化参数 alpha。
3 D( A& Y" {! e- g* s& v+ u. `" M7 @! D- c$ _* O
7.输出模型参数和评估结果:6 v! i( b: K* ^6 _% ~5 {  u
+ e; }# m" A& y) d; U
   b0 = model2.intercept_
" M) {2 m' g( ]8 b8 a! y4 `   b1, b2 = model2.coef_[0], model2.coef_[1]' A6 X- Y$ H' Z+ U# O# D: t. a
   print('y = {:.4f} + {:.4f}*x1 + {:.4f}*x2'.format(b0, b1, b2))
3 ?( s9 ^, \% y' `* n; {+ V/ ^% G   print('R_square =', model2.score(X, y))
8 x& O4 O- h) x( Y& L3 g   print('k =', model2.alpha_)0 |1 E7 L2 j2 _8 p
) `4 h6 I2 w" |6 A! J# k; Z
输出拟合的线性模型的截距、系数以及 R_squared 值,还输出了最佳的正则化参数 alpha。
' t& {$ l2 ?* B% G% T这段代码通过 Lasso 回归模型拟合了给定的数据,并展示了不同 alpha 值下的系数变化,最后选择了最佳的 alpha 值进行拟合,并输出了拟合结果和评估指标。! B1 w/ o8 ^" o0 ]+ C! X

0 @3 @' ^* i" {* M5 U3 v
$ J. D3 P2 B5 I1 u) Q- q" d: K8 V0 r

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, 2025-10-26 02:03 , Processed in 0.426025 second(s), 58 queries .

回顶部