- 在线时间
- 480 小时
- 最后登录
- 2026-6-1
- 注册时间
- 2023-7-11
- 听众数
- 4
- 收听数
- 0
- 能力
- 0 分
- 体力
- 7823 点
- 威望
- 0 点
- 阅读权限
- 255
- 积分
- 2934
- 相册
- 0
- 日志
- 0
- 记录
- 0
- 帖子
- 1174
- 主题
- 1189
- 精华
- 0
- 分享
- 0
- 好友
- 1
该用户从未签到
 |
) F+ D$ ^1 V" Z3 ^1.导入所需库:, F1 Y6 @2 x5 n3 C( q
+ p" P, E" v% S2 g* o0 P( s8 k
import numpy as np& C' \6 j$ E2 K) x( s& F# i1 n2 y* C
import pandas as pd
: `/ c+ ~* B8 U; ` import matplotlib.pyplot as plt
9 k9 Q( r! U K$ O. ~2 E from sklearn.linear_model import Lasso, LassoCV% z4 @0 N& o* f# p" Z
" p3 v5 S% H1 B8 |5 H* b& C+ T( S8 z9 R: m
2.定义源数据:
$ M/ a( ^: I3 b$ s: k( b' c
4 k" @4 q: Q2 S/ Q2 a df = pd.DataFrame({
7 ~. S+ T& K- F7 o4 Q5 w6 \% p 'x1': [7, 1, 11, 11, 7, 11, 3],7 {. V( M7 v* K" C4 g* H
'x2': [26, 29, 56, 31, 52, 55, 71],( N% d0 d" }! f Y
'y': [78.5, 74.3, 104.3, 87.6, 95.9, 109.2, 102.7],$ O ~! U; z: s" Z" ]$ v
})
, x4 l6 j; R) p( e
" r1 S g' j- `2 c" T8 O) m创建了一个包含 x1、x2 和 y 列的 DataFrame,作为原始数据。
& L2 W/ _, Q. d1 H( F- X: u5 b3 O. p$ u- S2 v: ] z1 P
3.将数据转换为数组格式:
' V0 M1 ]" P/ N! ^/ M$ m' Y/ G
5 A+ m& P* j( [) J9 j+ z X = np.array(df[['x1', 'x2']])
2 t) S* p2 m! T; m y = np.array(df[['y']])
0 X2 O# e: A4 D4 _6 e$ O
! T0 q4 @) ^1 r7 N0 Q6 L8 m将特征和目标变量分别转换为 NumPy 数组格式。4 b1 ~& D; q& K( D# _: o
$ m# z7 N" n% ]( T1 E2 [
4.遍历不同的 alpha 值,计算 Lasso 回归模型的拟合结果:& G# h- b7 R* u% R, g( L- u7 K
4 E F3 x# [0 n6 S" u
k_array = np.logspace(-4, 1.5, 100): g# _' P, P8 k1 f A ?
x1_list, x2_list = [], []4 [4 O$ E% Y4 O% H/ r, r6 [
for k in k_array:3 ` R/ D9 L9 @ z. c/ g! M
model = Lasso(alpha=k).fit(X, y)
; h& q% i% n( z3 A: c x1_list.append(model.coef_[0])- ?) p# h5 f9 `* n D9 z
x2_list.append(model.coef_[1])
6 \6 x2 @7 B# {/ ]
$ a% c) t q& d使用 Lasso 回归模型,遍历不同的正则化参数 alpha 值,计算不同 alpha 值下 x1 和 x2 的系数。# _, W$ c: f6 \$ r4 }
/ r7 \7 |# C5 f, e5.绘制岭迹图:+ d8 q1 n/ C) y3 L# [- ]
6 v' C' P% A1 C+ V
plt.scatter(k_array, x1_list)
! y( Q9 S( H6 C/ J, F plt.scatter(k_array, x2_list)! T' H1 ~. |, o, k( b( Z
plt.plot(k_array, x1_list, label='x1')0 S" v+ G% N7 r2 }% T. m8 N6 q
plt.plot(k_array, x2_list, label='x2')
2 y! x- R4 w s) l2 { plt.legend()
5 b8 M: b" j9 e; g6 g9 b5 J& i, Y2 K5 N4 G, M8 V$ u t
使用 plt.scatter() 绘制不同 alpha 值下 x1 和 x2 的系数散点图,并使用 plt.plot() 绘制岭迹图,分别标记了 x1 和 x2 的系数曲线,并添加图例。' U/ p B; T4 D# [( @7 ?& N1 N. x
4 R2 Q" X7 G0 N) k0 b; I6.使用 LassoCV 自动选择最佳 alpha 值:
0 j' d% _5 ^! {( Y: A+ z' ~* U3 H4 _' e7 R1 W9 l- C
model2 = LassoCV().fit(X, y)9 N9 j$ _4 o& Y& z
9 o0 b1 Q [7 |0 f3 k7 i使用 LassoCV 进行交叉验证,自动选择最佳的正则化参数 alpha。8 m. o6 y+ c, g; D1 e! K
8 \' k, }: R: `' W' M9 X7.输出模型参数和评估结果:$ o- k0 @; r/ O2 `1 h; H/ R
. o7 W) v+ ^. x8 e; z b0 = model2.intercept_0 a7 _2 ~: y1 i( J* s9 n2 e2 h
b1, b2 = model2.coef_[0], model2.coef_[1]
# N$ g5 ]' x! E; A print('y = {:.4f} + {:.4f}*x1 + {:.4f}*x2'.format(b0, b1, b2))' J- ?9 y9 a6 W$ k
print('R_square =', model2.score(X, y))
. [& T2 X7 {% H' \9 w print('k =', model2.alpha_)
9 n, U0 }3 N6 U3 B/ X3 @
0 Y" L/ P' E b# C输出拟合的线性模型的截距、系数以及 R_squared 值,还输出了最佳的正则化参数 alpha。: [) C! `+ s8 W: E% q* @
这段代码通过 Lasso 回归模型拟合了给定的数据,并展示了不同 alpha 值下的系数变化,最后选择了最佳的 alpha 值进行拟合,并输出了拟合结果和评估指标。& v; }# ~2 ]4 a9 L
1 L8 l. L) q( |) k& s8 [, {# `
8 ]2 Q; f! i& c" O0 ^
2 q! V, B `# X+ m! Y& A |
zan
|