数学建模社区-数学中国

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

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

" o# {, a7 D7 W! a( {% i* L1 k  ^1.导入所需库:
, F) l; V4 L) l& W4 [7 L- [! r* U2 R) \- v
   import numpy as np* D, H! `. T9 d
   import pandas as pd& e+ {! y  ~" M8 d+ D2 O2 Q
   import matplotlib.pyplot as plt
# U  G. m3 {& M7 J   from sklearn.linear_model import Lasso, LassoCV
- W  h8 @+ W  k( x
5 {- O8 E# c. F7 v6 {' s1 c: e# l9 i- [1 l
2.定义源数据:1 x+ \: J& b, R* @& Y+ r  Q* H

" G: W5 A1 E- c3 {& r5 Q   df = pd.DataFrame({; {- o2 O1 `% t  a% O. M- }
       'x1': [7, 1, 11, 11, 7, 11, 3],; ]$ H0 a# E7 R- M7 c# U
       'x2': [26, 29, 56, 31, 52, 55, 71],! W( h9 R0 A7 L' @
       'y': [78.5, 74.3, 104.3, 87.6, 95.9, 109.2, 102.7],, @$ `1 t7 B: t9 C8 F* j
   })# G+ q' R$ l4 J( z3 g
( @# t: K& w0 E+ d, w4 Y+ j5 {# w
创建了一个包含 x1、x2 和 y 列的 DataFrame,作为原始数据。6 f/ X/ }- q; _' |

8 P- q9 G% e- T5 F: }' m3.将数据转换为数组格式:
, ], `. f# x2 A5 M% j+ W- K+ C& C- U# |4 e0 P
   X = np.array(df[['x1', 'x2']])$ P9 i3 q7 v2 W+ b; {
   y = np.array(df[['y']])1 R! H" c8 u8 A7 k& |% p# I
: F& Z' G. j* r7 b3 g
将特征和目标变量分别转换为 NumPy 数组格式。
- |5 q% d  }& L  V! K- n& Z" C! g9 ?: E0 z
4.遍历不同的 alpha 值,计算 Lasso 回归模型的拟合结果:! h' M6 B) M' r0 ^1 W; Y
( X4 t0 I2 n0 k; S# _* Y
   k_array = np.logspace(-4, 1.5, 100)* Q/ j. y" q4 u' l- k1 g
   x1_list, x2_list = [], []9 `7 b* D8 o: g% B4 |2 d( Q& q
   for k in k_array:& g* q' N+ p5 u0 G- `
       model = Lasso(alpha=k).fit(X, y)3 J8 d% t2 w. U$ T  L. f* `- X% z
       x1_list.append(model.coef_[0])3 O4 x5 J) Z- P/ ?
       x2_list.append(model.coef_[1])
( f. A: V$ I/ W4 F$ m+ u6 k+ ~5 o6 B" G. a( S( J( R5 ]
使用 Lasso 回归模型,遍历不同的正则化参数 alpha 值,计算不同 alpha 值下 x1 和 x2 的系数。
: S# q7 n/ m7 {5 x9 \" n, w6 m7 p: T. C
5.绘制岭迹图:
; y3 l. \# N2 S( P- U4 N7 b  o# X4 m7 W3 ~
   plt.scatter(k_array, x1_list)
+ ^3 |) {% l; l   plt.scatter(k_array, x2_list)# q" a7 g" v' k; f! p) r- U5 T
   plt.plot(k_array, x1_list, label='x1')/ ^2 ~9 V8 `6 q! E6 v1 w
   plt.plot(k_array, x2_list, label='x2')
4 r: T  I# f+ k, H   plt.legend()$ B; G8 L2 W% ]8 t$ y

% O8 E* X$ F' V; x  V使用 plt.scatter() 绘制不同 alpha 值下 x1 和 x2 的系数散点图,并使用 plt.plot() 绘制岭迹图,分别标记了 x1 和 x2 的系数曲线,并添加图例。& \1 P, j: s9 G  a% S+ E3 }. g
9 L! G6 _0 j; R7 z% |) v5 n
6.使用 LassoCV 自动选择最佳 alpha 值:
: X. U$ ^9 V* w; R$ S9 z0 k
4 R' v3 ]* z& `( B" \   model2 = LassoCV().fit(X, y)
# i! V7 i/ L) T& I, }/ z
& h4 q7 f+ a/ ~9 r$ b使用 LassoCV 进行交叉验证,自动选择最佳的正则化参数 alpha。
/ d. d. U) ]% k+ W! O1 n* N0 S
$ V/ N8 g# J3 K6 B: O3 J( L. ^7.输出模型参数和评估结果:
; t; \) v, t. I5 b1 \
2 ?7 l; u  J. m+ x" h   b0 = model2.intercept_
4 Z9 }* J3 ]# F' u. ~9 D! p' H   b1, b2 = model2.coef_[0], model2.coef_[1]6 P$ {7 w& _3 O% h1 O) y( i. b4 c" r
   print('y = {:.4f} + {:.4f}*x1 + {:.4f}*x2'.format(b0, b1, b2))
" l" y- m5 T6 d   print('R_square =', model2.score(X, y))" _4 H/ f2 ~0 L8 v0 G7 i  |
   print('k =', model2.alpha_)9 [& j7 g: \( ]( L4 k" O% m# l
+ S9 d6 r( X  M: ]
输出拟合的线性模型的截距、系数以及 R_squared 值,还输出了最佳的正则化参数 alpha。
! D& z. s  {) l. s( y, L这段代码通过 Lasso 回归模型拟合了给定的数据,并展示了不同 alpha 值下的系数变化,最后选择了最佳的 alpha 值进行拟合,并输出了拟合结果和评估指标。. R* p1 ~/ H- T* u- F$ b- x
' X& e% ?  J" M3 D9 n

+ w8 c1 C1 j6 q
/ w) b4 L2 \' m% d, U, [

12.lasso_regression.py

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

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






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