- 在线时间
- 472 小时
- 最后登录
- 2025-9-5
- 注册时间
- 2023-7-11
- 听众数
- 4
- 收听数
- 0
- 能力
- 0 分
- 体力
- 7687 点
- 威望
- 0 点
- 阅读权限
- 255
- 积分
- 2887
- 相册
- 0
- 日志
- 0
- 记录
- 0
- 帖子
- 1161
- 主题
- 1176
- 精华
- 0
- 分享
- 0
- 好友
- 1
该用户从未签到
 |
% D8 x9 X3 c/ M1.导入所需库:
. o+ i1 M& T7 x1 Q% ~2 {1 L1 x: p" x( p' `' A, C, N! a& F* x
import numpy as np* l8 \6 y. |5 H/ M4 d; e! p
import pandas as pd$ O8 y5 ]' u/ q8 V3 D4 N/ [4 k0 j
import matplotlib.pyplot as plt; ^5 b8 P% z5 `; y
from sklearn.linear_model import Lasso, LassoCV
, W7 J* n- y- r$ M( O1 |7 p) a# Y( x p& _+ i7 r9 a% L
5 @5 S4 m3 u3 A% d, ?+ A2.定义源数据:: P6 y4 z3 o& ?; F# n2 L
2 c. B5 J+ R. Y( D2 W- L3 i* L df = pd.DataFrame({
. {- P/ p9 i$ x9 h 'x1': [7, 1, 11, 11, 7, 11, 3],
3 g2 C, Q- a2 A. B, t+ J* M 'x2': [26, 29, 56, 31, 52, 55, 71],
/ r8 `* q/ h; }- o. { 'y': [78.5, 74.3, 104.3, 87.6, 95.9, 109.2, 102.7],
: Z& \/ M: |1 @9 S/ K5 `* Z })
) Y( w* R+ X& |7 R
; s/ c/ U& ^- y5 ?. ?$ U* I创建了一个包含 x1、x2 和 y 列的 DataFrame,作为原始数据。
. @( @/ g" U ^. j( {- J3 }0 s* N7 I* G) d% d1 p
3.将数据转换为数组格式:4 n! T: ]+ D5 ^$ L8 _
$ q2 R+ x' f) | n$ g0 { X = np.array(df[['x1', 'x2']])" f# c4 ?# D/ m1 t* ]' G
y = np.array(df[['y']])
* O! \, q. y0 a$ B. y& X) m# Y
9 Q8 B- Y N+ k3 ]& X( S4 g% O将特征和目标变量分别转换为 NumPy 数组格式。. f/ H, h! G3 m( m
1 L1 w, y! E* s3 ^0 z4.遍历不同的 alpha 值,计算 Lasso 回归模型的拟合结果:, r+ f: z( m( C
/ a7 j5 R' i+ l% N1 N
k_array = np.logspace(-4, 1.5, 100)7 ^7 X6 P/ f, M
x1_list, x2_list = [], []
4 \# L+ W: p9 R" d$ j2 b# g/ Z for k in k_array:
/ D1 e* V1 _# `+ C% f( H% `! | model = Lasso(alpha=k).fit(X, y)+ Z$ F' O3 R5 v7 r
x1_list.append(model.coef_[0]) |0 Z8 O' n- W; b( F
x2_list.append(model.coef_[1])
' w. E4 ?9 E* L' I S% B
4 P' ]* Z! \ W, f# }使用 Lasso 回归模型,遍历不同的正则化参数 alpha 值,计算不同 alpha 值下 x1 和 x2 的系数。
' W3 Y: h& R+ F) l& @' Q {
9 D+ |* b b9 T( ~1 N/ V4 j5.绘制岭迹图:
! N' j: g7 ~" I5 S& W) B- }. g2 n7 I4 y: ]+ K
plt.scatter(k_array, x1_list)3 j X" p, f% t3 C! }
plt.scatter(k_array, x2_list)0 n3 @+ q3 E; | c" J6 X* p1 {
plt.plot(k_array, x1_list, label='x1')
) A/ u9 k1 e& n. u plt.plot(k_array, x2_list, label='x2')7 j! j0 U3 B. F' R: D- q
plt.legend()
0 o9 x4 y: m/ n# @& s4 X
/ T, `$ S$ S" _. C1 ^9 z Q使用 plt.scatter() 绘制不同 alpha 值下 x1 和 x2 的系数散点图,并使用 plt.plot() 绘制岭迹图,分别标记了 x1 和 x2 的系数曲线,并添加图例。2 _/ d6 Y% a5 h4 {# H% M: r
. A" ^0 p) E% w& ]( n2 J6.使用 LassoCV 自动选择最佳 alpha 值:) p% j# ]* ~" A4 y1 O/ X$ y
. W7 J D: h+ v
model2 = LassoCV().fit(X, y)" q/ n+ i/ ?. `
x$ D. v8 s$ z4 m4 L使用 LassoCV 进行交叉验证,自动选择最佳的正则化参数 alpha。6 p1 Z# f! X" o4 v; @. Q
3 C) \0 Q% l/ z3 g+ w7.输出模型参数和评估结果:$ j! d1 O u: Z/ q' g
2 h, b7 | C/ f$ T P5 @ b0 = model2.intercept_& \/ w1 Y2 r+ e
b1, b2 = model2.coef_[0], model2.coef_[1]' ~) q$ |" D7 F* v7 i( R& j0 k6 y
print('y = {:.4f} + {:.4f}*x1 + {:.4f}*x2'.format(b0, b1, b2))" L) e" v* R5 ^7 {& _6 q: r5 b
print('R_square =', model2.score(X, y))! M S5 r6 f4 Y
print('k =', model2.alpha_)
0 a5 P2 O! R! d# @7 T3 A0 C7 u9 j' h: W9 z5 q" T% C# r
输出拟合的线性模型的截距、系数以及 R_squared 值,还输出了最佳的正则化参数 alpha。
6 _; h5 X0 u* s- l这段代码通过 Lasso 回归模型拟合了给定的数据,并展示了不同 alpha 值下的系数变化,最后选择了最佳的 alpha 值进行拟合,并输出了拟合结果和评估指标。
$ ?; W0 x1 v% _/ Q* U, o4 T0 X7 k$ j# s1 Q H0 E! O' R
: C3 h! Z4 [% @7 l+ |* F8 r! S( ?( [/ g
|
zan
|