- 在线时间
- 479 小时
- 最后登录
- 2026-4-13
- 注册时间
- 2023-7-11
- 听众数
- 4
- 收听数
- 0
- 能力
- 0 分
- 体力
- 7789 点
- 威望
- 0 点
- 阅读权限
- 255
- 积分
- 2922
- 相册
- 0
- 日志
- 0
- 记录
- 0
- 帖子
- 1171
- 主题
- 1186
- 精华
- 0
- 分享
- 0
- 好友
- 1
该用户从未签到
 |
" M+ Q9 S# X# P0 Q3 l
1.导入所需库:* a& S+ A, N- R) d4 q+ }( z' W
: v1 }' M# i9 K7 _$ q5 L k7 v9 | import numpy as np4 h* j+ T8 @& u; u% \# Z* |
import pandas as pd0 G" q) c% v6 Z3 y$ S( U( K
import matplotlib.pyplot as plt
; |5 y7 a) M# z* j6 | from sklearn.linear_model import Lasso, LassoCV6 R% Y) X/ z8 p4 W! x, f' r
' c( G6 _: C. b) A/ {5 P8 j
$ I0 E' Q; V/ { W5 p2.定义源数据:
$ J3 s/ l* @$ d% T
% C2 v% }* c6 M) \$ c* l* R df = pd.DataFrame({
( D* @1 I* s. v9 u" m h 'x1': [7, 1, 11, 11, 7, 11, 3],
( P, ~2 X; Q2 r& C2 H1 e7 z 'x2': [26, 29, 56, 31, 52, 55, 71],
; M3 J! }* c7 r, d, n 'y': [78.5, 74.3, 104.3, 87.6, 95.9, 109.2, 102.7], d8 w0 R& }/ D, I, |1 V
})- w8 a, h& k% B) Y0 T, n* q. S
9 @- O/ Y t7 t, P
创建了一个包含 x1、x2 和 y 列的 DataFrame,作为原始数据。4 r( q4 L4 U. f7 N- l& E8 @. ]
$ L9 {" E: n% s3.将数据转换为数组格式:/ e3 k1 j M; y4 }0 E
x8 b( ~$ c) u- r* V6 I
X = np.array(df[['x1', 'x2']]); c8 K+ G! A& b7 U, x% x; Z
y = np.array(df[['y']])
9 t% c; m! I& _ J5 R. F6 h
# f( }+ ^; z5 A" A8 R将特征和目标变量分别转换为 NumPy 数组格式。
; R" o5 i1 ~# ]. C8 A# y8 m z$ F3 R! {
4.遍历不同的 alpha 值,计算 Lasso 回归模型的拟合结果:
8 z0 U* J3 y" V" B. c/ t
# H9 _, s$ L' U5 V k_array = np.logspace(-4, 1.5, 100)+ d6 e" ]! G% g1 b5 V; Y3 c+ E9 X
x1_list, x2_list = [], []
$ N( ]; c3 o' _+ Z% ` for k in k_array:, Z8 p: X/ z' v* j5 t8 @" P5 I
model = Lasso(alpha=k).fit(X, y)
; \% G/ j! Y! g! g s x1_list.append(model.coef_[0]). I T. M' u1 W0 f. @
x2_list.append(model.coef_[1])
7 _7 s, y b; [6 Z3 p
1 z0 p/ m6 S8 S! V* M& b* }使用 Lasso 回归模型,遍历不同的正则化参数 alpha 值,计算不同 alpha 值下 x1 和 x2 的系数。/ w) o5 W2 d8 i7 C) ~0 g
/ l4 x6 l: [. {8 M: X: J5.绘制岭迹图:! K4 ]5 q4 w6 {$ |/ p
9 Y9 q4 \1 n9 S* Y) M" @; w plt.scatter(k_array, x1_list)
2 X& L8 j$ B6 [" v7 ^5 d# f5 h plt.scatter(k_array, x2_list)8 B8 t' L7 N! F* d& u* I
plt.plot(k_array, x1_list, label='x1')- `% @ B& a7 B. o }
plt.plot(k_array, x2_list, label='x2')
7 E( ?9 e0 h) u3 n( n! f# t: f plt.legend()4 M! k5 P ^5 {+ Q! T7 E
+ S+ A; B2 r% |! r; R1 q8 O6 N使用 plt.scatter() 绘制不同 alpha 值下 x1 和 x2 的系数散点图,并使用 plt.plot() 绘制岭迹图,分别标记了 x1 和 x2 的系数曲线,并添加图例。
! d' R+ M2 u# X _! O4 Q( Z/ N4 `
4 S3 d$ n: J7 u% y' L5 E6.使用 LassoCV 自动选择最佳 alpha 值:
* {* M% |' N* N% o& j4 m" G. `1 c* @
model2 = LassoCV().fit(X, y); ]0 W7 h, ]7 F- `% @. \
( ] O2 e6 y4 N u0 D使用 LassoCV 进行交叉验证,自动选择最佳的正则化参数 alpha。# H* {+ u2 j+ R8 Q7 L9 \
2 W6 r4 M/ y: t4 ?4 Q( x7.输出模型参数和评估结果:
6 ?, c- ?/ H& M3 r/ ^7 S
8 G4 J: Q: }5 K y2 B9 F, F b0 = model2.intercept_3 D$ `) e9 X8 ]8 v& L
b1, b2 = model2.coef_[0], model2.coef_[1]
' J6 v7 `/ `- ` print('y = {:.4f} + {:.4f}*x1 + {:.4f}*x2'.format(b0, b1, b2))
& O2 E6 p+ I2 S, a- ? print('R_square =', model2.score(X, y))
" t" c, N( w6 H) h print('k =', model2.alpha_)
2 L! E. H/ s- t8 ]+ O8 a$ A# T
* _; b. _! _4 o/ P7 W7 Y输出拟合的线性模型的截距、系数以及 R_squared 值,还输出了最佳的正则化参数 alpha。
& \; c" u) j7 g/ [2 ^+ V! I这段代码通过 Lasso 回归模型拟合了给定的数据,并展示了不同 alpha 值下的系数变化,最后选择了最佳的 alpha 值进行拟合,并输出了拟合结果和评估指标。
/ [" s7 q/ d9 |' u v# Z ?. q1 l. Z" ^& ~; h
; D) Q& E1 D: w5 Z
" v N. u1 A5 m9 p$ [( l |
zan
|