- 在线时间
- 472 小时
- 最后登录
- 2025-9-5
- 注册时间
- 2023-7-11
- 听众数
- 4
- 收听数
- 0
- 能力
- 0 分
- 体力
- 7687 点
- 威望
- 0 点
- 阅读权限
- 255
- 积分
- 2887
- 相册
- 0
- 日志
- 0
- 记录
- 0
- 帖子
- 1161
- 主题
- 1176
- 精华
- 0
- 分享
- 0
- 好友
- 1
该用户从未签到
 |
5 A7 y0 k' R, c1.导入所需库:( V5 i) Z2 C1 G+ Q4 c
- F1 y9 A1 t! u- q! M0 L8 ]
import numpy as np$ p' w$ P5 I& [ Z, r+ y. o" ~' ^# y
import pandas as pd; y# @, x2 l1 Q g
import matplotlib.pyplot as plt
% w( g) I; t& Z/ h+ o! c from sklearn.linear_model import Lasso, LassoCV
& y) _* ]& g8 b, @; x4 o! d ]0 o! U1 v# J T: F# |2 Q0 q
) N# C$ n! g$ Z5 K% [
2.定义源数据:+ I# n! y" @! K
8 b! a& Z6 z7 j# m2 u2 f9 ?3 B/ u df = pd.DataFrame({
2 m7 r- F( `1 ^% a2 S; \" H+ R+ j 'x1': [7, 1, 11, 11, 7, 11, 3],9 o6 |9 T, w1 Y; a
'x2': [26, 29, 56, 31, 52, 55, 71],
! T8 H3 m; K; M3 D" m- _: s! e 'y': [78.5, 74.3, 104.3, 87.6, 95.9, 109.2, 102.7],9 n" i8 |) F" T
})8 T3 a$ y3 t3 {! a; R- K
+ d9 a7 ^9 p4 |6 P. H/ {1 R1 m: [
创建了一个包含 x1、x2 和 y 列的 DataFrame,作为原始数据。
, N1 @' F& t/ v9 U" c8 ~* t% ^6 i( }9 q: o- b- u( b9 F
3.将数据转换为数组格式:
1 d {( Z& }! ~0 _
2 Q4 h( W% h/ G5 a X = np.array(df[['x1', 'x2']])
4 t- ~ [' \+ h6 \9 q" l y = np.array(df[['y']])" k V" s _1 Z( }, q
+ |$ `% e2 @4 V2 c将特征和目标变量分别转换为 NumPy 数组格式。, g, O1 M8 p) B4 H' S5 r
" s+ B L; k" f- p* M
4.遍历不同的 alpha 值,计算 Lasso 回归模型的拟合结果:* O% C& s& O' {0 Z( b
5 x1 L9 c C$ f) U' t' r0 y k_array = np.logspace(-4, 1.5, 100)+ m2 b5 O+ S1 E
x1_list, x2_list = [], []
$ i- ?: o/ d$ a for k in k_array:
9 K4 }& y7 F0 C model = Lasso(alpha=k).fit(X, y)
5 D$ X1 \5 h; Z5 Z x1_list.append(model.coef_[0])6 ]* v' |) c& p1 S2 `& w
x2_list.append(model.coef_[1])2 p/ E1 R9 D, k# @& i3 a$ O1 W
0 |; I( ]8 L* C+ s. T; f9 S使用 Lasso 回归模型,遍历不同的正则化参数 alpha 值,计算不同 alpha 值下 x1 和 x2 的系数。
6 O9 L" v9 P9 X5 S/ _7 y+ B
5 }* B, x7 V. c& B8 [5.绘制岭迹图:/ |4 f0 _4 P K8 f' ~2 k6 U; A
3 H! R n2 M' E Z; {4 J
plt.scatter(k_array, x1_list)
; @( B& T, J9 V" [ E. s plt.scatter(k_array, x2_list)3 Y' ]) m2 x4 ?5 f" a. @; H
plt.plot(k_array, x1_list, label='x1')
( y4 g) a( X8 n* Y# Z6 v; e, `0 M plt.plot(k_array, x2_list, label='x2')
. X8 o- r! G& b2 f/ ?4 J! | plt.legend()
& m) f0 T# ]" z9 J! M- O
9 E! d8 v; w6 \( j; i使用 plt.scatter() 绘制不同 alpha 值下 x1 和 x2 的系数散点图,并使用 plt.plot() 绘制岭迹图,分别标记了 x1 和 x2 的系数曲线,并添加图例。
) r" c5 f- B1 O$ k
7 v* I: {) Y9 U/ Q% q$ [6.使用 LassoCV 自动选择最佳 alpha 值:) f5 w0 F8 p ~- J4 B+ `$ |2 v# S
7 l4 g/ N/ s- O: z: h
model2 = LassoCV().fit(X, y)
1 |) }" y' b; O9 z2 C5 H7 _2 N. j% r" |" p
使用 LassoCV 进行交叉验证,自动选择最佳的正则化参数 alpha。# _( D1 K& H8 i
* Y, O7 A; C' R5 [: u. y
7.输出模型参数和评估结果:2 j2 {; a9 Q! x7 z
$ |2 D7 C6 A- L b0 = model2.intercept_
8 k5 x" f3 J' g# r; \ b1, b2 = model2.coef_[0], model2.coef_[1]" {8 \$ p8 y/ R
print('y = {:.4f} + {:.4f}*x1 + {:.4f}*x2'.format(b0, b1, b2))
# T/ {- U( z- e print('R_square =', model2.score(X, y))
4 w9 c8 t& S6 D4 Q+ h5 k' k" c print('k =', model2.alpha_)
) {; m& b5 ?" W9 V7 k5 l2 G, v. r: L9 W7 r. t; k$ D& m
输出拟合的线性模型的截距、系数以及 R_squared 值,还输出了最佳的正则化参数 alpha。
; Q& N% h! @+ w; C- S: H y这段代码通过 Lasso 回归模型拟合了给定的数据,并展示了不同 alpha 值下的系数变化,最后选择了最佳的 alpha 值进行拟合,并输出了拟合结果和评估指标。1 \" I0 k0 e1 h, n% k, n
6 H: E+ ~* \1 K E3 O/ A
, @/ f2 F0 E6 p- M% R9 ~
6 g5 l( O- {& X" [ c
|
zan
|