QQ登录

只需要一步,快速开始

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

使用 sklearn 进行 LASSO 回归

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

1198

主题

4

听众

2977

积分

该用户从未签到

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

( w; K$ S7 `, ]) g1.导入所需库:
+ C: u3 c/ e& R) S3 u5 ^7 D
7 W5 E% R- }3 s   import numpy as np
# l  n8 {& u5 i% J' ^   import pandas as pd9 q& o& z% [& g' ~2 A( S
   import matplotlib.pyplot as plt/ W' C6 X* v2 C7 j: w* E
   from sklearn.linear_model import Lasso, LassoCV* B* z% Q, L# S" g+ w2 v5 {$ w& H& i

& C6 X' D# }9 \2 z( L5 ?6 ?
8 n* y6 _  w4 M6 [! j) w. E6 A2.定义源数据:1 x4 P" I/ w3 T3 X$ H$ X
* c; l6 I9 U+ g% f$ b
   df = pd.DataFrame({
4 H6 r" r% U- ]" Z# }- B" k  f       'x1': [7, 1, 11, 11, 7, 11, 3],
1 P) f* _% Z+ p0 q3 u2 v8 W9 `- l       'x2': [26, 29, 56, 31, 52, 55, 71],. ]4 C8 P+ Y! f% f6 U$ c
       'y': [78.5, 74.3, 104.3, 87.6, 95.9, 109.2, 102.7],: F* f3 t4 l' |+ {
   })
5 O; U' |  o4 G! p8 N/ c4 n- D/ E7 q( |, K6 D! O  {8 |
创建了一个包含 x1、x2 和 y 列的 DataFrame,作为原始数据。! |9 l" a- e3 K, e, O

; q( G1 k! ~2 Z5 |' n$ K8 F7 ~3.将数据转换为数组格式:* h; P+ K1 p1 g6 A1 h
$ H6 ^' E" l, K% n* Y
   X = np.array(df[['x1', 'x2']]): [6 `; E  |* P6 n2 a
   y = np.array(df[['y']])4 j2 g1 q1 F7 X. F6 V2 g. B+ {
" W- C  ~2 j, S9 f
将特征和目标变量分别转换为 NumPy 数组格式。
; {) ?. K" H! O3 p5 d* L" H$ S, `' s9 h* }- g2 ]
4.遍历不同的 alpha 值,计算 Lasso 回归模型的拟合结果:
- A3 U7 b. @* A  @1 k( [9 R) [' ~
( v, a% o+ F: T# J+ A  b! c: x0 i   k_array = np.logspace(-4, 1.5, 100)
/ Q/ Y* f1 l1 B# F( h: E, v! @* v. |   x1_list, x2_list = [], []$ y1 E; f: @! c& \1 R$ _& D
   for k in k_array:
+ J) L3 v, i. N, t+ H       model = Lasso(alpha=k).fit(X, y)
9 P" Y2 q* X# H7 }; D9 w; k       x1_list.append(model.coef_[0])  O, {' \4 P$ b6 @$ C3 i0 n
       x2_list.append(model.coef_[1])
8 S# a4 \9 W1 d0 W8 |" C# j" Y4 `7 U) n& t$ b/ o! m& V9 P4 b
使用 Lasso 回归模型,遍历不同的正则化参数 alpha 值,计算不同 alpha 值下 x1 和 x2 的系数。
/ R/ Q2 }5 k2 p: @% ~9 L* G' l" ]7 n0 {
5.绘制岭迹图:! b: E! N! u& }2 c+ J! q

6 }5 B$ n1 v) V& b4 t, E$ f   plt.scatter(k_array, x1_list)
( C( ^: |/ f5 @" \; x- X# i   plt.scatter(k_array, x2_list); `" Q7 M0 [) Q3 r
   plt.plot(k_array, x1_list, label='x1')) X( r( K; U$ O' G- L/ R- Z( V
   plt.plot(k_array, x2_list, label='x2')
( ?3 L1 X3 j% n& Z* L' v$ h& ]   plt.legend()
/ u: B  l% s  S+ a  Z; \2 w9 f" H" F9 A
使用 plt.scatter() 绘制不同 alpha 值下 x1 和 x2 的系数散点图,并使用 plt.plot() 绘制岭迹图,分别标记了 x1 和 x2 的系数曲线,并添加图例。
$ e  P' i) g7 ~; k" b& K! w6 S8 b* \; a+ F4 z
6.使用 LassoCV 自动选择最佳 alpha 值:4 p8 N- {6 l% q. E9 o1 P  Y

& Q# V$ [. Q" B7 i' R   model2 = LassoCV().fit(X, y)
( i" i1 ^% g1 Z' a4 R+ k+ t: d: k4 S8 G% w1 ]7 f0 H9 }2 F0 C; y
使用 LassoCV 进行交叉验证,自动选择最佳的正则化参数 alpha。
. I4 P) K7 p  f- \1 `3 {# @$ D
1 S3 z. Z" I! x3 O6 O! h8 o7.输出模型参数和评估结果:
$ R+ `" z; X! d; b. Q9 j/ b8 G* l# n; |7 X2 e/ U" T
   b0 = model2.intercept_
: |+ G8 y1 B! v0 {6 p. ]5 q   b1, b2 = model2.coef_[0], model2.coef_[1]# ?0 d/ e( r8 r3 w+ m; \- T
   print('y = {:.4f} + {:.4f}*x1 + {:.4f}*x2'.format(b0, b1, b2))
  r5 s; }) v8 b/ t5 U  m   print('R_square =', model2.score(X, y))9 G3 L* O7 [  S
   print('k =', model2.alpha_)7 q/ R9 X0 I# w! C) X" h

% R: S9 M, [5 x( [# l; o% ^/ b) o输出拟合的线性模型的截距、系数以及 R_squared 值,还输出了最佳的正则化参数 alpha。+ Z: \, X# {; o9 i
这段代码通过 Lasso 回归模型拟合了给定的数据,并展示了不同 alpha 值下的系数变化,最后选择了最佳的 alpha 值进行拟合,并输出了拟合结果和评估指标。
$ M, ^& J) A2 y$ S% ^% B) G* B% ^" S) P9 |% ^8 \; V: i( p- L

; v, q' y. a1 o4 ]& f2 h, l8 m. z6 I
- R0 o8 k* @4 ~% h

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, 2026-9-25 01:18 , Processed in 0.652317 second(s), 55 queries .

回顶部