- 在线时间
- 479 小时
- 最后登录
- 2026-5-9
- 注册时间
- 2023-7-11
- 听众数
- 4
- 收听数
- 0
- 能力
- 0 分
- 体力
- 7813 点
- 威望
- 0 点
- 阅读权限
- 255
- 积分
- 2931
- 相册
- 0
- 日志
- 0
- 记录
- 0
- 帖子
- 1173
- 主题
- 1188
- 精华
- 0
- 分享
- 0
- 好友
- 1
该用户从未签到
 |
2 F& N# ~) q" Z: e+ l1.导入所需库:3 a0 P& M R. v; _) F
7 A* X' r6 \9 M; {% {/ | import numpy as np9 }8 K2 T3 |% c P0 l# s
import pandas as pd9 v) c- e4 Z$ x) K/ f! h
import matplotlib.pyplot as plt5 I" _% e3 l. z ]3 B/ Z5 I
from sklearn.linear_model import Lasso, LassoCV* n; X1 _* G% o d; O& @
& T( e! M$ S" F; r: ~
% _# N0 f: n8 Q! x; q2.定义源数据:
' J8 W9 B1 a; W7 i* W% m6 m& P: Q* {% N: A' y* a$ G
df = pd.DataFrame({" K2 O- D# E2 C1 O; }
'x1': [7, 1, 11, 11, 7, 11, 3],6 c% s) o" Z) G) g/ B- v4 d
'x2': [26, 29, 56, 31, 52, 55, 71],4 k& P s4 L g; V
'y': [78.5, 74.3, 104.3, 87.6, 95.9, 109.2, 102.7],& \- w. y) z& r: p) Q1 r9 n' {1 s
})* D( j$ v; U. x9 ^% _
( K% I0 N+ H/ u: |
创建了一个包含 x1、x2 和 y 列的 DataFrame,作为原始数据。
1 i4 Z [6 a: Y3 W, U2 f
& @6 ?8 r Z3 M" S4 o% @; R+ u3.将数据转换为数组格式:7 j$ m( I7 L' {0 {
* D: h9 g" M+ d1 K: w6 e
X = np.array(df[['x1', 'x2']])
z. Z# C* |/ V: f+ ] y = np.array(df[['y']])4 X' D" O5 Z# T0 Q) `/ _
/ d8 g! k& U& [1 c7 B- x: E将特征和目标变量分别转换为 NumPy 数组格式。8 M# o8 J3 E" r: w
7 z# m- x& f2 S- R" r4.遍历不同的 alpha 值,计算 Lasso 回归模型的拟合结果:
7 M. G4 W2 S W. d0 m# @5 Z6 J: b% B, _: E9 ?7 y- C: }5 f* z& D
k_array = np.logspace(-4, 1.5, 100)
' e' U8 C: F7 K3 C% o x1_list, x2_list = [], []
: a: S& f5 |% j1 j2 b' U; h5 ~ for k in k_array:4 d( g9 J4 A; Z
model = Lasso(alpha=k).fit(X, y)
1 Y) n4 c; z( u2 d% u x1_list.append(model.coef_[0])5 q1 w. U9 y# b. d. u: n$ }' A
x2_list.append(model.coef_[1])
2 b$ {, {7 O4 M. P6 J( J! B
# h/ t9 b l1 p0 A! ^7 A使用 Lasso 回归模型,遍历不同的正则化参数 alpha 值,计算不同 alpha 值下 x1 和 x2 的系数。
5 a8 D, _+ @4 p g |+ W2 W0 U3 d$ f
5.绘制岭迹图:- i6 h' l* u& j" m& D
9 V+ ~2 o' Q( R8 j plt.scatter(k_array, x1_list); X2 G7 Y/ G' p
plt.scatter(k_array, x2_list)1 I: C) _* f3 v, M. O
plt.plot(k_array, x1_list, label='x1')
( ^6 w; D" _ D, g: p plt.plot(k_array, x2_list, label='x2')
8 [! \, v. F) k plt.legend()
! H, Q# q" q0 x T2 U1 y
. T) \$ Y" `3 h! \使用 plt.scatter() 绘制不同 alpha 值下 x1 和 x2 的系数散点图,并使用 plt.plot() 绘制岭迹图,分别标记了 x1 和 x2 的系数曲线,并添加图例。
6 m$ m: c/ ~ R6 a6 V2 s# ~8 g
8 j f# v* I3 l) T1 K3 @' U6.使用 LassoCV 自动选择最佳 alpha 值:
: s8 V. }: O N+ _0 C# b' T2 B
- c+ Y* t( H% d/ R- F6 T1 | model2 = LassoCV().fit(X, y)- q" w9 a `( H7 m4 i' k
0 x2 W& D l5 @( M, Y" `
使用 LassoCV 进行交叉验证,自动选择最佳的正则化参数 alpha。" S( r' ^1 H! e/ j+ q
; I3 f$ I& z- l) a$ o2 j7.输出模型参数和评估结果:
: N3 D. s) M4 I& o
0 k+ r& k0 {9 s7 ` b0 = model2.intercept_
3 I+ T0 C/ B) W" w5 t; W b1, b2 = model2.coef_[0], model2.coef_[1]
& F3 |1 U" a# F7 o print('y = {:.4f} + {:.4f}*x1 + {:.4f}*x2'.format(b0, b1, b2))% `& K3 ` \: M: [
print('R_square =', model2.score(X, y))
: S0 E2 n w4 i9 p; T print('k =', model2.alpha_)" j2 X$ L1 q* L* ?% m0 i) z
- L1 u, \% X! M& k3 D2 L ]输出拟合的线性模型的截距、系数以及 R_squared 值,还输出了最佳的正则化参数 alpha。
' M# c) N# f& c& f) l5 b9 R2 v这段代码通过 Lasso 回归模型拟合了给定的数据,并展示了不同 alpha 值下的系数变化,最后选择了最佳的 alpha 值进行拟合,并输出了拟合结果和评估指标。( a4 C5 i9 X7 O# ^- Y0 K
9 Q* P6 W1 Q- C$ x% X
4 ?$ [" ]/ _/ s4 ]6 I: N: K6 i/ i! j
" K( V* V; G$ W; k4 {) f7 V |
zan
|