QQ登录

只需要一步,快速开始

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

使用 sklearn 进行 LASSO 回归

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

1186

主题

4

听众

2922

积分

该用户从未签到

跳转到指定楼层
1#
发表于 2024-3-15 11:12 |只看该作者 |倒序浏览
|招呼Ta 关注Ta
" M+ Q9 S# X# P0 Q3 l
1.导入所需库:* a& S+ A, N- R) d4 q+ }( z' W

: v1 }' M# i9 K7 _$ q5 L  k7 v9 |   import numpy as np4 h* j+ T8 @& u; u% \# Z* |
   import pandas as pd0 G" q) c% v6 Z3 y$ S( U( K
   import matplotlib.pyplot as plt
; |5 y7 a) M# z* j6 |   from sklearn.linear_model import Lasso, LassoCV6 R% Y) X/ z8 p4 W! x, f' r

' c( G6 _: C. b) A/ {5 P8 j
$ I0 E' Q; V/ {  W5 p2.定义源数据:
$ J3 s/ l* @$ d% T
% C2 v% }* c6 M) \$ c* l* R   df = pd.DataFrame({
( D* @1 I* s. v9 u" m  h       'x1': [7, 1, 11, 11, 7, 11, 3],
( P, ~2 X; Q2 r& C2 H1 e7 z       'x2': [26, 29, 56, 31, 52, 55, 71],
; M3 J! }* c7 r, d, n       'y': [78.5, 74.3, 104.3, 87.6, 95.9, 109.2, 102.7],  d8 w0 R& }/ D, I, |1 V
   })- w8 a, h& k% B) Y0 T, n* q. S
9 @- O/ Y  t7 t, P
创建了一个包含 x1、x2 和 y 列的 DataFrame,作为原始数据。4 r( q4 L4 U. f7 N- l& E8 @. ]

$ L9 {" E: n% s3.将数据转换为数组格式:/ e3 k1 j  M; y4 }0 E
  x8 b( ~$ c) u- r* V6 I
   X = np.array(df[['x1', 'x2']]); c8 K+ G! A& b7 U, x% x; Z
   y = np.array(df[['y']])
9 t% c; m! I& _  J5 R. F6 h
# f( }+ ^; z5 A" A8 R将特征和目标变量分别转换为 NumPy 数组格式。
; R" o5 i1 ~# ]. C8 A# y8 m  z$ F3 R! {
4.遍历不同的 alpha 值,计算 Lasso 回归模型的拟合结果:
8 z0 U* J3 y" V" B. c/ t
# H9 _, s$ L' U5 V   k_array = np.logspace(-4, 1.5, 100)+ d6 e" ]! G% g1 b5 V; Y3 c+ E9 X
   x1_list, x2_list = [], []
$ N( ]; c3 o' _+ Z% `   for k in k_array:, Z8 p: X/ z' v* j5 t8 @" P5 I
       model = Lasso(alpha=k).fit(X, y)
; \% G/ j! Y! g! g  s       x1_list.append(model.coef_[0]). I  T. M' u1 W0 f. @
       x2_list.append(model.coef_[1])
7 _7 s, y  b; [6 Z3 p
1 z0 p/ m6 S8 S! V* M& b* }使用 Lasso 回归模型,遍历不同的正则化参数 alpha 值,计算不同 alpha 值下 x1 和 x2 的系数。/ w) o5 W2 d8 i7 C) ~0 g

/ l4 x6 l: [. {8 M: X: J5.绘制岭迹图:! K4 ]5 q4 w6 {$ |/ p

9 Y9 q4 \1 n9 S* Y) M" @; w   plt.scatter(k_array, x1_list)
2 X& L8 j$ B6 [" v7 ^5 d# f5 h   plt.scatter(k_array, x2_list)8 B8 t' L7 N! F* d& u* I
   plt.plot(k_array, x1_list, label='x1')- `% @  B& a7 B. o  }
   plt.plot(k_array, x2_list, label='x2')
7 E( ?9 e0 h) u3 n( n! f# t: f   plt.legend()4 M! k5 P  ^5 {+ Q! T7 E

+ S+ A; B2 r% |! r; R1 q8 O6 N使用 plt.scatter() 绘制不同 alpha 值下 x1 和 x2 的系数散点图,并使用 plt.plot() 绘制岭迹图,分别标记了 x1 和 x2 的系数曲线,并添加图例。
! d' R+ M2 u# X  _! O4 Q( Z/ N4 `
4 S3 d$ n: J7 u% y' L5 E6.使用 LassoCV 自动选择最佳 alpha 值:
* {* M% |' N* N% o& j4 m" G. `1 c* @
   model2 = LassoCV().fit(X, y); ]0 W7 h, ]7 F- `% @. \

( ]  O2 e6 y4 N  u0 D使用 LassoCV 进行交叉验证,自动选择最佳的正则化参数 alpha。# H* {+ u2 j+ R8 Q7 L9 \

2 W6 r4 M/ y: t4 ?4 Q( x7.输出模型参数和评估结果:
6 ?, c- ?/ H& M3 r/ ^7 S
8 G4 J: Q: }5 K  y2 B9 F, F   b0 = model2.intercept_3 D$ `) e9 X8 ]8 v& L
   b1, b2 = model2.coef_[0], model2.coef_[1]
' J6 v7 `/ `- `   print('y = {:.4f} + {:.4f}*x1 + {:.4f}*x2'.format(b0, b1, b2))
& O2 E6 p+ I2 S, a- ?   print('R_square =', model2.score(X, y))
" t" c, N( w6 H) h   print('k =', model2.alpha_)
2 L! E. H/ s- t8 ]+ O8 a$ A# T
* _; b. _! _4 o/ P7 W7 Y输出拟合的线性模型的截距、系数以及 R_squared 值,还输出了最佳的正则化参数 alpha。
& \; c" u) j7 g/ [2 ^+ V! I这段代码通过 Lasso 回归模型拟合了给定的数据,并展示了不同 alpha 值下的系数变化,最后选择了最佳的 alpha 值进行拟合,并输出了拟合结果和评估指标。
/ [" s7 q/ d9 |' u  v# Z  ?. q1 l. Z" ^& ~; h

; D) Q& E1 D: w5 Z
" v  N. u1 A5 m9 p$ [( l

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-13 18:54 , Processed in 0.421025 second(s), 55 queries .

回顶部