QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 2302|回复: 0
打印 上一主题 下一主题

使用 sklearn 进行 LASSO 回归

[复制链接]
字体大小: 正常 放大

1176

主题

4

听众

2887

积分

该用户从未签到

跳转到指定楼层
1#
发表于 2024-3-15 11:12 |只看该作者 |倒序浏览
|招呼Ta 关注Ta

2 {( u9 L% H% e6 e( I1.导入所需库:
9 x( [* O. h6 f* ~
9 g8 a& I5 T) P  j   import numpy as np
( P5 y8 u/ }7 q% ^3 O   import pandas as pd1 a4 X8 k# t+ J) ~7 b1 Y; [. R3 i4 \
   import matplotlib.pyplot as plt
! q+ d% U& M' o. G   from sklearn.linear_model import Lasso, LassoCV
2 Z$ t9 S/ J; e0 o* P3 \6 K# Z7 W) u, c+ a7 l/ E2 h! B3 Z
4 @* w9 [: }1 X3 K* x
2.定义源数据:
' R+ n: I+ Q2 ~. f# Q7 g5 Q
6 p- |( m) f- N. F+ }   df = pd.DataFrame({
8 \* P! t3 D3 o       'x1': [7, 1, 11, 11, 7, 11, 3],
0 Z5 k8 z* c: F7 k6 \( i2 `* F" \2 S       'x2': [26, 29, 56, 31, 52, 55, 71],
- l% J  a, r9 q# B3 P9 [% ?1 d5 K       'y': [78.5, 74.3, 104.3, 87.6, 95.9, 109.2, 102.7],8 M: o( y9 h# j! o
   })0 `: P5 D# |  {! G% y7 G& `# k: c4 m

3 i' s/ d8 \# c- v" z创建了一个包含 x1、x2 和 y 列的 DataFrame,作为原始数据。
$ L5 |& ]/ |6 ]# E/ i, O1 j3 b5 R3 W, q1 |
3.将数据转换为数组格式:
$ P: L1 ?( Q) I- ^  |7 B
  B. g# ]& t4 R7 |  d$ k   X = np.array(df[['x1', 'x2']])
( R) @. w8 J( f/ T1 A' g   y = np.array(df[['y']])
" s: K' m, U: q) _
6 z# r# O! E4 p将特征和目标变量分别转换为 NumPy 数组格式。
1 x% C* Y4 x( U; L4 Q$ H6 R* [9 G4 i2 T, S- Z8 Y! J
4.遍历不同的 alpha 值,计算 Lasso 回归模型的拟合结果:
  P/ ~- x: b" A7 `
( ?: F6 P7 X4 M   k_array = np.logspace(-4, 1.5, 100)
+ L, D, l4 V$ Q   x1_list, x2_list = [], []
6 d1 K, f; @1 {% w6 d+ w( N0 A/ k. _" G   for k in k_array:6 `% ~8 Q& `/ M# U! Q9 D
       model = Lasso(alpha=k).fit(X, y)
3 J) S0 r# i- H6 L       x1_list.append(model.coef_[0])
- R% l; e+ R$ V9 h( U5 @) y       x2_list.append(model.coef_[1])
& D; x4 M) j/ m# L) q3 m% y+ ^
0 Q9 L- N+ o/ ~! d1 d# k4 o使用 Lasso 回归模型,遍历不同的正则化参数 alpha 值,计算不同 alpha 值下 x1 和 x2 的系数。
6 h  K: w' j" s; E9 ^, @% X# @. K5 T5 w7 ~9 M: o' l( I
5.绘制岭迹图:
. h3 O" m7 D9 i2 A, b1 r
/ F9 P2 T/ c/ n; B, C2 _   plt.scatter(k_array, x1_list)
( |- Z4 G+ e7 ~- l7 l9 R   plt.scatter(k_array, x2_list)7 H( p+ A: [! l9 Z" M: X2 ^2 B4 I9 n# t
   plt.plot(k_array, x1_list, label='x1')0 C+ S2 j2 n9 {" t6 [
   plt.plot(k_array, x2_list, label='x2')
  O/ `; ~1 x5 }" I- O   plt.legend()
' ^; x3 y7 @/ B2 {5 b, O7 P6 a/ R. K
" v2 L/ z, ~5 J, l. e9 f  F2 g使用 plt.scatter() 绘制不同 alpha 值下 x1 和 x2 的系数散点图,并使用 plt.plot() 绘制岭迹图,分别标记了 x1 和 x2 的系数曲线,并添加图例。/ R+ k3 Y4 b- |' I

- a( F! z/ Z7 _6 T6.使用 LassoCV 自动选择最佳 alpha 值:
% h8 k# |. T8 p7 {9 j. B6 O* t) Y, i0 b. I; V9 R* ]5 N& M7 b
   model2 = LassoCV().fit(X, y)+ i& X, Y+ Q: G! J) Q

' f, l% g; a2 \6 m! y& e- X使用 LassoCV 进行交叉验证,自动选择最佳的正则化参数 alpha。1 x' c+ C$ c% @2 [
( _. _, ^$ N1 M, |. [2 h
7.输出模型参数和评估结果:+ D& a( f6 O9 `( w& `' g  T
% e3 d3 B4 u! @
   b0 = model2.intercept_
% E# C9 g5 L$ T8 ?& E( Q   b1, b2 = model2.coef_[0], model2.coef_[1]* @. G2 c# o1 T% p$ b0 G
   print('y = {:.4f} + {:.4f}*x1 + {:.4f}*x2'.format(b0, b1, b2))" w6 C% D9 O9 p& l% P# V, E
   print('R_square =', model2.score(X, y))# i% Y% {/ _5 i  e2 z8 n# ?
   print('k =', model2.alpha_)0 C4 b$ I" Z! B3 N$ j' F/ E; ^

! B6 E! T. t+ r- L, ~) b( i输出拟合的线性模型的截距、系数以及 R_squared 值,还输出了最佳的正则化参数 alpha。9 q+ v4 ]/ B: Y, N' w) i7 i- I
这段代码通过 Lasso 回归模型拟合了给定的数据,并展示了不同 alpha 值下的系数变化,最后选择了最佳的 alpha 值进行拟合,并输出了拟合结果和评估指标。6 l; z1 [: E' I) s/ u' G) k* ]% m

" {! A4 i; Z+ B, |3 W- I2 B
$ L4 J! O' Y( [3 l2 f
# S9 ~$ Q7 w/ D  B* b4 ]

12.lasso_regression.py

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

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

zan
转播转播0 分享淘帖0 分享分享0 收藏收藏0 支持支持0 反对反对0 微信微信
您需要登录后才可以回帖 登录 | 注册地址

qq
收缩
  • 电话咨询

  • 04714969085
fastpost

关于我们| 联系我们| 诚征英才| 对外合作| 产品服务| QQ

手机版|Archiver| |繁體中文 手机客户端  

蒙公网安备 15010502000194号

Powered by Discuz! X2.5   © 2001-2013 数学建模网-数学中国 ( 蒙ICP备14002410号-3 蒙BBS备-0002号 )     论坛法律顾问:王兆丰

GMT+8, 2025-10-26 17:18 , Processed in 0.349747 second(s), 55 queries .

回顶部