- 在线时间
- 478 小时
- 最后登录
- 2026-4-9
- 注册时间
- 2023-7-11
- 听众数
- 4
- 收听数
- 0
- 能力
- 0 分
- 体力
- 7788 点
- 威望
- 0 点
- 阅读权限
- 255
- 积分
- 2922
- 相册
- 0
- 日志
- 0
- 记录
- 0
- 帖子
- 1171
- 主题
- 1186
- 精华
- 0
- 分享
- 0
- 好友
- 1
该用户从未签到
 |
! t. d) Y5 Y4 w7 }: \
1.导入所需库:3 j7 m! m. d1 u) h0 I
1 J9 J# r9 W7 @5 j9 _2 ]
import numpy as np+ y( f9 I6 ? P+ N& z5 h
import pandas as pd
# n/ c+ D! z1 j6 Y7 v! p import matplotlib.pyplot as plt
, f, P! M6 [4 v2 i. I2 k from sklearn.linear_model import Lasso, LassoCV" n& V( x3 K( ~9 l5 A! f" J/ q
/ {. {( F% L, K; P
, `, M# y$ N' J% F. i, x+ A
2.定义源数据:
& V2 Z3 b( Y! K9 n: [0 q& c
8 D% Q/ ~6 ~- F df = pd.DataFrame({5 O4 I& t4 i/ X# J6 j9 `- | ?
'x1': [7, 1, 11, 11, 7, 11, 3],4 L0 {) U$ e, j
'x2': [26, 29, 56, 31, 52, 55, 71],
& I3 h9 [9 q( N) X 'y': [78.5, 74.3, 104.3, 87.6, 95.9, 109.2, 102.7],
j" `& ]( h3 x6 X b })
3 A% @5 _' w, O, e0 z
/ E, X3 S+ ]& M创建了一个包含 x1、x2 和 y 列的 DataFrame,作为原始数据。
4 B& x+ f* ?& M
3 @1 E2 ]$ t& q5 H3.将数据转换为数组格式:: o( I+ `8 Z8 F& K! f/ m% n- {: G
* _9 Z/ w6 o* g) q% t* \0 l; G
X = np.array(df[['x1', 'x2']])& b4 t# n0 b( U7 `
y = np.array(df[['y']])
- H. q2 K7 W; y) p3 R! Y( W& R _" F: J9 m) b+ r
将特征和目标变量分别转换为 NumPy 数组格式。+ _' v5 ~- r* h
& U! m3 ^/ j; O/ d& C9 _; n4 Q
4.遍历不同的 alpha 值,计算 Lasso 回归模型的拟合结果:; a a, a; ?- L" y# u
8 ~" \3 D" i6 l& k
k_array = np.logspace(-4, 1.5, 100)
0 w# T+ E1 n' y p! ? x1_list, x2_list = [], []
$ I+ _% B, P, l0 H. y* g$ v for k in k_array:
2 ^# ^0 S" v0 i; w5 G! p: n model = Lasso(alpha=k).fit(X, y)
# `% f Y" {) f8 n1 m! }( @2 u x1_list.append(model.coef_[0])) r5 X8 |# B8 D# z: P' L- m
x2_list.append(model.coef_[1])6 [ i7 h m: N" C; R
7 J7 p1 I" H3 W* p) X使用 Lasso 回归模型,遍历不同的正则化参数 alpha 值,计算不同 alpha 值下 x1 和 x2 的系数。
* m% T. g3 C5 m/ y: t: ~% J
; L0 v" u* @; s/ b* ]' P, E) u5.绘制岭迹图:
! K1 F1 @8 J. J% y0 g$ A2 X1 ?9 c7 }' C) Q5 x4 l* r
plt.scatter(k_array, x1_list)
" s" Z: |' G' ~, |: }9 n2 O' i plt.scatter(k_array, x2_list) H. j+ F% A, G2 A
plt.plot(k_array, x1_list, label='x1')" Z( U; l8 ^* a9 Z2 y
plt.plot(k_array, x2_list, label='x2')) {/ s* N/ c: l. q2 m
plt.legend()
" V; @4 q" k: X$ |; L5 G/ h
! b, u2 Q5 e- Z4 H' {6 y使用 plt.scatter() 绘制不同 alpha 值下 x1 和 x2 的系数散点图,并使用 plt.plot() 绘制岭迹图,分别标记了 x1 和 x2 的系数曲线,并添加图例。8 G5 `) Q; G4 j, s
3 v, u/ O; E& O7 t) ]* y& r
6.使用 LassoCV 自动选择最佳 alpha 值:" M D! p) f; @/ b; [9 D
' I4 `% j' b3 R% ~% U; B* m' K. i6 P5 A
model2 = LassoCV().fit(X, y)
8 d( i V( Z, L
& o* B7 m) ^$ f) w; {% k2 W使用 LassoCV 进行交叉验证,自动选择最佳的正则化参数 alpha。& U- u0 @0 \! C. {
; ~0 U8 S: W5 l% z
7.输出模型参数和评估结果:
( b; u0 ` f6 \ [3 c
) l5 p9 \! G* H/ M+ y b0 = model2.intercept_; Z+ p* I# ^4 c3 A9 n7 L" w; M
b1, b2 = model2.coef_[0], model2.coef_[1]1 V* e6 `7 o4 ]0 v' z$ o2 \
print('y = {:.4f} + {:.4f}*x1 + {:.4f}*x2'.format(b0, b1, b2))
! H U/ b, ^$ a% D print('R_square =', model2.score(X, y))
1 B/ l- D' T' d; [# [5 \ print('k =', model2.alpha_)7 G0 J3 \& x1 g. h
' d6 C* l* }8 Z# H6 t2 y, Z
输出拟合的线性模型的截距、系数以及 R_squared 值,还输出了最佳的正则化参数 alpha。
8 | ?" f- i; y5 q这段代码通过 Lasso 回归模型拟合了给定的数据,并展示了不同 alpha 值下的系数变化,最后选择了最佳的 alpha 值进行拟合,并输出了拟合结果和评估指标。
: |( k3 D9 W7 C7 q
( d6 l r$ Z; @ Q# }3 a$ T1 h. b8 i$ x
F' ]6 x$ F6 K0 J# B |
zan
|