- 在线时间
- 479 小时
- 最后登录
- 2026-4-17
- 注册时间
- 2023-7-11
- 听众数
- 4
- 收听数
- 0
- 能力
- 0 分
- 体力
- 7790 点
- 威望
- 0 点
- 阅读权限
- 255
- 积分
- 2923
- 相册
- 0
- 日志
- 0
- 记录
- 0
- 帖子
- 1171
- 主题
- 1186
- 精华
- 0
- 分享
- 0
- 好友
- 1
该用户从未签到
 |
/ ]( `' w4 t0 L( {
1.导入所需库:
8 [6 a7 M7 R7 M6 M
) [# e4 P; P2 T6 f import numpy as np0 e/ G# @9 u& y3 \
import pandas as pd
- x, \0 | p) N; K import matplotlib.pyplot as plt( m% M5 `& Z# a' \
from sklearn.linear_model import Lasso, LassoCV# k% O7 l$ q4 h
, A; Z+ R( J: i5 _# w
/ m" i E( R! E, p/ h* }& M: E2.定义源数据:
/ _7 h! B! V7 n F3 E
S2 w) A! n" _) Y df = pd.DataFrame({0 f( d5 ~; r& I1 X c
'x1': [7, 1, 11, 11, 7, 11, 3],
3 C) E M3 l y, Q! ? 'x2': [26, 29, 56, 31, 52, 55, 71],
% @0 B6 V+ k0 Q& Q8 m+ O 'y': [78.5, 74.3, 104.3, 87.6, 95.9, 109.2, 102.7],
: R' e3 w9 m3 F% C% l6 Y })
" J/ ^3 j6 z9 R
/ i) s2 r$ b, ~# s4 u+ s; a1 t创建了一个包含 x1、x2 和 y 列的 DataFrame,作为原始数据。$ I, C' @( u: z d3 p9 K- Q# v
( R% \9 `8 L- r' u; W, m9 B3.将数据转换为数组格式:
* e4 R. B3 V( G; H: H; @
- m6 U; F& o5 G+ K X = np.array(df[['x1', 'x2']])3 M5 v$ h$ K' W
y = np.array(df[['y']])
2 [5 r) x# _% ]! L+ Z0 v
1 |6 d9 Z. ?' O a$ i将特征和目标变量分别转换为 NumPy 数组格式。
- u- [% I. i4 |3 v9 O0 E4 J6 t% S: }
; Q1 y* M* C6 M ~( M9 T( F4.遍历不同的 alpha 值,计算 Lasso 回归模型的拟合结果:
" [- G) W% Y0 A: F: V3 @# N3 |& t/ x1 D& W0 H. {
k_array = np.logspace(-4, 1.5, 100)
4 C1 U- `* }1 A& [* u x1_list, x2_list = [], []: m5 z8 u0 ~3 @* w
for k in k_array:1 l! J$ G1 L) X& `) n. g
model = Lasso(alpha=k).fit(X, y)
/ T" u. [1 O. T- W# e x1_list.append(model.coef_[0])4 X' Z0 _- [+ y3 q9 @. z4 y. @
x2_list.append(model.coef_[1])
$ L- w6 K2 I: C) i5 d/ O2 U$ u5 X8 E: V, s" C, W
使用 Lasso 回归模型,遍历不同的正则化参数 alpha 值,计算不同 alpha 值下 x1 和 x2 的系数。
& u+ b$ w% M P9 S+ I. _9 b/ m- L' h7 X
5.绘制岭迹图:$ h1 [9 V+ z( z
1 f! \* z+ N. l; `& [% }, E
plt.scatter(k_array, x1_list)
1 Q" R, [9 e2 n plt.scatter(k_array, x2_list)
( m' {- O3 D( c$ m! H8 T plt.plot(k_array, x1_list, label='x1')
# v5 x/ d3 h& D) X plt.plot(k_array, x2_list, label='x2')4 c& D7 N$ c; j; T% I
plt.legend(): b& w& Z% g' q4 m+ D
- Q: B" i9 E1 M
使用 plt.scatter() 绘制不同 alpha 值下 x1 和 x2 的系数散点图,并使用 plt.plot() 绘制岭迹图,分别标记了 x1 和 x2 的系数曲线,并添加图例。8 Z, V' H3 J' u; l0 Q, |" V
3 s1 H5 Q% G1 I0 j# t! `6.使用 LassoCV 自动选择最佳 alpha 值:
+ B! U b& f9 L9 E0 z' Z2 P& |1 D
" Z8 G+ L( E8 w' q; u: W6 `0 \ model2 = LassoCV().fit(X, y)
. U7 J1 R! u% Y
9 G1 v0 R# a3 Q$ b使用 LassoCV 进行交叉验证,自动选择最佳的正则化参数 alpha。/ N( {" ^; q. C( u- \) ]7 t* i; S6 p
3 Z% b( h; w5 F4 Y5 _8 i7.输出模型参数和评估结果:+ m) {1 Q- i2 e" t2 L0 e
+ w, u7 n* M0 _3 ^" i
b0 = model2.intercept_
; z9 x5 {# R+ O9 ^+ X% q( Z b1, b2 = model2.coef_[0], model2.coef_[1]% y' d: r! {' J$ i S( D
print('y = {:.4f} + {:.4f}*x1 + {:.4f}*x2'.format(b0, b1, b2)) m: z- e- k" U* H; [
print('R_square =', model2.score(X, y))/ P/ f0 z6 |$ I2 Q# G3 X! T
print('k =', model2.alpha_)
+ e. ~) @3 _" K' e: N7 d6 F- [' a* q* a6 A4 s% e
输出拟合的线性模型的截距、系数以及 R_squared 值,还输出了最佳的正则化参数 alpha。
7 f! ]+ h6 ^, c# n这段代码通过 Lasso 回归模型拟合了给定的数据,并展示了不同 alpha 值下的系数变化,最后选择了最佳的 alpha 值进行拟合,并输出了拟合结果和评估指标。/ L) N* D9 K( f# R8 `5 h
! V1 F, s3 s( L( }: Y2 r+ Z- Z9 k
# h2 m( N5 i+ H4 ^' m& D# ?
|
zan
|