- 在线时间
- 480 小时
- 最后登录
- 2026-6-1
- 注册时间
- 2023-7-11
- 听众数
- 4
- 收听数
- 0
- 能力
- 0 分
- 体力
- 7823 点
- 威望
- 0 点
- 阅读权限
- 255
- 积分
- 2934
- 相册
- 0
- 日志
- 0
- 记录
- 0
- 帖子
- 1174
- 主题
- 1189
- 精华
- 0
- 分享
- 0
- 好友
- 1
该用户从未签到
 |
( l& d1 I- A) G; N/ S& ^1.导入所需库:
- q5 ~. n; m0 X# G8 h T: ~
; E; r+ Z! t# W5 t import numpy as np
6 n. [& {- Q6 M4 O! ] import pandas as pd/ k. h& J% V) M& U) a9 F$ { b
import matplotlib.pyplot as plt
/ [ k8 ?" s8 | _8 n from sklearn.linear_model import Lasso, LassoCV
' l% {' d1 o7 B
1 \0 ]/ X- T* D
' {6 t3 V$ Q' i9 ^, A4 F3 x2.定义源数据:; u$ m. O4 R: a/ p b
* @4 [/ `2 w, H' I2 R" t1 n( z
df = pd.DataFrame({
( n; p$ i) a5 q3 S5 b 'x1': [7, 1, 11, 11, 7, 11, 3],
) g9 Q2 G/ ~. S, J: V) [ 'x2': [26, 29, 56, 31, 52, 55, 71],' g0 z7 }: a" H0 N
'y': [78.5, 74.3, 104.3, 87.6, 95.9, 109.2, 102.7],& L7 [' w$ Y) K* v( ?
}); f1 s& U- E2 k/ u( W
, a1 W i7 p: U9 e( Q X* H创建了一个包含 x1、x2 和 y 列的 DataFrame,作为原始数据。
3 [4 V% ^4 z: z8 z7 C7 L5 L& z- }7 d0 [; }+ m
3.将数据转换为数组格式:: q1 t% B3 P: ~$ c) H) k
; W- p+ d$ f b D# c) d8 {
X = np.array(df[['x1', 'x2']])5 E" I& }+ _2 J" K0 h# O
y = np.array(df[['y']])$ ?' `1 U4 N2 h) P( f
- {. C( u5 ?: E+ b @1 v. {) v
将特征和目标变量分别转换为 NumPy 数组格式。
# Z4 [0 f; p0 a, U# s
! q/ ?0 Q) h. S% t3 N& @+ |4.遍历不同的 alpha 值,计算 Lasso 回归模型的拟合结果:$ w4 C+ m6 o7 J4 m
% X0 N6 a3 _- W% t* p
k_array = np.logspace(-4, 1.5, 100)
" o0 p( _/ L# Y6 j x1_list, x2_list = [], []* H# n+ R( d h) O7 b4 _
for k in k_array:
6 Z) D. h1 ^7 D. o% c model = Lasso(alpha=k).fit(X, y)
5 ?" E: G. f; l7 s4 p1 p x1_list.append(model.coef_[0])
! q" _% w" c3 g' V x2_list.append(model.coef_[1])
: ]6 y$ ?" B. P5 o2 x# D& M+ i0 K, W1 y8 X: B: u) Z
使用 Lasso 回归模型,遍历不同的正则化参数 alpha 值,计算不同 alpha 值下 x1 和 x2 的系数。
6 h: J: |! k9 n7 K6 F2 p! l
/ o$ a. n6 \0 I L3 X5.绘制岭迹图:7 m" Y8 B' o1 z. A' `( K7 x
2 |: o) Y6 L3 M7 o+ ]
plt.scatter(k_array, x1_list)
E: Y* v- ]' t plt.scatter(k_array, x2_list) ?4 s4 B8 b1 ]% \6 f3 J
plt.plot(k_array, x1_list, label='x1')8 \; ], Y; a" M3 x8 C
plt.plot(k_array, x2_list, label='x2')
% d9 _/ \$ [# a7 [! j plt.legend()4 Y/ s' P% p3 L8 h; r7 D$ V
: {6 b$ ^ v4 M3 @4 m6 t* n1 d使用 plt.scatter() 绘制不同 alpha 值下 x1 和 x2 的系数散点图,并使用 plt.plot() 绘制岭迹图,分别标记了 x1 和 x2 的系数曲线,并添加图例。8 O; Q% D; `8 P- n, w% T& ?9 z
$ m! m$ B( l/ C$ d$ E# N: d6.使用 LassoCV 自动选择最佳 alpha 值:
2 I2 N# c+ Q2 @
1 R- C- ~* T' p! c3 W model2 = LassoCV().fit(X, y)+ G a! x8 P' B* g; l: R
; l; q1 w# t" |7 D使用 LassoCV 进行交叉验证,自动选择最佳的正则化参数 alpha。
0 d& K: X4 b8 V: U1 R( ]5 m3 _
6 S2 v) w! r4 j: O7.输出模型参数和评估结果:, h: J6 i; s, e
# K2 w6 G- y/ A, m4 q
b0 = model2.intercept_
9 y/ V U5 R. ~' |7 x. |) E b1, b2 = model2.coef_[0], model2.coef_[1]6 b- Q! k, U% B. E- o) Q
print('y = {:.4f} + {:.4f}*x1 + {:.4f}*x2'.format(b0, b1, b2))
, m$ \( s! ?6 r& s/ `# H# ^ print('R_square =', model2.score(X, y))
1 C# m' Q4 v# B$ ` }+ h$ K; I print('k =', model2.alpha_)
8 N# L* a; `$ j3 l5 y. a: l; v' O; ?- n) D# C& N# [
输出拟合的线性模型的截距、系数以及 R_squared 值,还输出了最佳的正则化参数 alpha。
d+ Z6 {: a/ g3 R {8 Q这段代码通过 Lasso 回归模型拟合了给定的数据,并展示了不同 alpha 值下的系数变化,最后选择了最佳的 alpha 值进行拟合,并输出了拟合结果和评估指标。7 y9 X8 o4 h* t) ^1 Q% f3 ]
0 o! x( t$ i6 Y( Z P* g# W. a. o/ r3 r. r/ D! y; O. q& h8 @
( W6 q& ^) q& o; w, P5 p% \( f
|
zan
|