数学建模社区-数学中国

标题: 使用 sklearn 进行 LASSO 回归 [打印本页]

作者: 2744557306    时间: 2024-3-15 11:12
标题: 使用 sklearn 进行 LASSO 回归

2 E! Z  M# ?, X" S% }1.导入所需库:' D* H: v# P' f; v% [, Q

4 q! h$ ]8 p  `  G2 d. k* S8 x' J   import numpy as np
( r# r$ O$ ?# }* K# n! Z, b0 o   import pandas as pd7 j+ L. ]7 l- T( ^' _
   import matplotlib.pyplot as plt0 L) z% l+ D$ J; g3 i
   from sklearn.linear_model import Lasso, LassoCV$ D! x  L# t7 {  e  g) M5 \; |
% Z4 g7 c* Q' v# U, b

7 x8 q+ X7 N4 U7 s2.定义源数据:' a6 O. s2 I! K2 Z' O
& j( |8 p! D$ F# {, }/ \5 K
   df = pd.DataFrame({
3 Q) y/ W) ^+ D7 r7 L2 `       'x1': [7, 1, 11, 11, 7, 11, 3],6 }  d7 o+ K2 e/ P( l
       'x2': [26, 29, 56, 31, 52, 55, 71],: d$ R8 C  l7 Y: u1 J; P) m
       'y': [78.5, 74.3, 104.3, 87.6, 95.9, 109.2, 102.7],7 c1 S1 P& \; Q* q( C7 V" e
   })7 F( g- L6 d" S  m2 H2 d

3 ?% e/ |  O$ U' @% }7 n创建了一个包含 x1、x2 和 y 列的 DataFrame,作为原始数据。. L4 @7 u; \% ?- H, D! v

$ t  q4 S, ]# a3.将数据转换为数组格式:
, T$ V( M. P- M' O. G, z0 F. f- ?& v' W, Y& k$ k
   X = np.array(df[['x1', 'x2']])+ T4 Z$ f+ {9 ]1 ^
   y = np.array(df[['y']])
. F& ]8 \$ h2 S( R
: w' v# I+ N& }" a将特征和目标变量分别转换为 NumPy 数组格式。
- [" |+ P6 q/ N. Q- p  L, P2 x
; P8 E# i$ A4 w$ A/ ~4.遍历不同的 alpha 值,计算 Lasso 回归模型的拟合结果:3 g0 w& B$ a/ x
; O) @* t  X& y1 B9 q7 ~3 K
   k_array = np.logspace(-4, 1.5, 100)
' L3 Z9 p; k' {1 _8 B   x1_list, x2_list = [], []  X; ?/ V6 t3 R3 q$ H6 F4 S
   for k in k_array:; R8 g/ I1 t+ a  ?- V9 @& c
       model = Lasso(alpha=k).fit(X, y)
9 u. s. y$ c4 r7 `2 v. G% A3 g       x1_list.append(model.coef_[0])
! N8 D1 I( [% ^       x2_list.append(model.coef_[1])* l, A2 D: \, ]) f8 ?% u: F
) r) P5 R0 }% W; ^
使用 Lasso 回归模型,遍历不同的正则化参数 alpha 值,计算不同 alpha 值下 x1 和 x2 的系数。
- _5 F; K1 m) D: {% @5 b9 w
! Y+ \! U( m8 w! T' i- Y3 Q7 R5.绘制岭迹图:
( c/ k( u2 n7 l* w% B! \/ h# X1 ~  ^5 u5 Z
   plt.scatter(k_array, x1_list)2 g( x; @+ X- v4 `) N
   plt.scatter(k_array, x2_list)
/ L* t) {7 o- p; A& T4 {   plt.plot(k_array, x1_list, label='x1')
! S6 v$ @* w' n5 ?2 e   plt.plot(k_array, x2_list, label='x2')
( b3 ~+ U0 u9 T0 u$ O7 t/ D   plt.legend()! v$ l/ u2 n3 z
) W7 m. p* u4 O% ]! E& z' u
使用 plt.scatter() 绘制不同 alpha 值下 x1 和 x2 的系数散点图,并使用 plt.plot() 绘制岭迹图,分别标记了 x1 和 x2 的系数曲线,并添加图例。8 {# E# p! ?" p* m
3 r) A8 B6 s2 a. c! a" f0 Q8 s
6.使用 LassoCV 自动选择最佳 alpha 值:( q  A8 T  j' d# l
& D6 _* Y6 S4 O) [' W. J6 g
   model2 = LassoCV().fit(X, y)
" ^3 B% e6 P" {! Z% \' X8 @/ B7 [+ n! ]8 v
使用 LassoCV 进行交叉验证,自动选择最佳的正则化参数 alpha。3 V' A4 d+ Q0 q" ~% @0 P
  D2 B, j: o. D( w6 Q! Y
7.输出模型参数和评估结果:
& ~5 P7 n' t6 S2 I- W) Q* A0 Z
% l7 J5 S+ W6 J( k& W   b0 = model2.intercept_1 l+ L; L1 ?! m% K  Y  G
   b1, b2 = model2.coef_[0], model2.coef_[1]$ N  `6 e+ E0 m" V4 A' j, W1 m
   print('y = {:.4f} + {:.4f}*x1 + {:.4f}*x2'.format(b0, b1, b2))4 ?% _0 b( F6 Z/ w1 l" S
   print('R_square =', model2.score(X, y)): O4 I1 w1 M" [7 O
   print('k =', model2.alpha_)
1 O6 `, B, F8 n$ d) T
# l5 c: g3 f  W/ l2 c5 \输出拟合的线性模型的截距、系数以及 R_squared 值,还输出了最佳的正则化参数 alpha。
% w0 O* x7 T" D1 F" f9 x' D  J这段代码通过 Lasso 回归模型拟合了给定的数据,并展示了不同 alpha 值下的系数变化,最后选择了最佳的 alpha 值进行拟合,并输出了拟合结果和评估指标。
2 m2 k3 ?- `$ W8 P* t" V7 Q- d3 ~0 c# q* T. X
1 h) \% Y8 N: T  E- w; V

. h% w7 p$ j: S: G: J

12.lasso_regression.py

1.16 KB, 下载次数: 0, 下载积分: 体力 -2 点

售价: 2 点体力  [记录]  [购买]






欢迎光临 数学建模社区-数学中国 (http://www.madio.net/) Powered by Discuz! X2.5