QQ登录

只需要一步,快速开始

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

使用 sklearn 进行 LASSO 回归

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

1186

主题

4

听众

2923

积分

该用户从未签到

跳转到指定楼层
1#
发表于 2024-3-15 11:12 |只看该作者 |倒序浏览
|招呼Ta 关注Ta
/ ]( `' w4 t0 L( {
1.导入所需库:
8 [6 a7 M7 R7 M6 M
) [# e4 P; P2 T6 f   import numpy as np0 e/ G# @9 u& y3 \
   import pandas as pd
- x, \0 |  p) N; K   import matplotlib.pyplot as plt( m% M5 `& Z# a' \
   from sklearn.linear_model import Lasso, LassoCV# k% O7 l$ q4 h
, A; Z+ R( J: i5 _# w

/ m" i  E( R! E, p/ h* }& M: E2.定义源数据:
/ _7 h! B! V7 n  F3 E
  S2 w) A! n" _) Y   df = pd.DataFrame({0 f( d5 ~; r& I1 X  c
       'x1': [7, 1, 11, 11, 7, 11, 3],
3 C) E  M3 l  y, Q! ?       'x2': [26, 29, 56, 31, 52, 55, 71],
% @0 B6 V+ k0 Q& Q8 m+ O       'y': [78.5, 74.3, 104.3, 87.6, 95.9, 109.2, 102.7],
: R' e3 w9 m3 F% C% l6 Y   })
" J/ ^3 j6 z9 R
/ i) s2 r$ b, ~# s4 u+ s; a1 t创建了一个包含 x1、x2 和 y 列的 DataFrame,作为原始数据。$ I, C' @( u: z  d3 p9 K- Q# v

( R% \9 `8 L- r' u; W, m9 B3.将数据转换为数组格式:
* e4 R. B3 V( G; H: H; @
- m6 U; F& o5 G+ K   X = np.array(df[['x1', 'x2']])3 M5 v$ h$ K' W
   y = np.array(df[['y']])
2 [5 r) x# _% ]! L+ Z0 v
1 |6 d9 Z. ?' O  a$ i将特征和目标变量分别转换为 NumPy 数组格式。
- u- [% I. i4 |3 v9 O0 E4 J6 t% S: }
; Q1 y* M* C6 M  ~( M9 T( F4.遍历不同的 alpha 值,计算 Lasso 回归模型的拟合结果:
" [- G) W% Y0 A: F: V3 @# N3 |& t/ x1 D& W0 H. {
   k_array = np.logspace(-4, 1.5, 100)
4 C1 U- `* }1 A& [* u   x1_list, x2_list = [], []: m5 z8 u0 ~3 @* w
   for k in k_array:1 l! J$ G1 L) X& `) n. g
       model = Lasso(alpha=k).fit(X, y)
/ T" u. [1 O. T- W# e       x1_list.append(model.coef_[0])4 X' Z0 _- [+ y3 q9 @. z4 y. @
       x2_list.append(model.coef_[1])
$ L- w6 K2 I: C) i5 d/ O2 U$ u5 X8 E: V, s" C, W
使用 Lasso 回归模型,遍历不同的正则化参数 alpha 值,计算不同 alpha 值下 x1 和 x2 的系数。
& u+ b$ w% M  P9 S+ I. _9 b/ m- L' h7 X
5.绘制岭迹图:$ h1 [9 V+ z( z
1 f! \* z+ N. l; `& [% }, E
   plt.scatter(k_array, x1_list)
1 Q" R, [9 e2 n   plt.scatter(k_array, x2_list)
( m' {- O3 D( c$ m! H8 T   plt.plot(k_array, x1_list, label='x1')
# v5 x/ d3 h& D) X   plt.plot(k_array, x2_list, label='x2')4 c& D7 N$ c; j; T% I
   plt.legend(): b& w& Z% g' q4 m+ D
- Q: B" i9 E1 M
使用 plt.scatter() 绘制不同 alpha 值下 x1 和 x2 的系数散点图,并使用 plt.plot() 绘制岭迹图,分别标记了 x1 和 x2 的系数曲线,并添加图例。8 Z, V' H3 J' u; l0 Q, |" V

3 s1 H5 Q% G1 I0 j# t! `6.使用 LassoCV 自动选择最佳 alpha 值:
+ B! U  b& f9 L9 E0 z' Z2 P& |1 D
" Z8 G+ L( E8 w' q; u: W6 `0 \   model2 = LassoCV().fit(X, y)
. U7 J1 R! u% Y
9 G1 v0 R# a3 Q$ b使用 LassoCV 进行交叉验证,自动选择最佳的正则化参数 alpha。/ N( {" ^; q. C( u- \) ]7 t* i; S6 p

3 Z% b( h; w5 F4 Y5 _8 i7.输出模型参数和评估结果:+ m) {1 Q- i2 e" t2 L0 e
+ w, u7 n* M0 _3 ^" i
   b0 = model2.intercept_
; z9 x5 {# R+ O9 ^+ X% q( Z   b1, b2 = model2.coef_[0], model2.coef_[1]% y' d: r! {' J$ i  S( D
   print('y = {:.4f} + {:.4f}*x1 + {:.4f}*x2'.format(b0, b1, b2))  m: z- e- k" U* H; [
   print('R_square =', model2.score(X, y))/ P/ f0 z6 |$ I2 Q# G3 X! T
   print('k =', model2.alpha_)
+ e. ~) @3 _" K' e: N7 d6 F- [' a* q* a6 A4 s% e
输出拟合的线性模型的截距、系数以及 R_squared 值,还输出了最佳的正则化参数 alpha。
7 f! ]+ h6 ^, c# n这段代码通过 Lasso 回归模型拟合了给定的数据,并展示了不同 alpha 值下的系数变化,最后选择了最佳的 alpha 值进行拟合,并输出了拟合结果和评估指标。/ L) N* D9 K( f# R8 `5 h

! V1 F, s3 s( L( }: Y2 r+ Z- Z9 k
# h2 m( N5 i+ H4 ^' m& D# ?

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-21 03:37 , Processed in 0.411289 second(s), 54 queries .

回顶部