- 在线时间
- 480 小时
- 最后登录
- 2026-6-1
- 注册时间
- 2023-7-11
- 听众数
- 4
- 收听数
- 0
- 能力
- 0 分
- 体力
- 7823 点
- 威望
- 0 点
- 阅读权限
- 255
- 积分
- 2934
- 相册
- 0
- 日志
- 0
- 记录
- 0
- 帖子
- 1174
- 主题
- 1189
- 精华
- 0
- 分享
- 0
- 好友
- 1
该用户从未签到
 |
9 y5 X7 P U! F, e! S" G9 M1.导入所需库:
9 R3 Y% @3 j) `, y( M) x
4 Q+ j# ]) ^$ P" E import numpy as np9 s$ _) a3 B8 |) Z- c3 Y
import pandas as pd" v+ z: o1 T# k# ~6 m& I/ u. U
import matplotlib.pyplot as plt
4 b# {% n: e" \/ u from sklearn.linear_model import Lasso, LassoCV# d, U+ J! E( J, r
- j1 l4 e5 l) R* M
5 F7 ?- [) y) U, F1 r* d- o. b: p2.定义源数据:
$ e! u6 P- m( u% o* O! n& w7 @4 t! v" o; D5 O1 y
df = pd.DataFrame({6 ?# u- x t' D! N
'x1': [7, 1, 11, 11, 7, 11, 3],
1 i8 d( f: ~' `; P- o/ G 'x2': [26, 29, 56, 31, 52, 55, 71],
/ @/ S; s7 w y7 E9 s 'y': [78.5, 74.3, 104.3, 87.6, 95.9, 109.2, 102.7],
0 q1 K2 J! l+ L! h" h9 `* ] })
. y; k* X/ l0 z& y" X$ h3 R( }& Q: T8 c3 F
创建了一个包含 x1、x2 和 y 列的 DataFrame,作为原始数据。8 t; U- `$ _ D) w1 {8 ^# a, {! \
0 Z( \" Y' z: }% c: q7 h3.将数据转换为数组格式:
8 l3 I* [& h& Q3 t0 F! d: V% D( G% w' m' f$ X" V
X = np.array(df[['x1', 'x2']])7 P( J8 l# v; g1 [% H: [4 x
y = np.array(df[['y']])/ w* Y' @9 }8 i7 G1 G w; G4 P+ D3 L
! P. n, T4 w% \4 q+ _0 o0 Y, ]' q将特征和目标变量分别转换为 NumPy 数组格式。
3 i9 C& G# K: g3 @
! |3 z3 {( y* [+ D8 F' |/ y: E4.遍历不同的 alpha 值,计算 Lasso 回归模型的拟合结果:; n% g; V+ D% i
+ Q: @( W' K( ^1 z; S! ^! a
k_array = np.logspace(-4, 1.5, 100)& |: ?0 t, G) p: ]) B6 r( S% _8 j
x1_list, x2_list = [], []( R! z% l" p0 O& k( b
for k in k_array:6 P# B. m% h. L/ x6 E
model = Lasso(alpha=k).fit(X, y)
3 a q+ f z' V2 D x1_list.append(model.coef_[0])1 i2 Q" {; O, H
x2_list.append(model.coef_[1])9 H0 l$ T7 N2 f
4 o! N/ u: `- x& e: q. Z ~
使用 Lasso 回归模型,遍历不同的正则化参数 alpha 值,计算不同 alpha 值下 x1 和 x2 的系数。3 J% w, C" o' y- ?4 w( ^- X" w
" R* x' P/ R" O1 _% O8 e' V- ^
5.绘制岭迹图:9 M4 l) ?% c/ Z [9 ?: N5 y; S4 t
0 n p+ d" v6 H8 @; G& g
plt.scatter(k_array, x1_list)
1 @- T) T4 w& W/ O plt.scatter(k_array, x2_list). ]2 O+ ?$ c! \8 o- }
plt.plot(k_array, x1_list, label='x1')9 v. p3 m ~: X' S6 d
plt.plot(k_array, x2_list, label='x2')6 B. ~7 b+ v4 j% p
plt.legend()
% u9 F1 m0 h p8 Z) Y, ]% r) o" F5 `- J( M" g/ E3 _
使用 plt.scatter() 绘制不同 alpha 值下 x1 和 x2 的系数散点图,并使用 plt.plot() 绘制岭迹图,分别标记了 x1 和 x2 的系数曲线,并添加图例。
$ b o: X9 `) X2 O6 m( Q7 P6 d0 E
$ \ I5 e, d8 `- r( k6.使用 LassoCV 自动选择最佳 alpha 值:
( N& u) L( e" R8 Q2 D& n7 w& v8 ]/ V- V7 ^8 ?$ c
model2 = LassoCV().fit(X, y)
8 f: @" g5 I0 {% C1 y6 _" k$ X5 |- D+ D' j* T$ Q; Z# c9 O- {
使用 LassoCV 进行交叉验证,自动选择最佳的正则化参数 alpha。/ U5 g3 z" N" P
. j! @2 d) B6 g$ n$ O5 O; u7.输出模型参数和评估结果:
' A9 [2 J9 M$ g" ^! L: F
9 X0 s2 n) g4 O+ a9 | b0 = model2.intercept_
}6 T& i( ?, B+ F, q b1, b2 = model2.coef_[0], model2.coef_[1]
" Y& Z, o# j! C; f% X( x print('y = {:.4f} + {:.4f}*x1 + {:.4f}*x2'.format(b0, b1, b2))! s6 [8 \* J& b1 U/ N7 y
print('R_square =', model2.score(X, y))# O/ o3 t# u4 i$ f M* @- m
print('k =', model2.alpha_)
4 Y# I/ b. Q& ?9 |6 G( b
. M G+ d" N* B输出拟合的线性模型的截距、系数以及 R_squared 值,还输出了最佳的正则化参数 alpha。: b, |0 M$ F& @4 L
这段代码通过 Lasso 回归模型拟合了给定的数据,并展示了不同 alpha 值下的系数变化,最后选择了最佳的 alpha 值进行拟合,并输出了拟合结果和评估指标。' {3 `1 i: y5 a& `7 J" M6 l- H
H( ]4 y+ l/ a( @* o
/ h& u; k# [# J3 f e4 L$ I
1 f, l) Z: ]5 }) z9 M. \ |
zan
|