/ N! a3 P0 [% t u1 S
1.导入所需库:' D' n# }+ \- s% f* J' H; i( S
4 l/ _& }+ n/ Y# g' Y! Y0 b
import numpy as np7 K$ E, T& F5 t
import pandas as pd " l" _4 p* b' a9 E. O+ H4 O import matplotlib.pyplot as plt l V L1 H4 d7 m
from sklearn.linear_model import Lasso, LassoCV. w* Z/ W2 _% p+ B
5 t' f' O6 {( g4 v" b7 ~
; V7 C4 ]3 L" o' X4 H; A3 X2.定义源数据:1 H) o4 O4 R0 b! u+ y: N. I
7 \1 d5 `7 \* s1 ~+ E/ ?
df = pd.DataFrame({& d- C- d+ ?8 B! u' l$ m
'x1': [7, 1, 11, 11, 7, 11, 3],$ ]! m5 q2 i% L! P: o9 }- ]
'x2': [26, 29, 56, 31, 52, 55, 71],& w) E( G) {! m. t# `, |
'y': [78.5, 74.3, 104.3, 87.6, 95.9, 109.2, 102.7],7 L1 W9 m& R. p
}) 1 M+ \- k/ O( ~+ i' I0 e 6 {: c* W# X) o6 W9 ~3 H创建了一个包含 x1、x2 和 y 列的 DataFrame,作为原始数据。 $ ?7 u0 z0 c/ y7 J $ w3 H4 C0 Q. q& G! U A) z, j- p# B3.将数据转换为数组格式: 7 F2 F/ {2 S; l0 G$ v) j 3 o q$ i9 G, B: ~$ N) v+ a X = np.array(df[['x1', 'x2']])# m3 ~9 z3 f" R: Q% [# k
y = np.array(df[['y']]) , O; \7 A$ i5 e$ A , ?$ H# U2 A" z. y$ V; L将特征和目标变量分别转换为 NumPy 数组格式。0 ]1 U7 O) |8 }7 d3 Q# h
$ ~6 c, Q2 @7 R# b1 l4.遍历不同的 alpha 值,计算 Lasso 回归模型的拟合结果:2 r0 M. r# e a$ ~) _1 z" Z; `% w
6 N+ l" m, D0 X0 A' Y" Q' ~
k_array = np.logspace(-4, 1.5, 100) - u- ?. l) y2 r. J x1_list, x2_list = [], []7 d2 H5 b, F5 j/ j7 a# M# w
for k in k_array:! y7 ? m, ?! }4 F) f7 d5 E9 f
model = Lasso(alpha=k).fit(X, y)" ~6 O7 a. Y+ m' @ D$ W5 X+ O0 W
x1_list.append(model.coef_[0]) 0 @& h! M5 M0 S- \3 Z1 ?$ Z- v x2_list.append(model.coef_[1]), M. n$ W% `( o& `/ @6 `3 @ ?, S
5 w# E( T$ a6 D* y: Y5 y2 Z
使用 Lasso 回归模型,遍历不同的正则化参数 alpha 值,计算不同 alpha 值下 x1 和 x2 的系数。: q; j' l6 S3 V f# X
; `) ^; d& [+ k- e7 t( |( }, Z' q3 E0 l
5.绘制岭迹图: ' B9 [: Z3 ]+ p; _1 k : J! U; z, \/ w plt.scatter(k_array, x1_list) q$ ]8 v& v& B! M9 _ plt.scatter(k_array, x2_list) 7 k% N; I i% {" U m/ s( w plt.plot(k_array, x1_list, label='x1') ' S0 i ^. D+ O$ i v. r plt.plot(k_array, x2_list, label='x2')" c! o2 C. Q% X& f
plt.legend() ' C3 T$ U. d: l5 ^$ {4 ~# q( \$ A6 @( Y! `. r$ L- l! @/ m# }# P1 M
使用 plt.scatter() 绘制不同 alpha 值下 x1 和 x2 的系数散点图,并使用 plt.plot() 绘制岭迹图,分别标记了 x1 和 x2 的系数曲线,并添加图例。 7 j6 z/ V" } A8 x* ^( m' V8 l7 n' b6 K# {4 j, m2 Y" ?7 g1 S
6.使用 LassoCV 自动选择最佳 alpha 值:* k1 b0 M+ e" B- u& J: W9 w
3 j: \: ^" T; X7 j model2 = LassoCV().fit(X, y)1 n% D% [. w D8 a
3 E$ l. S6 C8 w& u7 Q+ p: u: V
使用 LassoCV 进行交叉验证,自动选择最佳的正则化参数 alpha。) s9 k) y" r6 M5 g
1 M, q3 M9 k" c& n
7.输出模型参数和评估结果: ) S# O6 P$ r0 p2 {% Z ) o: j4 ]+ y8 |* B b0 = model2.intercept_( W+ X* {) X2 b9 d* @
b1, b2 = model2.coef_[0], model2.coef_[1] : O. I7 W- c+ s& U1 ~) F" f: W4 i print('y = {:.4f} + {:.4f}*x1 + {:.4f}*x2'.format(b0, b1, b2)) 7 E0 [, s8 A$ _8 d0 w print('R_square =', model2.score(X, y)) $ f& c u9 ]8 ~# | print('k =', model2.alpha_). e4 V& W7 e, V5 |* V/ N5 a4 N
2 T; g7 [. |% U+ I* H3 _3 d2 y! w
输出拟合的线性模型的截距、系数以及 R_squared 值,还输出了最佳的正则化参数 alpha。+ _" m, C. B- ^! p- Y
这段代码通过 Lasso 回归模型拟合了给定的数据,并展示了不同 alpha 值下的系数变化,最后选择了最佳的 alpha 值进行拟合,并输出了拟合结果和评估指标。 ; I" X. I* b8 b/ v! U0 M' @# ?2 l7 k* ^5 |, U5 B
* D0 H3 O6 l0 u
, i1 c6 d2 g! X# Q/ N3 x. U