7 x3 u1 D& C# t( F( ~) G
1.导入所需库: - x% X, J1 J2 D- ~( j0 B; Q# D# n m$ I
import numpy as np+ M/ q: x" Q# ` g
import pandas as pd1 I) F3 x$ j7 ?; b- S) j6 _/ b
import matplotlib.pyplot as plt ) _0 W- A- R( p$ H4 q from sklearn.linear_model import Lasso, LassoCV# |9 L! c& e! O0 h) ?
1 m8 t7 B! r$ V! `5 ?( V
- i7 o% r. V% Z0 j0 E
2.定义源数据: ! ^; {8 e/ o) |; o, n9 j( _" b: D2 L# l! t
df = pd.DataFrame({ ) y' t' h& j z! f 'x1': [7, 1, 11, 11, 7, 11, 3], - y) D: }3 B: U% H3 v, r4 x. x 'x2': [26, 29, 56, 31, 52, 55, 71], 2 k1 J6 D) Q. Q) I' Y 'y': [78.5, 74.3, 104.3, 87.6, 95.9, 109.2, 102.7], J6 i5 H5 y9 k! l2 T6 @# a })0 K7 J/ E1 l3 q& _# k1 {' F3 s( [8 f
M; b$ O$ h3 | Q: m创建了一个包含 x1、x2 和 y 列的 DataFrame,作为原始数据。4 [, ~) h T$ u& `
1 @1 @: z1 B* d' V$ S4 p) k
3.将数据转换为数组格式: - H5 |$ X8 w$ z8 P$ O. x8 Y( ^, T. P# z
X = np.array(df[['x1', 'x2']]). S9 ?# g( t" ^( D; F' M. S+ z" K
y = np.array(df[['y']])# a# p6 k |/ k6 N/ g. c
1 E, R* K: @+ v! t# W
将特征和目标变量分别转换为 NumPy 数组格式。5 z$ o( B4 p. v0 U3 w
/ J& d, m* T4 C$ H% ]& Q4.遍历不同的 alpha 值,计算 Lasso 回归模型的拟合结果:$ e+ A; I) b, c& {9 V+ k0 D& `
- m5 ^4 L% J! Z1 v
k_array = np.logspace(-4, 1.5, 100) ! Z/ l+ {* m- U4 ]" @3 P, c x1_list, x2_list = [], []' `, B' ~% V' f, T6 P, S
for k in k_array: Z( i( `& X. r: `1 E
model = Lasso(alpha=k).fit(X, y) 6 e& b1 i4 [. I' H) g x1_list.append(model.coef_[0]) 8 P# b% U6 P6 | x2_list.append(model.coef_[1]) 4 q/ q# B- v8 T8 l) Q r2 J' @0 |* S$ e0 K
使用 Lasso 回归模型,遍历不同的正则化参数 alpha 值,计算不同 alpha 值下 x1 和 x2 的系数。# T5 G- ~$ v' U/ }2 v h
: L: R/ ?' z% \
5.绘制岭迹图: 5 W, t! j9 [1 u& \& Q4 u 7 v; D$ j: \ Z1 c9 ? plt.scatter(k_array, x1_list) & k, L: p" \$ q9 Z0 h9 x plt.scatter(k_array, x2_list)7 P. c8 ^' h( d* f' l; w: B2 V
plt.plot(k_array, x1_list, label='x1') ' z! f8 i! c1 K H! H E4 E plt.plot(k_array, x2_list, label='x2')3 A; Q8 z+ P A9 Z' C" C
plt.legend() h: i. _. e1 k9 \3 K3 Q