- 在线时间
- 480 小时
- 最后登录
- 2026-6-1
- 注册时间
- 2023-7-11
- 听众数
- 4
- 收听数
- 0
- 能力
- 0 分
- 体力
- 7823 点
- 威望
- 0 点
- 阅读权限
- 255
- 积分
- 2934
- 相册
- 0
- 日志
- 0
- 记录
- 0
- 帖子
- 1174
- 主题
- 1189
- 精华
- 0
- 分享
- 0
- 好友
- 1
该用户从未签到
 |
. l- C9 b e$ q- d0 M. n
1.导入所需库:1 m" |0 B' P3 v" g' M
; {" b) `" Q$ r% M/ x- v, Y: y7 r# ^% y
import numpy as np
, j/ G" n& d/ q7 z" v J import pandas as pd
; M% {: {; Y3 ]& w1 O# Y- z( [ import matplotlib.pyplot as plt9 s/ L& e9 l- O; c
from sklearn.linear_model import Lasso, LassoCV U2 Z0 F3 H. C; _$ U
! k& H! V1 y5 b7 c; c
1 Z; |' [5 m6 c% _" [
2.定义源数据:
' O7 P! }) B0 W, m3 K* O- ~ H& G+ T# }0 f b/ y6 z: n# C* U
df = pd.DataFrame({% k4 E0 b. |* R; }8 \ }) _/ D
'x1': [7, 1, 11, 11, 7, 11, 3],
$ j. R( X+ Q" S 'x2': [26, 29, 56, 31, 52, 55, 71]," P! v g: R% A p7 J2 g& H
'y': [78.5, 74.3, 104.3, 87.6, 95.9, 109.2, 102.7],4 ]! T2 M( A' m
})
& w e, U. V2 _3 z; y1 m/ a7 s/ y0 a5 Q2 P0 A
创建了一个包含 x1、x2 和 y 列的 DataFrame,作为原始数据。0 S0 l5 q8 j. z& z- P1 H/ m; e
- [8 X; P/ Z+ n( L9 n* ]" m0 C3.将数据转换为数组格式:
) L/ g/ ^# D) x+ l( Y0 o1 P% g. V
7 ]. k: S) w. Y9 O( T/ ]& E X = np.array(df[['x1', 'x2']])8 o3 s& O1 g- y, U7 w
y = np.array(df[['y']])
$ k+ ~# h$ m' b4 T* p% [
3 c+ N) k7 d/ w( d! f# D p8 N将特征和目标变量分别转换为 NumPy 数组格式。* z5 m; I+ ^* v6 Y. y& k
# {5 E) @$ }: _$ A4.遍历不同的 alpha 值,计算 Lasso 回归模型的拟合结果:9 ?/ L, Q# k9 j d r
+ C# r* `9 _+ j8 D5 g9 @; Y
k_array = np.logspace(-4, 1.5, 100)) P" H+ U" \! Z/ G
x1_list, x2_list = [], []& z. x3 O! r& {0 I. A9 \3 \
for k in k_array:7 E) z' _* M# K1 b
model = Lasso(alpha=k).fit(X, y)
4 P- S! w! ?8 V$ i8 z x1_list.append(model.coef_[0])
, o6 D" q) n; H x2_list.append(model.coef_[1])9 H5 ?8 C- |0 B1 C& F9 q
8 }+ D9 f. f9 E# o: B使用 Lasso 回归模型,遍历不同的正则化参数 alpha 值,计算不同 alpha 值下 x1 和 x2 的系数。
" t# b5 }# f" H3 C! }
( I5 u; S5 {* N. m& `# |) y E5.绘制岭迹图:0 [2 g/ f1 K: l8 x. J$ o
9 H# p( m1 j, u5 j; p x0 W, m
plt.scatter(k_array, x1_list)
$ i1 e6 z! q' o plt.scatter(k_array, x2_list)
$ w8 ]- O4 [5 W* N plt.plot(k_array, x1_list, label='x1')
6 o1 C2 P9 x. r plt.plot(k_array, x2_list, label='x2')
+ R% F2 F- o2 q7 ~ plt.legend()4 h; ?* ?( N2 I6 ?& }
# k2 \) @' l2 @使用 plt.scatter() 绘制不同 alpha 值下 x1 和 x2 的系数散点图,并使用 plt.plot() 绘制岭迹图,分别标记了 x1 和 x2 的系数曲线,并添加图例。
f. O) \2 s2 e7 f- a) I$ N1 T$ w/ U: X G& N. _
6.使用 LassoCV 自动选择最佳 alpha 值: c% L) C7 s) s
: `3 m1 R& O' J- x$ R
model2 = LassoCV().fit(X, y)
" }2 Z# D* X. X
: M4 C9 b+ Z# }+ H& p3 Y% U使用 LassoCV 进行交叉验证,自动选择最佳的正则化参数 alpha。
2 ]' ~% H* [0 \- m3 b$ a; F7 M/ H# u5 l9 N4 }* P, s! [! \" U8 C6 ]5 o
7.输出模型参数和评估结果:3 y" K8 `, b) [& v) W! @$ r' j
" F" g9 u# t+ q9 u) D. C. l
b0 = model2.intercept_6 \$ ~4 Q, s) N# }2 k6 q
b1, b2 = model2.coef_[0], model2.coef_[1]
M+ W7 L6 k) D A print('y = {:.4f} + {:.4f}*x1 + {:.4f}*x2'.format(b0, b1, b2))* X& x1 Z/ O+ _( ^' X! E
print('R_square =', model2.score(X, y))3 N! U: D4 j! O. B
print('k =', model2.alpha_)
% v: {+ i* N( d% o2 |/ T/ \6 i7 K2 J: [ p; f$ e% C0 D
输出拟合的线性模型的截距、系数以及 R_squared 值,还输出了最佳的正则化参数 alpha。
: w: t$ u& o. G; w7 Z- c, p8 q这段代码通过 Lasso 回归模型拟合了给定的数据,并展示了不同 alpha 值下的系数变化,最后选择了最佳的 alpha 值进行拟合,并输出了拟合结果和评估指标。; Q! J4 a; c ^! i4 X7 J8 O
: A, V# A* @/ {( ^4 \7 k
$ w& a, s2 n7 {" R$ C6 D2 G1 n
/ X8 \2 H/ ?. R$ g |
zan
|