h, W) y$ X6 r& P import numpy as np 6 m, r; Q/ _8 w+ l( A import pandas as pd% t0 s' g4 w R) r( O9 O' m
import matplotlib.pyplot as plt& v+ F+ B8 t( J! ~9 f& X
from sklearn.linear_model import Lasso, LassoCV : ?$ y, W* h/ U( F. B2 U+ i$ w# X7 A2 W
% M2 L* ^ I! n7 N2 I2.定义源数据: 0 l! i5 J9 [7 p8 o1 e. m& t3 o 9 _8 y# s8 X/ R df = pd.DataFrame({% X g8 w- h# P w- H
'x1': [7, 1, 11, 11, 7, 11, 3], 4 v) r0 `3 M* X" p9 f5 F. g4 y 'x2': [26, 29, 56, 31, 52, 55, 71],1 x% l W) U+ J4 ?0 y$ g
'y': [78.5, 74.3, 104.3, 87.6, 95.9, 109.2, 102.7], ) d3 `3 K( X7 Y3 n2 Z })" }6 ]: {+ M- e n1 y
2 ]: Y! L- O6 \) s
创建了一个包含 x1、x2 和 y 列的 DataFrame,作为原始数据。0 j" e8 G/ a( y2 R
6 x' v0 v! `% `) {3.将数据转换为数组格式: + t8 w' ?( ?" u5 O' f % t6 `# j" m ^# |$ c/ A3 W/ i7 n1 z X = np.array(df[['x1', 'x2']]) . \, z: O. Y& w( ^5 `8 V. h y = np.array(df[['y']])' n) A8 v' w3 F0 s3 G- [
% W/ u2 \; M8 }( {将特征和目标变量分别转换为 NumPy 数组格式。 1 z4 G' C1 u" I1 q: R3 i7 w ; ^$ G* c V, M! b& E4 g! [4.遍历不同的 alpha 值,计算 Lasso 回归模型的拟合结果:: H1 B4 y" U9 @$ q; I; a) a1 F
. B {. Z: g; H8 M$ h: a" r- ]+ G k_array = np.logspace(-4, 1.5, 100) 6 T- q6 R# T$ f( |* a x1_list, x2_list = [], []8 w' u9 f6 x. y
for k in k_array:5 P; |) j" h; X& q: n. C8 Q$ h. I
model = Lasso(alpha=k).fit(X, y)5 O% Z+ j6 Y/ M w, k- L1 S
x1_list.append(model.coef_[0]) 9 T6 u! I) {& ~% q" @# R4 X x2_list.append(model.coef_[1])2 w* b( a: s2 }2 Q
: H0 j* |3 y7 {8 m, V9 Y. b) m使用 Lasso 回归模型,遍历不同的正则化参数 alpha 值,计算不同 alpha 值下 x1 和 x2 的系数。 6 n7 H% H# K) _# H3 o/ f' k* h$ i0 S8 a; S7 \# }
5.绘制岭迹图: 2 ?5 D: E! X) P# Z& h+ r! H( A; s4 u- {- @
plt.scatter(k_array, x1_list)0 u# c: k) V4 c% j
plt.scatter(k_array, x2_list)$ _- [ |& A; v
plt.plot(k_array, x1_list, label='x1') 8 v! C; U( Y7 ^ plt.plot(k_array, x2_list, label='x2') 6 ?. k8 p/ f! n, I; U u! a plt.legend()- B. A& c* j! _* h