QQ登录

只需要一步,快速开始

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

使用 sklearn 进行 LASSO 回归

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

1176

主题

4

听众

2887

积分

该用户从未签到

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

5 A7 y0 k' R, c1.导入所需库:( V5 i) Z2 C1 G+ Q4 c
- F1 y9 A1 t! u- q! M0 L8 ]
   import numpy as np$ p' w$ P5 I& [  Z, r+ y. o" ~' ^# y
   import pandas as pd; y# @, x2 l1 Q  g
   import matplotlib.pyplot as plt
% w( g) I; t& Z/ h+ o! c   from sklearn.linear_model import Lasso, LassoCV
& y) _* ]& g8 b, @; x4 o! d  ]0 o! U1 v# J  T: F# |2 Q0 q
) N# C$ n! g$ Z5 K% [
2.定义源数据:+ I# n! y" @! K

8 b! a& Z6 z7 j# m2 u2 f9 ?3 B/ u   df = pd.DataFrame({
2 m7 r- F( `1 ^% a2 S; \" H+ R+ j       'x1': [7, 1, 11, 11, 7, 11, 3],9 o6 |9 T, w1 Y; a
       'x2': [26, 29, 56, 31, 52, 55, 71],
! T8 H3 m; K; M3 D" m- _: s! e       'y': [78.5, 74.3, 104.3, 87.6, 95.9, 109.2, 102.7],9 n" i8 |) F" T
   })8 T3 a$ y3 t3 {! a; R- K
+ d9 a7 ^9 p4 |6 P. H/ {1 R1 m: [
创建了一个包含 x1、x2 和 y 列的 DataFrame,作为原始数据。
, N1 @' F& t/ v9 U" c8 ~* t% ^6 i( }9 q: o- b- u( b9 F
3.将数据转换为数组格式:
1 d  {( Z& }! ~0 _
2 Q4 h( W% h/ G5 a   X = np.array(df[['x1', 'x2']])
4 t- ~  [' \+ h6 \9 q" l   y = np.array(df[['y']])" k  V" s  _1 Z( }, q

+ |$ `% e2 @4 V2 c将特征和目标变量分别转换为 NumPy 数组格式。, g, O1 M8 p) B4 H' S5 r
" s+ B  L; k" f- p* M
4.遍历不同的 alpha 值,计算 Lasso 回归模型的拟合结果:* O% C& s& O' {0 Z( b

5 x1 L9 c  C$ f) U' t' r0 y   k_array = np.logspace(-4, 1.5, 100)+ m2 b5 O+ S1 E
   x1_list, x2_list = [], []
$ i- ?: o/ d$ a   for k in k_array:
9 K4 }& y7 F0 C       model = Lasso(alpha=k).fit(X, y)
5 D$ X1 \5 h; Z5 Z       x1_list.append(model.coef_[0])6 ]* v' |) c& p1 S2 `& w
       x2_list.append(model.coef_[1])2 p/ E1 R9 D, k# @& i3 a$ O1 W

0 |; I( ]8 L* C+ s. T; f9 S使用 Lasso 回归模型,遍历不同的正则化参数 alpha 值,计算不同 alpha 值下 x1 和 x2 的系数。
6 O9 L" v9 P9 X5 S/ _7 y+ B
5 }* B, x7 V. c& B8 [5.绘制岭迹图:/ |4 f0 _4 P  K8 f' ~2 k6 U; A
3 H! R  n2 M' E  Z; {4 J
   plt.scatter(k_array, x1_list)
; @( B& T, J9 V" [  E. s   plt.scatter(k_array, x2_list)3 Y' ]) m2 x4 ?5 f" a. @; H
   plt.plot(k_array, x1_list, label='x1')
( y4 g) a( X8 n* Y# Z6 v; e, `0 M   plt.plot(k_array, x2_list, label='x2')
. X8 o- r! G& b2 f/ ?4 J! |   plt.legend()
& m) f0 T# ]" z9 J! M- O
9 E! d8 v; w6 \( j; i使用 plt.scatter() 绘制不同 alpha 值下 x1 和 x2 的系数散点图,并使用 plt.plot() 绘制岭迹图,分别标记了 x1 和 x2 的系数曲线,并添加图例。
) r" c5 f- B1 O$ k
7 v* I: {) Y9 U/ Q% q$ [6.使用 LassoCV 自动选择最佳 alpha 值:) f5 w0 F8 p  ~- J4 B+ `$ |2 v# S
7 l4 g/ N/ s- O: z: h
   model2 = LassoCV().fit(X, y)
1 |) }" y' b; O9 z2 C5 H7 _2 N. j% r" |" p
使用 LassoCV 进行交叉验证,自动选择最佳的正则化参数 alpha。# _( D1 K& H8 i
* Y, O7 A; C' R5 [: u. y
7.输出模型参数和评估结果:2 j2 {; a9 Q! x7 z

$ |2 D7 C6 A- L   b0 = model2.intercept_
8 k5 x" f3 J' g# r; \   b1, b2 = model2.coef_[0], model2.coef_[1]" {8 \$ p8 y/ R
   print('y = {:.4f} + {:.4f}*x1 + {:.4f}*x2'.format(b0, b1, b2))
# T/ {- U( z- e   print('R_square =', model2.score(X, y))
4 w9 c8 t& S6 D4 Q+ h5 k' k" c   print('k =', model2.alpha_)
) {; m& b5 ?" W9 V7 k5 l2 G, v. r: L9 W7 r. t; k$ D& m
输出拟合的线性模型的截距、系数以及 R_squared 值,还输出了最佳的正则化参数 alpha。
; Q& N% h! @+ w; C- S: H  y这段代码通过 Lasso 回归模型拟合了给定的数据,并展示了不同 alpha 值下的系数变化,最后选择了最佳的 alpha 值进行拟合,并输出了拟合结果和评估指标。1 \" I0 k0 e1 h, n% k, n
6 H: E+ ~* \1 K  E3 O/ A
, @/ f2 F0 E6 p- M% R9 ~
6 g5 l( O- {& X" [  c

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 12:16 , Processed in 0.454720 second(s), 55 queries .

回顶部