- 在线时间
- 478 小时
- 最后登录
- 2026-4-9
- 注册时间
- 2023-7-11
- 听众数
- 4
- 收听数
- 0
- 能力
- 0 分
- 体力
- 7788 点
- 威望
- 0 点
- 阅读权限
- 255
- 积分
- 2922
- 相册
- 0
- 日志
- 0
- 记录
- 0
- 帖子
- 1171
- 主题
- 1186
- 精华
- 0
- 分享
- 0
- 好友
- 1
该用户从未签到
 |
代码执行了以下操作:$ K) E' i' N% _ B# j
$ L6 \ q: D. Q! Z% D
1.导入所需库:- import numpy as np5 c7 Q/ O+ L$ I
- I; W6 E* Q. `' e- import pandas as pd
& ?8 k9 _! B& Z
: I: _\" t( ~' f2 W! x/ Y+ E- import matplotlib.pyplot as plt
0 \4 a) e6 X7 W( O - 4 ~# ^, g; b9 s: d
- from sklearn.linear_model import Ridge, RidgeCV
复制代码 2.定义源数据:- df = pd.DataFrame({
4 \8 J N- I& O9 @# _2 t' ] |
* L: B2 |2 A, W9 n6 Z1 | h3 ]2 S- 'x1': [7, 1, 11, 11, 7, 11, 3],
+ y+ D( H6 \$ J4 ~5 y; H
/ h7 W& X0 O3 i- 'x2': [26, 29, 56, 31, 52, 55, 71],4 r, W) b# ?( x0 l
- ' {* r6 E- U4 \6 |) {
- 'y': [78.5, 74.3, 104.3, 87.6, 95.9, 109.2, 102.7],
( p, f0 M\" S/ }' h3 B! _1 O% v F
$ e2 V& E3 ^) r8 B; k S- })
复制代码 创建了一个包含两个自变量(x1 和 x2)和一个因变量(y)的 DataFrame。. F* @- I: J) b' X! l! l: R9 x7 ]
' f* a/ Y0 y3 R# T
3.将数据转换为数组格式:- X = np.array(df[['x1', 'x2']]) # 特征集
, Y$ x3 e2 m6 N0 m! `8 S4 Q) s: x - 7 z6 P\" y5 F8 E( m; L9 w0 g
- y = np.array(df[['y']]) # 目标集
复制代码 4.遍历不同的正则化参数 ( k ):- k_array = np.logspace(-4, 1.5, 100)
! Y( `* U) m- ^0 n, k - * S, u/ D8 F& R
- x1_list, x2_list = [], []5 M( ]0 `/ A: P- V
/ j& t, b) Z8 a0 g& W' X- for k in k_array:4 ^; n/ V3 l7 Y+ G\" O; v4 C; d
- 3 F* n( V) J1 R) f
- model = Ridge(alpha=k).fit(X, y)
, F/ {% u: g0 K) I$ j# ]. J- c
$ a& A3 Y) E- t8 q% p( a; R- x1_list.append(model.coef_[0][0])
+ M\" [% j5 w# f. u - # s( y- D. q+ K7 m
- x2_list.append(model.coef_[0][1])
复制代码 遍历了一系列正则化参数 ( k ),对每个参数值使用 Ridge 回归模型拟合数据,并将得到的系数存储到 x1_list 和 x2_list 中。& z$ g1 E2 `- A
} n, a1 X9 d5 g, I
5.绘制岭迹图: - plt.scatter(k_array, x1_list)4 w/ k1 v$ x% I# @, }
- - t; f' u: O- t5 \! `
- plt.scatter(k_array, x2_list)7 y8 o ], r# S! @
- 4 Q/ ^9 c7 F3 q$ B. U6 o k& Z0 a
- plt.plot(k_array, x1_list, label='x1')
- # W+ E, U( s9 L4 O4 i h/ j+ S
- ) H+ Q5 N! N$ ~# e9 ?1 Y
- plt.plot(k_array, x2_list, label='x2')0 d# P, @0 w9 u
- \\" p2 D9 w- R% V& L+ F* P* T
- plt.legend()
绘制了岭迹图,展示了不同正则化参数 ( k ) 下,系数 ( b1 ) 和 ( b2 ) 的变化趋势。1 a8 B+ @% v6 z
' u& T* u- s9 v+ p+ H6 G9 G4 {6.自动匹配最佳 ( k ) 值:- model2 = RidgeCV().fit(X, y)
复制代码 使用 RidgeCV 自动匹配最佳正则化参数 ( k ) 并拟合数据。2 z. {6 p0 v4 Z2 E
5 m% x; u" q- b7.输出最佳模型的参数和拟合优度:- b0 = model2.intercept_[0] # 截距: `4 E) L- j; @5 C% p# J' @
- : n( ^6 R$ J: }. f
- b1, b2 = model2.coef_[0][0], model2.coef_[0][1] # 系数
) U' W8 e\" _2 Y3 o; {% y9 P - s$ S: ]3 T( L$ ]* z# K7 w0 L
- print('y = {:.4f} + {:.4f}*x1 + {:.4f}*x2'.format(b0, b1, b2))\" V. V4 G' C4 [+ V1 O7 f8 z, Z
- 0 m( S2 q# b) ?* D2 [0 ^\" j+ e
- print('R_square =', model2.score(X, y))
2 @- e1 q7 x* o0 U8 v4 Z) K - 8 g+ o. Y+ V# W* R# g4 c! I
- print('k =', model2.alpha_)
复制代码 输出了最佳模型的截距、系数、拟合优度以及对应的最佳正则化参数 ( k )。: s* W2 s8 t% F- H }3 A
通过这段代码,你可以对 Ridge 回归模型进行正则化,并选择最佳的正则化参数来提高模型的泛化能力。同时,岭迹图可以帮助你直观地观察不同正则化参数下模型系数的变化趋势。8 j% h0 l: | F' x3 S
8 V' A$ v8 `7 x; `4 h0 B: D, d' K
0 a2 k% u- d* L3 N$ c: d
7 u% i( Y# m$ C; u1 x9 O! ]( U4 Z, @
1 A5 Y9 a, E! q* P |
zan
|