- 在线时间
- 480 小时
- 最后登录
- 2026-6-1
- 注册时间
- 2023-7-11
- 听众数
- 4
- 收听数
- 0
- 能力
- 0 分
- 体力
- 7823 点
- 威望
- 0 点
- 阅读权限
- 255
- 积分
- 2934
- 相册
- 0
- 日志
- 0
- 记录
- 0
- 帖子
- 1174
- 主题
- 1189
- 精华
- 0
- 分享
- 0
- 好友
- 1
该用户从未签到
 |
4 o7 f/ k; r& }6 {; i1.导入所需库:
0 U% s" v& Q: u3 V O8 Y5 m# E9 ~0 y; _4 x- G
import numpy as np
$ b- x% F( p2 U% l6 q" p0 ~ import pandas as pd
1 w' w3 b4 F4 L! L, s import matplotlib.pyplot as plt1 j, _0 ~' D( s7 D9 Z1 M
from sklearn.linear_model import Lasso, LassoCV
/ W9 u' N8 Z* z$ \: ] r
$ ?/ c2 G) g& {. [
' ?5 E% n* i; j2.定义源数据:
+ u' p$ p" i! G, g% m& K- c' i0 A/ g- Q
df = pd.DataFrame({9 J! N. r0 ?( B, ?0 l7 B# V* y
'x1': [7, 1, 11, 11, 7, 11, 3],
; A( ]+ n# X+ ^- s% v 'x2': [26, 29, 56, 31, 52, 55, 71],
( f' k- W) w) j9 w" `) r, N% o 'y': [78.5, 74.3, 104.3, 87.6, 95.9, 109.2, 102.7],
' k2 _4 E' t- u( ]* |7 a# a })
7 o+ d8 X* c5 m' ? J* ] G! a+ y9 R. ]/ E( n4 d
创建了一个包含 x1、x2 和 y 列的 DataFrame,作为原始数据。
7 P5 c, E7 M5 B# r# M
! R* C% W8 K" K3 M$ W" j( J3.将数据转换为数组格式:
) a( C& J; H2 L0 k5 q& q$ [6 p" q( E5 v; v \9 |6 A f
X = np.array(df[['x1', 'x2']])
! m: | s$ A( t. K% c y = np.array(df[['y']]). ] R+ [/ {* c
) a3 Z6 k- F8 I" X5 c/ t将特征和目标变量分别转换为 NumPy 数组格式。# `: f- N" }" x e2 r# }0 s
) B# R# C. M( ~" X# T; X0 n4.遍历不同的 alpha 值,计算 Lasso 回归模型的拟合结果:
2 l( r0 {: z1 _& k0 L
9 v# I1 d: s" _ k_array = np.logspace(-4, 1.5, 100)8 r, a; m4 ]3 U6 b. q' U
x1_list, x2_list = [], []
% }' y4 C( g+ w$ i X for k in k_array: }* j5 _2 j' u0 Q: F2 P
model = Lasso(alpha=k).fit(X, y)6 C4 i: y* |: G' G/ E
x1_list.append(model.coef_[0])
8 t) t j0 X7 M& w7 ^1 x; Z$ I x2_list.append(model.coef_[1])
0 x1 q/ E: m' h9 n- ]5 A9 j# \+ F3 D% M5 p6 U. g7 C
使用 Lasso 回归模型,遍历不同的正则化参数 alpha 值,计算不同 alpha 值下 x1 和 x2 的系数。
& L. P0 |7 t5 ^0 X0 ]! r! W8 ]! V2 ~& K! } b) T6 j
5.绘制岭迹图:
( ]; ]6 w0 A7 E; w% j
' k. t! j5 y- D plt.scatter(k_array, x1_list)' S: ?- t4 G: i5 c* _
plt.scatter(k_array, x2_list)* Y/ e3 k H& {! O
plt.plot(k_array, x1_list, label='x1')
) ]( q0 N) g1 t6 W; M# A$ f/ | plt.plot(k_array, x2_list, label='x2')
3 N3 x6 b, F G2 S1 A y+ \( f$ N# t plt.legend()
$ ~6 s6 M. _1 d. e2 E
: w! u* }6 P; ^7 m! ~/ P使用 plt.scatter() 绘制不同 alpha 值下 x1 和 x2 的系数散点图,并使用 plt.plot() 绘制岭迹图,分别标记了 x1 和 x2 的系数曲线,并添加图例。
" u* P* [) h1 O1 X, t" T. r) k& K/ d
6.使用 LassoCV 自动选择最佳 alpha 值:% P+ _" G: W& `5 J( T$ z
2 Q* h# _+ h( `* F; g- e
model2 = LassoCV().fit(X, y)
0 f, O3 d0 A: f' Q
0 l+ h8 ~3 u1 C+ z' N9 M使用 LassoCV 进行交叉验证,自动选择最佳的正则化参数 alpha。
& ]7 G/ a }5 w3 ]9 |* {! F& N( N; z% R' A( I9 s
7.输出模型参数和评估结果:* K' ^" x9 _; T0 e/ s) t; x
; p' G/ g0 d3 p" c% f8 H5 u' z" X b0 = model2.intercept_; x- r X/ R# N% ~
b1, b2 = model2.coef_[0], model2.coef_[1]
3 E+ e. V; x$ l8 k" J" a, k print('y = {:.4f} + {:.4f}*x1 + {:.4f}*x2'.format(b0, b1, b2))$ _6 u+ c; e0 _3 M& g3 X
print('R_square =', model2.score(X, y))
; T4 _3 N' C1 g8 i7 I print('k =', model2.alpha_)
; a H" _2 Y7 P6 ^9 Q7 j" A) L" g% f* h: }
输出拟合的线性模型的截距、系数以及 R_squared 值,还输出了最佳的正则化参数 alpha。
4 O% y7 D Z" J8 Z这段代码通过 Lasso 回归模型拟合了给定的数据,并展示了不同 alpha 值下的系数变化,最后选择了最佳的 alpha 值进行拟合,并输出了拟合结果和评估指标。: d0 q+ n) Z8 l- Y+ l
" C O7 O( ]; T8 Z8 h6 \2 m
" Z& ]5 v m& L3 p
+ _9 T; {' U/ a) `+ b |
zan
|