数学建模社区-数学中国

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

作者: 2744557306    时间: 2024-3-15 11:12
标题: 使用 sklearn 进行 LASSO 回归
$ q" |" d2 c+ ?. x2 B
1.导入所需库:9 Z, g2 U7 o; J8 Z7 t& C3 o

2 q7 ^6 E: O) V$ ^$ Q1 I8 E# f   import numpy as np0 _. f* D# {0 k+ C) G# @/ O
   import pandas as pd) l1 I  ~4 _8 L3 Z4 s+ Q7 D- R+ J9 J0 y
   import matplotlib.pyplot as plt
7 b) U" \  x2 v, P. h   from sklearn.linear_model import Lasso, LassoCV
  b4 t+ d6 L& o5 `8 u9 u: L/ L3 g4 M- y$ d
6 V. `+ i& ^& G( B- [# S
2.定义源数据:: t) r: w2 f: \  @6 o
% z4 m: u9 S& r, ^5 r% W
   df = pd.DataFrame({9 g3 k" _4 B- x) R+ k: Z! V
       'x1': [7, 1, 11, 11, 7, 11, 3],+ u$ G$ g2 K0 b
       'x2': [26, 29, 56, 31, 52, 55, 71],
( w9 j8 S- S8 v7 |% e( t       'y': [78.5, 74.3, 104.3, 87.6, 95.9, 109.2, 102.7],
8 u+ }6 }( p% A- ]- Q' _6 `   }): b" w) ?1 l- Q0 a  c9 M
% k) l7 s1 [% a3 A1 U6 h! J6 X% \
创建了一个包含 x1、x2 和 y 列的 DataFrame,作为原始数据。
$ F7 w* Y* W' G9 a, S3 P. v# O# ~: ~) [! L- |( o
3.将数据转换为数组格式:0 Y) v/ Y$ j2 |: z

6 K8 F0 q4 T  B8 C   X = np.array(df[['x1', 'x2']])
/ H- _. V. Q: V: R8 }; s   y = np.array(df[['y']])1 ?) G9 {' N+ {
& {  D8 F3 x( |
将特征和目标变量分别转换为 NumPy 数组格式。0 z! Y0 {5 }  X
+ n3 k  ]. N- k# t+ f+ O
4.遍历不同的 alpha 值,计算 Lasso 回归模型的拟合结果:
( Y( t4 @7 n8 M, B! k) R
$ q" \; @. o- m: N' Y1 u   k_array = np.logspace(-4, 1.5, 100)+ y, o, E7 {1 x3 Y
   x1_list, x2_list = [], []( T4 f7 y: S/ \! c. p. e
   for k in k_array:, S5 q5 T/ z; d  D: s# n
       model = Lasso(alpha=k).fit(X, y)4 ]; R3 R4 Y. _6 V) C- b0 R9 U
       x1_list.append(model.coef_[0])
9 ^1 ?1 E; Y& A# @       x2_list.append(model.coef_[1])8 X3 |% C4 D; g! u8 O: ?. l

4 ?5 t' |! H+ O3 x使用 Lasso 回归模型,遍历不同的正则化参数 alpha 值,计算不同 alpha 值下 x1 和 x2 的系数。
9 |, ]6 O  Y6 n9 k$ @4 c8 b! b& K; m" G4 H9 q# i/ Q
5.绘制岭迹图:
1 i6 ?- h/ X9 j% S5 l: l6 k; q/ \$ L: s5 n4 Q
   plt.scatter(k_array, x1_list)
8 }4 e4 e% q/ j3 G( b   plt.scatter(k_array, x2_list)
, s7 A" k7 N2 F6 _   plt.plot(k_array, x1_list, label='x1')) H4 K! t1 m- ^/ P# u& v1 r) _6 h
   plt.plot(k_array, x2_list, label='x2')
7 ^- ]& C4 C5 Y5 e4 [% x2 n   plt.legend()
* i! d( i" Z- b* X% ?% P9 e3 A' g0 c" J
使用 plt.scatter() 绘制不同 alpha 值下 x1 和 x2 的系数散点图,并使用 plt.plot() 绘制岭迹图,分别标记了 x1 和 x2 的系数曲线,并添加图例。
/ n" L0 P3 `* f1 C( Y; j9 Y  l. K  b8 @6 J: l- _: Z
6.使用 LassoCV 自动选择最佳 alpha 值:
$ ~2 v" F+ b  J9 `5 c# a  J% l; I" j8 F- l: v8 \
   model2 = LassoCV().fit(X, y)- \0 @% N% P; T

9 M# F  _0 G* f# r使用 LassoCV 进行交叉验证,自动选择最佳的正则化参数 alpha。) G( H  ]/ T# I! A7 k5 w

& G/ c( u9 x4 X  u7 P' c: I7.输出模型参数和评估结果:" k' e  f. Y- L( {' g

  P( d& C4 g+ r$ W! p" d/ ~4 t   b0 = model2.intercept_
! W& j7 ?# A6 U4 S3 G. W   b1, b2 = model2.coef_[0], model2.coef_[1]
: }& D" |5 _- P- C4 E$ Z   print('y = {:.4f} + {:.4f}*x1 + {:.4f}*x2'.format(b0, b1, b2))
+ F8 ~0 K/ o8 l8 e/ O8 {3 d   print('R_square =', model2.score(X, y))! V- E$ t2 c. o8 T7 v0 u( d
   print('k =', model2.alpha_)
" l9 \2 n9 x; N( r" E; |0 I3 |7 l+ w  I. t6 o
输出拟合的线性模型的截距、系数以及 R_squared 值,还输出了最佳的正则化参数 alpha。) {* R0 c) d3 V- J( V
这段代码通过 Lasso 回归模型拟合了给定的数据,并展示了不同 alpha 值下的系数变化,最后选择了最佳的 alpha 值进行拟合,并输出了拟合结果和评估指标。, W6 b7 W4 [# g, r: C& a

8 B% B* U: J# r" J- _
# ?* Q; u( T, [7 E
6 R" l  p# ?1 T. v8 d2 g5 ~" Q

12.lasso_regression.py

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

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






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