- 在线时间
- 481 小时
- 最后登录
- 2026-8-25
- 注册时间
- 2023-7-11
- 听众数
- 4
- 收听数
- 0
- 能力
- 0 分
- 体力
- 7859 点
- 威望
- 0 点
- 阅读权限
- 255
- 积分
- 2946
- 相册
- 0
- 日志
- 0
- 记录
- 0
- 帖子
- 1177
- 主题
- 1192
- 精华
- 0
- 分享
- 0
- 好友
- 1
该用户从未签到
 |
/ `1 Q7 t( c# e1.导入所需库:1 L& F. b, m5 T* y
# n+ [# A4 A) k& w- o import numpy as np2 U' c/ w8 E3 h7 G, `5 B4 z! E
import pandas as pd/ U8 ^* b# \& C. k6 E& C
import matplotlib.pyplot as plt
; B4 T" q# g+ [( C6 m from sklearn.linear_model import Lasso, LassoCV
( {3 p$ C, i5 |/ Q \# t5 F2 U
9 j4 w# m/ h0 d5 V A2 _6 L) M* k; b) v i
2.定义源数据:2 I* x" \7 c- I
" f" @& ]7 W6 Q* v
df = pd.DataFrame({
8 r' D! }# E% S 'x1': [7, 1, 11, 11, 7, 11, 3],
, t# j: k8 Y% T& I, \3 w 'x2': [26, 29, 56, 31, 52, 55, 71],' I. M; l3 U' f! n
'y': [78.5, 74.3, 104.3, 87.6, 95.9, 109.2, 102.7],+ n$ r5 U/ R) I) N
})# Z7 J! a. V2 z2 \# g& z
5 O. c9 b' L) w0 d创建了一个包含 x1、x2 和 y 列的 DataFrame,作为原始数据。 w1 L0 N6 d$ M2 q
. f: {5 L' p ~7 Y% \9 [- D( a4 s
3.将数据转换为数组格式:1 Z8 ]3 C& p; q* W# O& e* X
# ^# y7 a' |- v( G, u X = np.array(df[['x1', 'x2']])
. |$ P! c- k" r5 M. Y- \# T y = np.array(df[['y']])
1 {$ w5 k! ^- m! @
9 |* E1 ]# ?( j2 c" o6 b4 `/ e将特征和目标变量分别转换为 NumPy 数组格式。
5 U. s- x$ \4 U" n& ~- w5 F, n
1 G- L' F$ G0 D' l4.遍历不同的 alpha 值,计算 Lasso 回归模型的拟合结果:
7 a5 I; j2 Z$ U0 I
- X! r/ {, k9 ?8 H8 i k_array = np.logspace(-4, 1.5, 100)
& G9 l# \% K0 a: K5 b x1_list, x2_list = [], []& W1 J) \8 v3 n) b+ Z* `$ q
for k in k_array:
( e+ l& K9 Y; j+ y( }: N# o model = Lasso(alpha=k).fit(X, y)! g/ B* ~& s1 f# M% B z
x1_list.append(model.coef_[0])
" o# ?- r8 P9 l1 X- w x2_list.append(model.coef_[1])
+ R! Q+ k n- R/ A' \; W/ f
5 `4 ]4 ?" |! S) H* l6 D使用 Lasso 回归模型,遍历不同的正则化参数 alpha 值,计算不同 alpha 值下 x1 和 x2 的系数。
7 J+ g0 U* b& s9 m
8 m' y" H8 E# ~! Z; E, X5.绘制岭迹图:
* E9 q: a5 h2 }/ u- r, |/ y8 G! N- ~# m* F/ B
plt.scatter(k_array, x1_list)' v }( L3 V# B4 F$ L! r2 [
plt.scatter(k_array, x2_list)
. \/ ]1 K8 V' m6 y) y3 [7 r0 x plt.plot(k_array, x1_list, label='x1')4 n, h9 l% f* }% ]1 f- y8 {) e
plt.plot(k_array, x2_list, label='x2')
k$ k5 ^% u P& W' h. H plt.legend()
% R; P; ~3 C( N* W7 Y$ e; [& T" B
: g& g, T% y1 c# G2 [% | v. k2 a使用 plt.scatter() 绘制不同 alpha 值下 x1 和 x2 的系数散点图,并使用 plt.plot() 绘制岭迹图,分别标记了 x1 和 x2 的系数曲线,并添加图例。
- K" {6 C: f, ]' |2 N* b
3 Q- K7 o9 a* {# E/ F# i6.使用 LassoCV 自动选择最佳 alpha 值:
# B2 d. g. {- E4 s ~$ n
$ z) Z4 C( y9 J2 p4 |) ` model2 = LassoCV().fit(X, y)
2 N- [: _0 o6 D% E1 u. `7 c8 G( r# G$ v7 w# ^8 p
使用 LassoCV 进行交叉验证,自动选择最佳的正则化参数 alpha。+ O8 [' V) F3 c5 c$ u
+ D& H" r+ ], R) z/ y7 h* L, H7.输出模型参数和评估结果:
) \9 c$ J. H% Q! e
! b7 l/ ^# X* I) B+ \ b0 = model2.intercept_
1 ~' c& A, M! q( O. I b1, b2 = model2.coef_[0], model2.coef_[1]# K# v1 M% N" X" q
print('y = {:.4f} + {:.4f}*x1 + {:.4f}*x2'.format(b0, b1, b2))
/ Y$ V; f% N& U# Q* t print('R_square =', model2.score(X, y))+ ]# ]! ?: M8 g
print('k =', model2.alpha_)4 W f4 @6 _+ Z. n
" i c% C3 M& p: S: f; C0 T- w输出拟合的线性模型的截距、系数以及 R_squared 值,还输出了最佳的正则化参数 alpha。8 ^2 C! q1 L& [1 @' A+ G+ x
这段代码通过 Lasso 回归模型拟合了给定的数据,并展示了不同 alpha 值下的系数变化,最后选择了最佳的 alpha 值进行拟合,并输出了拟合结果和评估指标。
- G3 F3 Z7 p1 B
0 x' ]9 n7 V6 G" J6 |2 i
r5 }7 y! f" \1 c8 }; k F* [; v' @7 `- z" ^
|
zan
|