数学建模社区-数学中国

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

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

, f$ S  z5 u5 u, f& y5 |3 [. Q8 K1.导入所需库:' j$ ?0 U/ ]8 d: y  f) {- ~

* r. Q6 A! w* B# }! u# }   import numpy as np. Y6 F3 a; b) @3 K8 M
   import pandas as pd
& t4 {4 W8 b+ |' t+ z3 Z   import matplotlib.pyplot as plt
7 N3 ~2 Z, I/ C" K   from sklearn.linear_model import Lasso, LassoCV# L+ c* e* I" O) U/ V
& s$ N3 F+ G1 [% ]* @
& ~7 P$ }# i6 q" K2 n: f
2.定义源数据:) z- k% O0 O2 b* }
+ Q* a9 y2 c; H9 E' _0 s
   df = pd.DataFrame({
4 a/ ~# W2 J6 R" \, ?3 v! d+ V       'x1': [7, 1, 11, 11, 7, 11, 3],! ?3 @' u, e; v% Q, ^% E7 Z
       'x2': [26, 29, 56, 31, 52, 55, 71],. C5 s1 X0 T8 P6 Z
       'y': [78.5, 74.3, 104.3, 87.6, 95.9, 109.2, 102.7],
7 p4 n$ d1 P; R4 s1 q4 k+ L1 P   })
% }2 x. Q, ~. {
; z5 ~" f7 [0 [2 J6 {, n创建了一个包含 x1、x2 和 y 列的 DataFrame,作为原始数据。8 [, @2 u6 i+ ]: s8 T" o

$ H& d6 k9 I+ y+ t" W3 Z* |* G. ]3.将数据转换为数组格式:
- Y+ V# a3 Y  `' b, r. `- o
$ c% R4 K7 Z7 O& S! o   X = np.array(df[['x1', 'x2']])$ u. h7 x. F* [, x1 M; v" L5 k
   y = np.array(df[['y']]), m/ _: z& W4 }. D5 ^
. b! W8 g2 s, v, ~, d4 b* l/ p
将特征和目标变量分别转换为 NumPy 数组格式。
7 u5 O: I# Y3 |3 ?( Q
8 h5 U* m+ p3 c( U$ `- E; I4.遍历不同的 alpha 值,计算 Lasso 回归模型的拟合结果:5 y& B+ }- h* N# T7 i4 U

% I; R6 k! ?5 Y: d! t4 I   k_array = np.logspace(-4, 1.5, 100)$ F! K! R) D- p
   x1_list, x2_list = [], []& P# c; t( \$ f  ~8 ]
   for k in k_array:: ]0 U  ~, i+ V; ~$ |  e
       model = Lasso(alpha=k).fit(X, y)
: d6 h5 _; `7 J6 K& q$ t4 X       x1_list.append(model.coef_[0])
7 r) L5 ^" m% E, b       x2_list.append(model.coef_[1])2 R# h# V9 [& n; K- F
& w- P; f. P/ {4 u6 ]
使用 Lasso 回归模型,遍历不同的正则化参数 alpha 值,计算不同 alpha 值下 x1 和 x2 的系数。% `8 {* o. ?# i, r  h/ T

# R3 Q$ A: u% g8 k6 h3 S7 s5.绘制岭迹图:
9 P0 C3 q. b- e& g6 ?& `4 f8 @1 x  w4 I& z0 C. u/ |. N; o4 {; K
   plt.scatter(k_array, x1_list)* B# C: O( f6 K" ]
   plt.scatter(k_array, x2_list)) w& r1 N2 n% _6 ~
   plt.plot(k_array, x1_list, label='x1')' Q  Y$ i; x& w  v9 l) t: Z
   plt.plot(k_array, x2_list, label='x2'). V: c: x/ Z: Q" [& t
   plt.legend()
% w0 {( a& \$ B# |
+ a9 T: h* ?$ M. _$ h# O使用 plt.scatter() 绘制不同 alpha 值下 x1 和 x2 的系数散点图,并使用 plt.plot() 绘制岭迹图,分别标记了 x1 和 x2 的系数曲线,并添加图例。& j, I3 u% F! @3 ]
/ j/ m8 P( P9 |7 Z# [
6.使用 LassoCV 自动选择最佳 alpha 值:
' K" k" W/ F7 c7 t" p/ R' b- @7 r) l: I
   model2 = LassoCV().fit(X, y)' U! {- J6 [6 I4 A

  x7 g$ @. D9 w2 D使用 LassoCV 进行交叉验证,自动选择最佳的正则化参数 alpha。
% [. n) U9 l$ L1 q0 N& M  T) @
2 O) c5 v; B! s/ S- R. ^7.输出模型参数和评估结果:! Z; T- n: d% k" Z/ k4 V& u1 e' h
+ C2 \4 l$ ^  I/ r+ z
   b0 = model2.intercept_- Z- d- d1 v5 a. X
   b1, b2 = model2.coef_[0], model2.coef_[1], i( [  }2 s. U
   print('y = {:.4f} + {:.4f}*x1 + {:.4f}*x2'.format(b0, b1, b2))2 X* ]7 U( h8 G
   print('R_square =', model2.score(X, y)). h) o$ l3 D  `, ^
   print('k =', model2.alpha_). \, E6 ]7 g) C" Z6 Z2 D
4 v9 Z3 ^6 [9 ~
输出拟合的线性模型的截距、系数以及 R_squared 值,还输出了最佳的正则化参数 alpha。$ P# w6 p' g6 A' a/ E* ~
这段代码通过 Lasso 回归模型拟合了给定的数据,并展示了不同 alpha 值下的系数变化,最后选择了最佳的 alpha 值进行拟合,并输出了拟合结果和评估指标。
# o; x" }8 }0 S2 ?2 v& d4 d3 N( r% Q4 C" H
) S" A7 N2 ?: T
0 S  _! Z) Y# a1 a! ^- o' |6 U+ S( y. B

12.lasso_regression.py

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

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






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