- 在线时间
- 482 小时
- 最后登录
- 2026-9-11
- 注册时间
- 2023-7-11
- 听众数
- 4
- 收听数
- 0
- 能力
- 0 分
- 体力
- 7951 点
- 威望
- 0 点
- 阅读权限
- 255
- 积分
- 2977
- 相册
- 0
- 日志
- 0
- 记录
- 0
- 帖子
- 1183
- 主题
- 1198
- 精华
- 0
- 分享
- 0
- 好友
- 1
该用户从未签到
 |
( w; K$ S7 `, ]) g1.导入所需库:
+ C: u3 c/ e& R) S3 u5 ^7 D
7 W5 E% R- }3 s import numpy as np
# l n8 {& u5 i% J' ^ import pandas as pd9 q& o& z% [& g' ~2 A( S
import matplotlib.pyplot as plt/ W' C6 X* v2 C7 j: w* E
from sklearn.linear_model import Lasso, LassoCV* B* z% Q, L# S" g+ w2 v5 {$ w& H& i
& C6 X' D# }9 \2 z( L5 ?6 ?
8 n* y6 _ w4 M6 [! j) w. E6 A2.定义源数据:1 x4 P" I/ w3 T3 X$ H$ X
* c; l6 I9 U+ g% f$ b
df = pd.DataFrame({
4 H6 r" r% U- ]" Z# }- B" k f 'x1': [7, 1, 11, 11, 7, 11, 3],
1 P) f* _% Z+ p0 q3 u2 v8 W9 `- l 'x2': [26, 29, 56, 31, 52, 55, 71],. ]4 C8 P+ Y! f% f6 U$ c
'y': [78.5, 74.3, 104.3, 87.6, 95.9, 109.2, 102.7],: F* f3 t4 l' |+ {
})
5 O; U' | o4 G! p8 N/ c4 n- D/ E7 q( |, K6 D! O {8 |
创建了一个包含 x1、x2 和 y 列的 DataFrame,作为原始数据。! |9 l" a- e3 K, e, O
; q( G1 k! ~2 Z5 |' n$ K8 F7 ~3.将数据转换为数组格式:* h; P+ K1 p1 g6 A1 h
$ H6 ^' E" l, K% n* Y
X = np.array(df[['x1', 'x2']]): [6 `; E |* P6 n2 a
y = np.array(df[['y']])4 j2 g1 q1 F7 X. F6 V2 g. B+ {
" W- C ~2 j, S9 f
将特征和目标变量分别转换为 NumPy 数组格式。
; {) ?. K" H! O3 p5 d* L" H$ S, `' s9 h* }- g2 ]
4.遍历不同的 alpha 值,计算 Lasso 回归模型的拟合结果:
- A3 U7 b. @* A @1 k( [9 R) [' ~
( v, a% o+ F: T# J+ A b! c: x0 i k_array = np.logspace(-4, 1.5, 100)
/ Q/ Y* f1 l1 B# F( h: E, v! @* v. | x1_list, x2_list = [], []$ y1 E; f: @! c& \1 R$ _& D
for k in k_array:
+ J) L3 v, i. N, t+ H model = Lasso(alpha=k).fit(X, y)
9 P" Y2 q* X# H7 }; D9 w; k x1_list.append(model.coef_[0]) O, {' \4 P$ b6 @$ C3 i0 n
x2_list.append(model.coef_[1])
8 S# a4 \9 W1 d0 W8 |" C# j" Y4 `7 U) n& t$ b/ o! m& V9 P4 b
使用 Lasso 回归模型,遍历不同的正则化参数 alpha 值,计算不同 alpha 值下 x1 和 x2 的系数。
/ R/ Q2 }5 k2 p: @% ~9 L* G' l" ]7 n0 {
5.绘制岭迹图:! b: E! N! u& }2 c+ J! q
6 }5 B$ n1 v) V& b4 t, E$ f plt.scatter(k_array, x1_list)
( C( ^: |/ f5 @" \; x- X# i plt.scatter(k_array, x2_list); `" Q7 M0 [) Q3 r
plt.plot(k_array, x1_list, label='x1')) X( r( K; U$ O' G- L/ R- Z( V
plt.plot(k_array, x2_list, label='x2')
( ?3 L1 X3 j% n& Z* L' v$ h& ] plt.legend()
/ u: B l% s S+ a Z; \2 w9 f" H" F9 A
使用 plt.scatter() 绘制不同 alpha 值下 x1 和 x2 的系数散点图,并使用 plt.plot() 绘制岭迹图,分别标记了 x1 和 x2 的系数曲线,并添加图例。
$ e P' i) g7 ~; k" b& K! w6 S8 b* \; a+ F4 z
6.使用 LassoCV 自动选择最佳 alpha 值:4 p8 N- {6 l% q. E9 o1 P Y
& Q# V$ [. Q" B7 i' R model2 = LassoCV().fit(X, y)
( i" i1 ^% g1 Z' a4 R+ k+ t: d: k4 S8 G% w1 ]7 f0 H9 }2 F0 C; y
使用 LassoCV 进行交叉验证,自动选择最佳的正则化参数 alpha。
. I4 P) K7 p f- \1 `3 {# @$ D
1 S3 z. Z" I! x3 O6 O! h8 o7.输出模型参数和评估结果:
$ R+ `" z; X! d; b. Q9 j/ b8 G* l# n; |7 X2 e/ U" T
b0 = model2.intercept_
: |+ G8 y1 B! v0 {6 p. ]5 q b1, b2 = model2.coef_[0], model2.coef_[1]# ?0 d/ e( r8 r3 w+ m; \- T
print('y = {:.4f} + {:.4f}*x1 + {:.4f}*x2'.format(b0, b1, b2))
r5 s; }) v8 b/ t5 U m print('R_square =', model2.score(X, y))9 G3 L* O7 [ S
print('k =', model2.alpha_)7 q/ R9 X0 I# w! C) X" h
% R: S9 M, [5 x( [# l; o% ^/ b) o输出拟合的线性模型的截距、系数以及 R_squared 值,还输出了最佳的正则化参数 alpha。+ Z: \, X# {; o9 i
这段代码通过 Lasso 回归模型拟合了给定的数据,并展示了不同 alpha 值下的系数变化,最后选择了最佳的 alpha 值进行拟合,并输出了拟合结果和评估指标。
$ M, ^& J) A2 y$ S% ^% B) G* B% ^" S) P9 |% ^8 \; V: i( p- L
; v, q' y. a1 o4 ]& f2 h, l8 m. z6 I
- R0 o8 k* @4 ~% h |
zan
|