数学建模社区-数学中国

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

作者: 2744557306    时间: 2024-3-15 11:12
标题: 使用 sklearn 进行 LASSO 回归
4 |' P$ s. |5 j  ]8 x
1.导入所需库:
+ G) _5 d  O" m2 J
' Y6 v9 p; l4 s( L& W* [: m0 b+ q   import numpy as np! \" u; ?3 w0 E$ Y- Y
   import pandas as pd0 M# S  h+ u/ o0 {5 U1 s" A
   import matplotlib.pyplot as plt
4 l1 o* P' U- b   from sklearn.linear_model import Lasso, LassoCV* {+ [: F; b7 s0 O, y/ _% n$ G

; ~- J9 \4 o1 y  G9 ?7 H; d8 O  i( d4 C1 Y
2.定义源数据:" a% H1 j1 u* s  n
! }7 v9 o( D+ u% O
   df = pd.DataFrame({2 T( H' m, B4 c- `+ q
       'x1': [7, 1, 11, 11, 7, 11, 3],
% h8 [" t3 S$ \9 f       'x2': [26, 29, 56, 31, 52, 55, 71],8 z% U. y  Z; Y% U+ }/ }! W4 o
       'y': [78.5, 74.3, 104.3, 87.6, 95.9, 109.2, 102.7],3 X- j8 y+ u# r- i0 J7 d& y3 i) u
   })* d; w! N3 Y  g

4 m! ~) A* j3 _4 {. k0 ~创建了一个包含 x1、x2 和 y 列的 DataFrame,作为原始数据。
& |" m! x/ R( p. H/ l: t: n3 o7 Z7 M% G) }. @, f+ o) S
3.将数据转换为数组格式:
$ k7 H3 W) k* h7 T2 @# K; ~
+ {& m( c& b+ |& |6 V: r1 k   X = np.array(df[['x1', 'x2']])- o! ^9 t0 l! v; L+ h& r* w3 `
   y = np.array(df[['y']])
) X. l3 S5 ~. f2 i
8 [# m; ?* z1 a0 q$ }* c将特征和目标变量分别转换为 NumPy 数组格式。
  U3 a+ f  e' W6 W( G. N) h; k
5 ^4 B* z- t9 F# j4.遍历不同的 alpha 值,计算 Lasso 回归模型的拟合结果:- o; a+ v' J+ _6 B1 G: v% O
7 H" G3 Q. F; W; @5 p
   k_array = np.logspace(-4, 1.5, 100)
4 h/ R; `' \8 Z& {& T   x1_list, x2_list = [], []; T1 I8 D; F8 p- X
   for k in k_array:8 F+ ?/ F7 V1 X% k9 e" b. |( e, q+ H
       model = Lasso(alpha=k).fit(X, y)
4 e+ S. O0 w; z3 R% M' ^       x1_list.append(model.coef_[0])9 v" L) X9 j' t
       x2_list.append(model.coef_[1])" \: i7 x1 n& O& V& |

, G0 q  P% {$ O- ^使用 Lasso 回归模型,遍历不同的正则化参数 alpha 值,计算不同 alpha 值下 x1 和 x2 的系数。
1 \5 B1 i9 a7 ~! V0 t" ^) R# E
/ X, x$ Y: q4 t) a5.绘制岭迹图:
7 I1 z2 U) c8 u9 d! m* h( d4 U
6 {: B! H  U8 |% y: W) b; y   plt.scatter(k_array, x1_list)
. q; Q* B! i& B1 [+ @' V   plt.scatter(k_array, x2_list)
1 P) [% W* e& j. m3 d" s% N' c* v   plt.plot(k_array, x1_list, label='x1')
+ O$ ^8 b- a0 F- ]9 l2 f$ [   plt.plot(k_array, x2_list, label='x2')
# b* f- d+ q! i: r& }   plt.legend()# d) s; W, `7 I9 ~: v  c
& l! l+ I, r- Z. m1 B
使用 plt.scatter() 绘制不同 alpha 值下 x1 和 x2 的系数散点图,并使用 plt.plot() 绘制岭迹图,分别标记了 x1 和 x2 的系数曲线,并添加图例。
  |* ~5 B& m% A: j& n5 ?7 F# P0 V% y- o- h: C: y% \1 H6 ~
6.使用 LassoCV 自动选择最佳 alpha 值:
2 P; ]$ ?$ n% k3 k: w
' j1 p8 I% Z# j  }# x9 k) ~9 Y' j   model2 = LassoCV().fit(X, y)
! Z  J7 D% C5 B; y" d) \* h& _* s* v$ m  A
使用 LassoCV 进行交叉验证,自动选择最佳的正则化参数 alpha。1 w! u- z, R0 `
: Z+ d: o, F4 S! ]( G) [2 {0 X
7.输出模型参数和评估结果:
1 `7 u  ?. E6 Q, c. y) U1 I6 b/ V/ F  C: E8 v
   b0 = model2.intercept_! W* J( O1 \# t% ?0 l5 E
   b1, b2 = model2.coef_[0], model2.coef_[1]; [% I  l, j/ B+ L
   print('y = {:.4f} + {:.4f}*x1 + {:.4f}*x2'.format(b0, b1, b2))
$ f, I  v* F1 a6 c) X$ {% X1 l7 ^   print('R_square =', model2.score(X, y))
# c" W- [6 U5 c: h; t8 _   print('k =', model2.alpha_)6 C+ w0 A" Y5 @# D
3 s7 D8 ?+ M: K4 O( J8 m
输出拟合的线性模型的截距、系数以及 R_squared 值,还输出了最佳的正则化参数 alpha。
) i8 C% L9 `. S4 E3 {0 W) J这段代码通过 Lasso 回归模型拟合了给定的数据,并展示了不同 alpha 值下的系数变化,最后选择了最佳的 alpha 值进行拟合,并输出了拟合结果和评估指标。' Q- w# q) H1 m) x; x1 O
! T! D7 {" D! e. {
& R" @, _# W- I8 N( T
& U9 m$ z, ?+ X% K) C

12.lasso_regression.py

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

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






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