$ x3 e3 o. w1 x% b
1.导入所需库: " C, p$ N5 \# c v0 K, M ; ^0 j, [: d! M1 p import numpy as np ! l& O5 A& h) A7 |0 Z import pandas as pd / t, @# g0 g: @: _ R8 v, H import matplotlib.pyplot as plt7 e% v% v, L+ [2 ?, p3 Q7 {* ~
from sklearn.linear_model import Lasso, LassoCV * G$ r) a+ V7 J4 K 4 r+ g k% @9 W3 O) H: \; ^- R, C; z9 V) l$ Z* w4 Z6 e& ~* u
2.定义源数据: 0 | E; X" s: ]2 R& X' m7 ?9 q! |; q6 o8 g( E2 F& T3 T
df = pd.DataFrame({& j, I4 u0 u* Z0 u# h
'x1': [7, 1, 11, 11, 7, 11, 3],: N( s& x: ?7 }/ O
'x2': [26, 29, 56, 31, 52, 55, 71],8 w. v6 w. E: Q* M0 v) M
'y': [78.5, 74.3, 104.3, 87.6, 95.9, 109.2, 102.7], N4 X: v/ k/ U% Y. Q! a: C5 l6 s
})% F. t$ J, V0 N
) F* U1 ~8 r$ a I: m创建了一个包含 x1、x2 和 y 列的 DataFrame,作为原始数据。 2 B6 o4 {# V; h$ m ) ] M1 v2 b) P3.将数据转换为数组格式:9 y. @" ~( E5 n8 a/ L
' {! t N/ C5 N& Z2 n2 N
X = np.array(df[['x1', 'x2']]) % I8 n" }( ~) {6 k y = np.array(df[['y']]): R* P' x3 n. y5 F1 P
# f; x+ U" H$ _% @& `! k1 t
将特征和目标变量分别转换为 NumPy 数组格式。, v7 `, i7 S, E# G
2 W7 g) `( m) h1 [0 h4.遍历不同的 alpha 值,计算 Lasso 回归模型的拟合结果:+ @" d' E( z) A6 n, u
3 H& C, g+ }' a! B" J* _/ I k_array = np.logspace(-4, 1.5, 100) 1 C, y1 b) Y/ t$ d2 F x1_list, x2_list = [], []7 a7 P: G/ b# `
for k in k_array:% p( Q, a" a& _6 J
model = Lasso(alpha=k).fit(X, y) ?) |9 P2 L0 n2 { x1_list.append(model.coef_[0]) ( w( K/ T' @0 @* ]* ]& r x2_list.append(model.coef_[1])8 w( |0 M. e4 D7 M, ~7 l2 y
4 U4 m W2 M1 x9 @2 M- T) [# S
使用 Lasso 回归模型,遍历不同的正则化参数 alpha 值,计算不同 alpha 值下 x1 和 x2 的系数。& n! o8 m! ]: D, _; x" @
+ j9 ^6 ]' T7 G% t
5.绘制岭迹图: $ T$ u2 F/ E% U9 N$ y Y! ]6 a3 w! k3 x2 @ plt.scatter(k_array, x1_list)7 p0 M# o1 k+ n" W1 |9 e5 [
plt.scatter(k_array, x2_list)' Y! p) d. V4 w+ C4 k$ Y
plt.plot(k_array, x1_list, label='x1') - M/ G2 f9 B) S6 ^ plt.plot(k_array, x2_list, label='x2') - ?' y4 i" I2 B* ]9 p plt.legend()& F! z8 q( L) I. o