- 在线时间
- 480 小时
- 最后登录
- 2026-6-1
- 注册时间
- 2023-7-11
- 听众数
- 4
- 收听数
- 0
- 能力
- 0 分
- 体力
- 7823 点
- 威望
- 0 点
- 阅读权限
- 255
- 积分
- 2934
- 相册
- 0
- 日志
- 0
- 记录
- 0
- 帖子
- 1174
- 主题
- 1189
- 精华
- 0
- 分享
- 0
- 好友
- 1
该用户从未签到
 |
& U& c4 T3 D& o: F
1.导入所需库:
) \$ c5 S8 v2 r) {& b* x, J' x9 U' }( r
import numpy as np: I4 V' w* u% l* c$ J
import pandas as pd
$ i0 r" H" y. v3 i$ {$ V' i import matplotlib.pyplot as plt
' p. d. y' ?4 ^$ S6 o9 M from sklearn.linear_model import Lasso, LassoCV
5 {' x3 C* Q/ w8 e; |" `3 B" W; v l% d, J) I6 P) S
/ L1 P% t0 W7 s' x2.定义源数据:
2 N( e2 {9 h- l3 L+ U
. [/ F5 l- ?6 Z* g7 N3 ?; t df = pd.DataFrame({7 [" K" f' H+ m6 G* i# L5 q1 V3 W
'x1': [7, 1, 11, 11, 7, 11, 3],* V. I6 M* _9 ]& @
'x2': [26, 29, 56, 31, 52, 55, 71],; y' X; ~4 G7 ?8 |2 t, N
'y': [78.5, 74.3, 104.3, 87.6, 95.9, 109.2, 102.7],# V2 u' J6 ^, h/ n2 i
})
6 i* P7 A8 _2 H. C! w& M! v
: B& x! ^' w2 q创建了一个包含 x1、x2 和 y 列的 DataFrame,作为原始数据。$ O- n# J$ \+ E/ w, {8 j1 w
8 b* B* T! b( f. g/ ^5 G/ o3.将数据转换为数组格式:
6 B, B/ e/ G+ L! P( c- @3 @ [: }5 R/ k8 y4 D7 ^( M6 P6 v
X = np.array(df[['x1', 'x2']])
0 ^8 S6 O4 d9 ? y = np.array(df[['y']])% d# k+ C- @% w; h
" P! P, E7 R8 ^5 r将特征和目标变量分别转换为 NumPy 数组格式。2 E' l* K: a5 o
) r) ~+ G7 x1 n" U0 d4.遍历不同的 alpha 值,计算 Lasso 回归模型的拟合结果:- }8 i4 ]. w3 n
) @% y# Z0 N% {" M: ]
k_array = np.logspace(-4, 1.5, 100)
6 Y! Q& y9 r9 Y' k. I+ m2 }: g# c' z& ` x1_list, x2_list = [], []" h: j9 @% Y9 `" Q r* P0 {
for k in k_array:
3 ^" i5 {+ h* w( X0 y+ ? model = Lasso(alpha=k).fit(X, y)
' P7 \, I0 d; q" B* j P+ Q x1_list.append(model.coef_[0])
4 m/ }( M% y: S3 Z# l9 E' C x2_list.append(model.coef_[1])
( D2 O l9 I1 F% `- c; y+ e+ q+ E2 ^" |7 q; I) E
使用 Lasso 回归模型,遍历不同的正则化参数 alpha 值,计算不同 alpha 值下 x1 和 x2 的系数。
* L( |" `7 j5 g4 }
. ?4 P3 M- O& e: K5.绘制岭迹图:
/ @1 K* M5 d+ r' a8 j4 g% X- J# v) h0 w2 |+ V
plt.scatter(k_array, x1_list)
9 y$ ^/ e5 w: N+ p. u2 [ plt.scatter(k_array, x2_list)" p* L. r2 j3 N
plt.plot(k_array, x1_list, label='x1'), Z, D2 P; v$ P6 ~
plt.plot(k_array, x2_list, label='x2')
# z2 S Y5 Y0 Q' g: M4 c. L) p# J3 p plt.legend()
$ T# S* [1 I7 G+ [
* j8 s. m" I0 q0 B( S8 o使用 plt.scatter() 绘制不同 alpha 值下 x1 和 x2 的系数散点图,并使用 plt.plot() 绘制岭迹图,分别标记了 x1 和 x2 的系数曲线,并添加图例。7 Z7 ^, C# r' r8 k( j& m% Y; V
; S6 v6 M' t4 r l) l0 v6.使用 LassoCV 自动选择最佳 alpha 值:
% t- N8 @/ K3 ~; Q
) J8 a6 r) r& Z. V' C model2 = LassoCV().fit(X, y)
" p5 g$ ]$ Z5 k( [7 D( n2 L, q( H9 B6 N, U0 c) H6 @
使用 LassoCV 进行交叉验证,自动选择最佳的正则化参数 alpha。2 V. f0 J G" J2 v, l$ s
# S8 b! f8 L( a9 m' @% ?5 }( _- w a7.输出模型参数和评估结果:
; d y# f# k6 I( ^
9 ~* Z& g$ X% W1 }% Z b0 = model2.intercept_
0 {2 _2 q( l% s+ ~* Y b1, b2 = model2.coef_[0], model2.coef_[1]
" l+ S9 T2 N. x) Q5 j print('y = {:.4f} + {:.4f}*x1 + {:.4f}*x2'.format(b0, b1, b2))
4 _7 B _! K# ?3 k5 Q print('R_square =', model2.score(X, y))) `/ t! K) a# z0 b
print('k =', model2.alpha_)& y8 G' Z6 a5 p2 ^
* V! \( n: I3 V( d: P) ^
输出拟合的线性模型的截距、系数以及 R_squared 值,还输出了最佳的正则化参数 alpha。
! f( T3 O, Z% C. {; ~这段代码通过 Lasso 回归模型拟合了给定的数据,并展示了不同 alpha 值下的系数变化,最后选择了最佳的 alpha 值进行拟合,并输出了拟合结果和评估指标。( K2 I" s, `8 ?* E7 d; |# g
; E# {( j. k: c! r. `0 c
5 q+ N. k' h2 \' H5 A: Q6 `
0 v/ H) Q8 [, o/ P |
zan
|