- 在线时间
- 480 小时
- 最后登录
- 2026-6-1
- 注册时间
- 2023-7-11
- 听众数
- 4
- 收听数
- 0
- 能力
- 0 分
- 体力
- 7823 点
- 威望
- 0 点
- 阅读权限
- 255
- 积分
- 2934
- 相册
- 0
- 日志
- 0
- 记录
- 0
- 帖子
- 1174
- 主题
- 1189
- 精华
- 0
- 分享
- 0
- 好友
- 1
该用户从未签到
 |
1 o) _4 f K5 U: o
1.导入所需库:7 m4 b! b( f9 K% I+ M
+ h% ~& c8 `. i q x; ~ import numpy as np
8 g& m0 `* d; U: R import pandas as pd
/ d9 @% H' B0 i7 {9 [% T import matplotlib.pyplot as plt6 e4 x6 @1 ~9 j; b& {2 U1 V
from sklearn.linear_model import Lasso, LassoCV6 i- x5 I+ ~ q( Z2 \5 i1 n
3 j# X/ W/ n3 a& ]7 L7 u$ y& o2 x, o
3 H8 G k# c0 w6 G" Y2.定义源数据:" E5 n& P3 b2 S: y- H! l" n9 R
4 t3 ]9 }& J& u' g8 V" ? df = pd.DataFrame({( \ v Q0 A2 f: b0 m
'x1': [7, 1, 11, 11, 7, 11, 3],8 D3 M# O0 F4 G) {* \8 i9 m3 _( E
'x2': [26, 29, 56, 31, 52, 55, 71],( I1 s; o6 f- g7 R( A
'y': [78.5, 74.3, 104.3, 87.6, 95.9, 109.2, 102.7],
. s P! E8 Y/ G3 s& W3 l! i! W) x })
& L; `7 T3 V& n$ q; J# t- D# g
创建了一个包含 x1、x2 和 y 列的 DataFrame,作为原始数据。
( k3 y2 j$ ~3 o2 |4 u$ Z1 n* y% r" c
6 J& \1 c8 x B9 X) v0 \6 v3.将数据转换为数组格式:& f7 y5 p1 Z' }- [0 ^3 _
7 G/ ]' f$ t6 B& W t" ]) T
X = np.array(df[['x1', 'x2']])4 f b& s& t1 z5 p+ ?3 `# o
y = np.array(df[['y']]); _- d2 T6 x w. H! v! d
4 v5 P! O* r( Z) i
将特征和目标变量分别转换为 NumPy 数组格式。1 x% h$ }. S( [: U' h$ o7 |
$ B7 }0 `; x) J# T$ T3 {4.遍历不同的 alpha 值,计算 Lasso 回归模型的拟合结果:
* |5 w( n! Q* x& T. B. R8 o. ^' Q/ ^" y+ R. K0 N
k_array = np.logspace(-4, 1.5, 100)
. p/ h: ~0 w: d8 O x1_list, x2_list = [], []/ `" t# h) U/ i. V/ d; T
for k in k_array:7 B/ `" u5 g3 p# K5 c; y) @" d1 S/ k* z
model = Lasso(alpha=k).fit(X, y)7 ]$ r4 H6 J* N0 f* f+ ~
x1_list.append(model.coef_[0])& @# c; O% y) v/ e
x2_list.append(model.coef_[1])
* Z4 Y! ^* j- _0 C% @7 t! U1 T1 H9 u' |8 K( R/ d+ Z: i
使用 Lasso 回归模型,遍历不同的正则化参数 alpha 值,计算不同 alpha 值下 x1 和 x2 的系数。1 r& b& Y+ S9 q* r. ]( {/ O
H9 |% g. l6 E9 y3 w7 t! l% p9 `5.绘制岭迹图:: F& n% q6 P9 i" b; M: B2 S6 S
L5 ?, X5 `+ a" i! r6 C plt.scatter(k_array, x1_list)
' r, M: B) F3 O4 Z. f plt.scatter(k_array, x2_list)
$ Q( B* X: {2 [' p t plt.plot(k_array, x1_list, label='x1')
5 C9 M) X3 N8 ^+ `" @0 k plt.plot(k_array, x2_list, label='x2')
/ _; h% E& E- B! M, A+ I plt.legend()( j$ i0 F7 @* \/ \, X7 ?
3 a+ G- a. p1 e2 D. m5 w/ O
使用 plt.scatter() 绘制不同 alpha 值下 x1 和 x2 的系数散点图,并使用 plt.plot() 绘制岭迹图,分别标记了 x1 和 x2 的系数曲线,并添加图例。
H" x9 W: Z) E
1 x6 q' V* z% w- k- d6.使用 LassoCV 自动选择最佳 alpha 值:
' k' ]: P0 r" a* {7 R4 g0 W+ y; R" t8 l" J, h
model2 = LassoCV().fit(X, y)
0 W) }8 A3 A, ]3 Z& y. c! d
+ n$ n( @+ K: S6 n0 @& l使用 LassoCV 进行交叉验证,自动选择最佳的正则化参数 alpha。
5 Q7 j! X9 F: c7 Y) ^0 G, _8 [
; }# [" I$ K/ c. Y" C, Q$ y7.输出模型参数和评估结果:
8 {5 X# f2 P" K$ ~0 I j6 D, q9 N$ i' B( I. h! G+ W" Q. t
b0 = model2.intercept_. V6 }$ E, [+ l5 i; k' Q+ b6 E
b1, b2 = model2.coef_[0], model2.coef_[1]
- B w+ I. J: h print('y = {:.4f} + {:.4f}*x1 + {:.4f}*x2'.format(b0, b1, b2))
* ?3 @% r; X: ^( Y print('R_square =', model2.score(X, y))
9 k+ [/ y& z* {# `& i- u print('k =', model2.alpha_)+ k: X. `3 x% K2 p* B
4 h. g! ?0 b/ M0 m) j2 Q; M) \# n输出拟合的线性模型的截距、系数以及 R_squared 值,还输出了最佳的正则化参数 alpha。" ~( |& s' }/ _, _: H. z. X" I
这段代码通过 Lasso 回归模型拟合了给定的数据,并展示了不同 alpha 值下的系数变化,最后选择了最佳的 alpha 值进行拟合,并输出了拟合结果和评估指标。
1 e6 P& ^+ W( E6 K4 @
' N# X( ~5 f; Y& _! _- |; R9 ]. ]4 w" n8 m# {' b
- _' i4 [/ O+ P+ |$ Y. [
|
zan
|