QQ登录

只需要一步,快速开始

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

使用 sklearn 进行 LASSO 回归

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

1198

主题

4

听众

2977

积分

该用户从未签到

跳转到指定楼层
1#
发表于 2024-3-15 11:12 |只看该作者 |倒序浏览
|招呼Ta 关注Ta
4 B# Z7 ^/ _" r/ s; M3 n3 [
1.导入所需库:& t- k( ^! Y" b5 b' {
5 S0 S4 m/ w1 ~. d
   import numpy as np
& B# _' s/ M! h   import pandas as pd* q2 b+ G! s0 H6 b4 B
   import matplotlib.pyplot as plt0 P/ S% G: u" f$ F% R/ g
   from sklearn.linear_model import Lasso, LassoCV/ @4 M! L4 G  A* O' B; K' d3 j
4 @1 @# ^& T3 n% M- k

/ i" n3 g5 D7 D% ]' C  }* S) L/ r2.定义源数据:$ f# p  s  M. E0 ^

, G. K/ {2 r, m1 m4 a- N/ F' ]   df = pd.DataFrame({
% R; @$ C5 Q* Y9 T9 \       'x1': [7, 1, 11, 11, 7, 11, 3],0 R+ a0 t; |2 Q
       'x2': [26, 29, 56, 31, 52, 55, 71],- D$ t0 s3 ~: K
       'y': [78.5, 74.3, 104.3, 87.6, 95.9, 109.2, 102.7],$ [6 K0 p' k8 g5 O3 z3 [6 M
   })( v* u6 j: I8 v! b
# v- a, Z, g8 F6 s8 P! o
创建了一个包含 x1、x2 和 y 列的 DataFrame,作为原始数据。
" [6 Q/ `! ~2 O8 J2 y8 a
. X9 F: n; d; V' Q3.将数据转换为数组格式:
' ]. \9 Z* @; Q* M4 x  g: i0 f6 D; h9 {. D/ b4 ^0 l( ?
   X = np.array(df[['x1', 'x2']])2 M# H! F& H2 E" G" W8 C# ?5 E
   y = np.array(df[['y']])
6 L' J: j/ `5 P4 Y- P
. q+ n" h: y% n% j& x2 o将特征和目标变量分别转换为 NumPy 数组格式。
1 k1 S7 z  D* ]8 ]/ ^# i9 \3 s0 Q5 ^- a
4.遍历不同的 alpha 值,计算 Lasso 回归模型的拟合结果:
  g& O8 F2 l2 A" q- t
7 q+ c) ^4 Z* k- [   k_array = np.logspace(-4, 1.5, 100)
/ p# b( w1 @  m& \+ u. ?# w   x1_list, x2_list = [], []
, `, J. v4 k' q$ W   for k in k_array:
3 F. k8 t9 l: q       model = Lasso(alpha=k).fit(X, y)
9 h+ P1 X* E' [7 R       x1_list.append(model.coef_[0])
$ t! k8 z, C" i* v' t% `       x2_list.append(model.coef_[1])& _" x, c9 Q. S# B" J/ ~

% j# l. U9 E  _' L! h! G! G, U6 ^使用 Lasso 回归模型,遍历不同的正则化参数 alpha 值,计算不同 alpha 值下 x1 和 x2 的系数。# ~% z- x* @' g7 k! T
( C0 D5 i2 A7 \/ \- `9 p: l7 E
5.绘制岭迹图:, O6 {1 b( |* {; n* Y

( J; H6 U1 f3 j0 m, K4 F/ \, q   plt.scatter(k_array, x1_list)6 b8 d! [' O! h/ D
   plt.scatter(k_array, x2_list), d( j7 ?  u+ j& D2 P
   plt.plot(k_array, x1_list, label='x1')
5 i& X- c" o$ z# |   plt.plot(k_array, x2_list, label='x2')
/ l) H0 S+ \. V5 j- J   plt.legend(), r% Q3 Y3 L" L' B7 r. s

" x# F4 K( h; X' J" F" K, \使用 plt.scatter() 绘制不同 alpha 值下 x1 和 x2 的系数散点图,并使用 plt.plot() 绘制岭迹图,分别标记了 x1 和 x2 的系数曲线,并添加图例。
0 A9 H9 n9 j( _1 I! h% q
. Z2 W0 }( t0 }4 ?# R6.使用 LassoCV 自动选择最佳 alpha 值:
2 p4 R  o& q3 b
* f  q* [  O. D* @: f   model2 = LassoCV().fit(X, y)
2 n' v6 c8 @  g4 Q+ Y/ G
/ H5 a2 E: r% Z5 W$ n- y使用 LassoCV 进行交叉验证,自动选择最佳的正则化参数 alpha。
, _. Q/ q5 s  ^9 K8 Z1 _" R" s4 ]! X2 ^' y8 p
7.输出模型参数和评估结果:
0 j: b. v/ H( O$ |: k5 }( i* l
) U- D! c. H; q* S, |& G9 Z$ r1 |   b0 = model2.intercept_
  d- U, S; H: ~   b1, b2 = model2.coef_[0], model2.coef_[1]# P: n% ^  r2 z: c5 A* k" a+ e
   print('y = {:.4f} + {:.4f}*x1 + {:.4f}*x2'.format(b0, b1, b2))% v. N. @' J) W& F7 Q2 b
   print('R_square =', model2.score(X, y))' y0 W: D1 X# w) D
   print('k =', model2.alpha_)0 G& M# I+ v4 f: V* O$ `6 N! h
8 a1 {2 D- z/ z, T; i' @
输出拟合的线性模型的截距、系数以及 R_squared 值,还输出了最佳的正则化参数 alpha。
3 G0 r: T+ h# D这段代码通过 Lasso 回归模型拟合了给定的数据,并展示了不同 alpha 值下的系数变化,最后选择了最佳的 alpha 值进行拟合,并输出了拟合结果和评估指标。+ v2 V5 x; _! |7 L

! t2 S: v% _) i9 E. [+ a7 ^, u& \0 Q, V) D( V9 m7 R2 x5 t# W, R

' Y9 y; g% D) y6 p  f. X3 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, 2026-9-26 07:19 , Processed in 0.559459 second(s), 54 queries .

回顶部