- 在线时间
- 479 小时
- 最后登录
- 2026-4-13
- 注册时间
- 2023-7-11
- 听众数
- 4
- 收听数
- 0
- 能力
- 0 分
- 体力
- 7789 点
- 威望
- 0 点
- 阅读权限
- 255
- 积分
- 2922
- 相册
- 0
- 日志
- 0
- 记录
- 0
- 帖子
- 1171
- 主题
- 1186
- 精华
- 0
- 分享
- 0
- 好友
- 1
该用户从未签到
 |
* s1 ^6 H! T* z: r1.导入所需库:
4 B5 R* k F c
9 d) v+ h% ], N0 ^7 }4 O3 I+ r import numpy as np
/ P. y v/ d: x* S' R3 Q* h import pandas as pd
, o3 k" E' `/ Z! K import matplotlib.pyplot as plt
. v% Y0 {1 J6 w' n) G from sklearn.linear_model import Lasso, LassoCV
# z* M) \+ [; _6 W* y# R$ r5 H/ k' t9 @' e9 k" @( l) w0 c
1 j+ b9 u& |- a9 ^& R: D
2.定义源数据:; p/ ~3 ]+ @- N% ]( p+ @
6 w7 a" R0 Q7 i: o9 I T4 }6 `4 S/ }
df = pd.DataFrame({& h% R; V+ A0 X% n/ n+ I
'x1': [7, 1, 11, 11, 7, 11, 3],4 o; D9 P' U' s# w& K: N0 G
'x2': [26, 29, 56, 31, 52, 55, 71],' ^9 t8 A9 ]7 A( G! P/ \, Y6 x
'y': [78.5, 74.3, 104.3, 87.6, 95.9, 109.2, 102.7]," Q1 ]7 ?9 X- p$ F7 t% l; J6 O
})( W9 c' J, `. |8 ?, d
# c' b5 ~+ w# R1 h创建了一个包含 x1、x2 和 y 列的 DataFrame,作为原始数据。 ^/ X P" b6 Y2 u
4 ^% i. y) |( Q. k: A3 j3.将数据转换为数组格式:* v& f3 A7 r8 S
1 t6 y5 X7 \" p* z/ ?
X = np.array(df[['x1', 'x2']])& [- h4 c# q% p! c/ ^3 e
y = np.array(df[['y']])
0 W! @5 K3 w1 o6 s' }+ j8 t
# T% y! @, _7 o) }3 p6 f将特征和目标变量分别转换为 NumPy 数组格式。, P- F" o, P: p* l
, t9 D, _5 p, H- q- w4 x4 `% k7 o
4.遍历不同的 alpha 值,计算 Lasso 回归模型的拟合结果:. k3 w* {; {9 f1 d) r
4 p* @! I7 Q6 ?6 ]+ t/ o1 ]8 a k_array = np.logspace(-4, 1.5, 100)
6 {% i3 }6 k" j0 Y x1_list, x2_list = [], []5 N& Q* Q$ ~) } F3 [- S" l# E
for k in k_array:
+ ?1 p" g1 I& a2 } v& g model = Lasso(alpha=k).fit(X, y)
X/ v$ I* Z S$ S& |8 L0 _, n x1_list.append(model.coef_[0]) a+ [3 Q1 n) `. n8 {: |" R8 G
x2_list.append(model.coef_[1])" m& v1 s, t3 ]
% Q. S3 v) N$ B9 m# p' j3 E" B使用 Lasso 回归模型,遍历不同的正则化参数 alpha 值,计算不同 alpha 值下 x1 和 x2 的系数。0 F$ V i9 g2 V8 Y1 i: r& g
" \" N( z* i8 m! Y
5.绘制岭迹图:/ x2 i/ {6 t8 ?; u
, I; Z6 `& g7 {) n7 `' D2 E plt.scatter(k_array, x1_list)! K: H. O e2 ]1 w# h
plt.scatter(k_array, x2_list)
. [1 c$ F. k: ~( _' U! l& l plt.plot(k_array, x1_list, label='x1')% R% F3 S5 m1 H
plt.plot(k_array, x2_list, label='x2') A4 U) |8 {! T _" J. \
plt.legend()" \- u6 n6 Q* B' |3 i9 ~. G2 Y7 V
. l) F2 Y* _8 c) x1 z4 y使用 plt.scatter() 绘制不同 alpha 值下 x1 和 x2 的系数散点图,并使用 plt.plot() 绘制岭迹图,分别标记了 x1 和 x2 的系数曲线,并添加图例。
6 P( q7 n* w7 V* @
: P) ~; x/ \+ r m9 Y) T2 B3 |5 E: E6.使用 LassoCV 自动选择最佳 alpha 值:
* ]# j. N+ A, P- X) J4 N( ]+ p4 P1 E, A1 |: M' ]" H5 q% K
model2 = LassoCV().fit(X, y)
5 x- N' X9 i# ?' ?1 M6 ~6 a* h* E, Q' y
使用 LassoCV 进行交叉验证,自动选择最佳的正则化参数 alpha。
% U: K5 h( `' [7 `2 t3 j9 p @7 ~( {/ q* b& c- b( P
7.输出模型参数和评估结果:- z0 d) p$ L% _1 Z0 G
8 K$ O" }2 O4 U/ t# R# h b0 = model2.intercept_
3 M0 n5 |2 b, L* m2 _( L b1, b2 = model2.coef_[0], model2.coef_[1]
" Z4 H# x" J. V6 r2 Y% ~ print('y = {:.4f} + {:.4f}*x1 + {:.4f}*x2'.format(b0, b1, b2))
* o; }( `+ O9 w* ~# [; v print('R_square =', model2.score(X, y))/ w# l' z) q: n* L: C$ _ Z( m- G; |% Z
print('k =', model2.alpha_)
0 k6 u2 z" ?$ C' a& V! z. p7 W. c& ^' A" b7 s0 k+ ?
输出拟合的线性模型的截距、系数以及 R_squared 值,还输出了最佳的正则化参数 alpha。
) b% R: R- v/ g( M1 |) q4 r这段代码通过 Lasso 回归模型拟合了给定的数据,并展示了不同 alpha 值下的系数变化,最后选择了最佳的 alpha 值进行拟合,并输出了拟合结果和评估指标。
" P' g' M" Y2 x* J; {8 B2 l
* d/ _& c7 U# n- c+ s- E9 S( t! y5 X }( i# T6 E2 v, T/ t% U8 Y
" a/ i5 P: t5 |" e+ r4 m& U$ M
|
zan
|