- 在线时间
- 478 小时
- 最后登录
- 2026-4-9
- 注册时间
- 2023-7-11
- 听众数
- 4
- 收听数
- 0
- 能力
- 0 分
- 体力
- 7788 点
- 威望
- 0 点
- 阅读权限
- 255
- 积分
- 2922
- 相册
- 0
- 日志
- 0
- 记录
- 0
- 帖子
- 1171
- 主题
- 1186
- 精华
- 0
- 分享
- 0
- 好友
- 1
该用户从未签到
 |
; y4 j& A) E6 v: X8 e$ |( P# L1.导入所需库:" u* W2 o5 ]& T
* {0 |* E" K# G! h& e* O2 H
import numpy as np* \- ~6 i9 U" I) Q3 Q2 p" h
import pandas as pd
9 E/ T$ j5 N3 z% B' ] import matplotlib.pyplot as plt
- h- Z' D* {" k4 b from sklearn.linear_model import Lasso, LassoCV
4 j3 `; ^. g" p& F2 W
0 \1 w) G+ p g3 T5 t- y
+ M) w$ ~/ k- s" o2.定义源数据:% K( \+ P. b- @
3 _3 a# A; c; L/ h) } df = pd.DataFrame({3 c2 g6 J9 D, _% `) N2 x4 u* c
'x1': [7, 1, 11, 11, 7, 11, 3],
/ Y- n1 }1 E+ n: N, J3 L( c 'x2': [26, 29, 56, 31, 52, 55, 71],5 c, c8 b& r7 Q. X# s! E/ O7 F
'y': [78.5, 74.3, 104.3, 87.6, 95.9, 109.2, 102.7],
0 c& L1 L& W" F })
6 j% X! d( L5 J; a j
# i! x2 Y$ D# M- B4 }创建了一个包含 x1、x2 和 y 列的 DataFrame,作为原始数据。
t: E2 z( ?, P b) z+ F# @+ V+ h# d% `# Y: d
3.将数据转换为数组格式:
- V8 ]6 J9 m2 W2 L; F4 P, Z" W4 y; ^# f
X = np.array(df[['x1', 'x2']]); ?% b5 H) T2 k8 Q! ]2 ?
y = np.array(df[['y']])
/ @5 b9 ?6 `% Y [. C: R2 A P9 U7 M/ y' F% j! o1 y# `1 o* n
将特征和目标变量分别转换为 NumPy 数组格式。; a" }: v1 g7 x6 x' E/ ^
5 D" a. u u% O# j: G% G6 j
4.遍历不同的 alpha 值,计算 Lasso 回归模型的拟合结果:! ^ b( u1 {% B2 q/ M V+ \
+ [) A+ G& o( ?5 D2 o
k_array = np.logspace(-4, 1.5, 100)- }! D7 Y2 ^) ]4 H
x1_list, x2_list = [], []
) N; Y8 N& v+ W4 z8 Y for k in k_array:; l6 ~+ i' ^3 y2 J
model = Lasso(alpha=k).fit(X, y)
- Z- D6 e" q' L" e8 B3 S+ N! X x1_list.append(model.coef_[0])* G' z5 I, z& O8 t7 e# v
x2_list.append(model.coef_[1])
/ \! S$ j# E a8 b8 J+ A8 X4 x/ O5 M/ F' m1 m& v4 n' V5 }
使用 Lasso 回归模型,遍历不同的正则化参数 alpha 值,计算不同 alpha 值下 x1 和 x2 的系数。9 e) `$ _; H. ^- l# E; [0 e+ [2 m- J
) A. k# F) b& x8 d, s0 |& ]5.绘制岭迹图:
, K9 O8 ?' r8 k& M6 f I: {0 c+ N0 D9 k) n
plt.scatter(k_array, x1_list)
/ e1 {2 ^' i0 x0 K- Z plt.scatter(k_array, x2_list)
& N1 L$ A; ?: B1 ? plt.plot(k_array, x1_list, label='x1')5 Y2 i. l% ?' \% c4 [# s6 Z
plt.plot(k_array, x2_list, label='x2')
6 x& d4 n/ u: h# L5 y$ r! H6 m plt.legend()
+ E, K# f; f9 o, S7 J: c
/ a) N" y- L/ C8 W- y' q使用 plt.scatter() 绘制不同 alpha 值下 x1 和 x2 的系数散点图,并使用 plt.plot() 绘制岭迹图,分别标记了 x1 和 x2 的系数曲线,并添加图例。
8 u r" O4 `& l0 S" F" ?! i( Q& B4 I& x4 U* A4 m
6.使用 LassoCV 自动选择最佳 alpha 值:
8 ~2 T: ^: i# o" t
G1 x; ]! T8 G3 ?0 o5 u# I model2 = LassoCV().fit(X, y). Z1 O, p- Y6 _; i4 l3 }
- z/ y9 E1 w Y
使用 LassoCV 进行交叉验证,自动选择最佳的正则化参数 alpha。
) J2 t3 O8 M8 q4 S) l* f6 Y
3 n3 F" @7 ^! b* m! k7 H5 N7.输出模型参数和评估结果:
4 e6 B; P9 A2 N) U3 N- q% C! u3 I" z
b0 = model2.intercept_
# K- S; |, Q; J4 x( a b1, b2 = model2.coef_[0], model2.coef_[1]7 P, j: T; l& u4 x2 _; S
print('y = {:.4f} + {:.4f}*x1 + {:.4f}*x2'.format(b0, b1, b2))' z' t: T: Q% j" P2 W& R/ i
print('R_square =', model2.score(X, y))
+ W2 x, a( t" U j4 G/ B print('k =', model2.alpha_)% h! m+ C( @1 [" w4 I6 k
' d' h$ `- c; R; D# q) v输出拟合的线性模型的截距、系数以及 R_squared 值,还输出了最佳的正则化参数 alpha。+ d. S4 w1 R; f% Y8 X: @
这段代码通过 Lasso 回归模型拟合了给定的数据,并展示了不同 alpha 值下的系数变化,最后选择了最佳的 alpha 值进行拟合,并输出了拟合结果和评估指标。
: W! p' A( A/ A- t
$ B+ ]7 p2 _" w ?9 F( g% K$ q/ K% l' q9 e6 G+ u3 |' N7 l
# {6 T* {" J! V& q7 v* q
|
zan
|