QQ登录

只需要一步,快速开始

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

使用 sklearn 进行 LASSO 回归

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

1189

主题

4

听众

2934

积分

该用户从未签到

跳转到指定楼层
1#
发表于 2024-3-15 11:12 |只看该作者 |正序浏览
|招呼Ta 关注Ta
$ x3 e3 o. w1 x% b
1.导入所需库:
" C, p$ N5 \# c  v0 K, M
; ^0 j, [: d! M1 p   import numpy as np
! l& O5 A& h) A7 |0 Z   import pandas as pd
/ t, @# g0 g: @: _  R8 v, H   import matplotlib.pyplot as plt7 e% v% v, L+ [2 ?, p3 Q7 {* ~
   from sklearn.linear_model import Lasso, LassoCV
* G$ r) a+ V7 J4 K
4 r+ g  k% @9 W3 O) H: \; ^- R, C; z9 V) l$ Z* w4 Z6 e& ~* u
2.定义源数据:
0 |  E; X" s: ]2 R& X' m7 ?9 q! |; q6 o8 g( E2 F& T3 T
   df = pd.DataFrame({& j, I4 u0 u* Z0 u# h
       'x1': [7, 1, 11, 11, 7, 11, 3],: N( s& x: ?7 }/ O
       'x2': [26, 29, 56, 31, 52, 55, 71],8 w. v6 w. E: Q* M0 v) M
       'y': [78.5, 74.3, 104.3, 87.6, 95.9, 109.2, 102.7],  N4 X: v/ k/ U% Y. Q! a: C5 l6 s
   })% F. t$ J, V0 N

) F* U1 ~8 r$ a  I: m创建了一个包含 x1、x2 和 y 列的 DataFrame,作为原始数据。
2 B6 o4 {# V; h$ m
) ]  M1 v2 b) P3.将数据转换为数组格式:9 y. @" ~( E5 n8 a/ L
' {! t  N/ C5 N& Z2 n2 N
   X = np.array(df[['x1', 'x2']])
% I8 n" }( ~) {6 k   y = np.array(df[['y']]): R* P' x3 n. y5 F1 P
# f; x+ U" H$ _% @& `! k1 t
将特征和目标变量分别转换为 NumPy 数组格式。, v7 `, i7 S, E# G

2 W7 g) `( m) h1 [0 h4.遍历不同的 alpha 值,计算 Lasso 回归模型的拟合结果:+ @" d' E( z) A6 n, u

3 H& C, g+ }' a! B" J* _/ I   k_array = np.logspace(-4, 1.5, 100)
1 C, y1 b) Y/ t$ d2 F   x1_list, x2_list = [], []7 a7 P: G/ b# `
   for k in k_array:% p( Q, a" a& _6 J
       model = Lasso(alpha=k).fit(X, y)
  ?) |9 P2 L0 n2 {       x1_list.append(model.coef_[0])
( w( K/ T' @0 @* ]* ]& r       x2_list.append(model.coef_[1])8 w( |0 M. e4 D7 M, ~7 l2 y
4 U4 m  W2 M1 x9 @2 M- T) [# S
使用 Lasso 回归模型,遍历不同的正则化参数 alpha 值,计算不同 alpha 值下 x1 和 x2 的系数。& n! o8 m! ]: D, _; x" @
+ j9 ^6 ]' T7 G% t
5.绘制岭迹图:
$ T$ u2 F/ E% U9 N$ y
  Y! ]6 a3 w! k3 x2 @   plt.scatter(k_array, x1_list)7 p0 M# o1 k+ n" W1 |9 e5 [
   plt.scatter(k_array, x2_list)' Y! p) d. V4 w+ C4 k$ Y
   plt.plot(k_array, x1_list, label='x1')
- M/ G2 f9 B) S6 ^   plt.plot(k_array, x2_list, label='x2')
- ?' y4 i" I2 B* ]9 p   plt.legend()& F! z8 q( L) I. o

, R3 ?4 z9 ^: y- `( d+ @使用 plt.scatter() 绘制不同 alpha 值下 x1 和 x2 的系数散点图,并使用 plt.plot() 绘制岭迹图,分别标记了 x1 和 x2 的系数曲线,并添加图例。
) {$ _' _+ \8 B: V7 ?# i4 m& F4 D; ]0 h* y( X
6.使用 LassoCV 自动选择最佳 alpha 值:6 k2 V8 o1 a0 `' u2 t) _

/ v4 Y, e/ P" N* F, U   model2 = LassoCV().fit(X, y)7 D$ U- g$ n+ S& G3 S, h

. Q7 f+ {1 J4 v/ c使用 LassoCV 进行交叉验证,自动选择最佳的正则化参数 alpha。2 [9 w+ L& ]' Y7 k
4 P& N) ^# p  ~
7.输出模型参数和评估结果:! A; i8 e) M3 j/ J( r8 D

) P5 X9 g6 g7 ]  K5 t! w   b0 = model2.intercept_& L/ O9 t8 W" f0 ~  `9 T  D3 Z) P" m4 }
   b1, b2 = model2.coef_[0], model2.coef_[1], u* z4 @" R- H3 u1 x& o
   print('y = {:.4f} + {:.4f}*x1 + {:.4f}*x2'.format(b0, b1, b2))
* t1 z/ i0 N! a5 K: b   print('R_square =', model2.score(X, y))
. I0 Q6 K  O/ C   print('k =', model2.alpha_)1 ~! T, B: e7 \6 L

( e1 l# A6 [7 x) l# [9 \6 Q  f- Z输出拟合的线性模型的截距、系数以及 R_squared 值,还输出了最佳的正则化参数 alpha。8 p5 ~# M8 h$ x- q
这段代码通过 Lasso 回归模型拟合了给定的数据,并展示了不同 alpha 值下的系数变化,最后选择了最佳的 alpha 值进行拟合,并输出了拟合结果和评估指标。
3 a+ I$ P' l2 B- R; S% B+ V! @8 o
; b! k" z6 O8 K, y9 W: [  x; s! {( u4 Q' n) [% b, ?4 o. E

0 N. P% d. `. N+ S0 P/ }' s0 `# z

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-6-20 13:15 , Processed in 0.428326 second(s), 55 queries .

回顶部