- 在线时间
- 480 小时
- 最后登录
- 2026-6-1
- 注册时间
- 2023-7-11
- 听众数
- 4
- 收听数
- 0
- 能力
- 0 分
- 体力
- 7823 点
- 威望
- 0 点
- 阅读权限
- 255
- 积分
- 2934
- 相册
- 0
- 日志
- 0
- 记录
- 0
- 帖子
- 1174
- 主题
- 1189
- 精华
- 0
- 分享
- 0
- 好友
- 1
该用户从未签到
 |
# }( W- W; h4 @& U' i2 Z
1.导入所需库:
% A$ n; J+ H6 v9 A( }+ S) l+ E/ X7 x$ Y2 {$ H4 Y3 K8 q
import numpy as np
4 g. B$ @. ]9 S t4 A' V% r import pandas as pd
+ P8 q% n8 b# e; |, f import matplotlib.pyplot as plt4 t! B3 O b; y* ^
from sklearn.linear_model import Lasso, LassoCV
9 I3 ?3 s _) U5 P
- W$ a/ o) D# Q7 C
4 L" n) ^8 v6 [1 i' W2.定义源数据:) y: \9 {7 j, p8 p! h0 J
7 I! _5 s1 Z4 J2 F
df = pd.DataFrame({
6 V% C, z- A. a- o 'x1': [7, 1, 11, 11, 7, 11, 3],# T( A) |9 X6 ~8 w! Y
'x2': [26, 29, 56, 31, 52, 55, 71],/ n @1 V- D- y
'y': [78.5, 74.3, 104.3, 87.6, 95.9, 109.2, 102.7]," J/ e1 t3 E: }7 ?3 \1 _5 \0 k
})+ I/ @) N$ L* \" Q! N
0 F$ u& W+ A( E0 A创建了一个包含 x1、x2 和 y 列的 DataFrame,作为原始数据。1 T, n) r5 B* l! K4 G; e0 c
; x$ j. ]- D/ Z( [3.将数据转换为数组格式:1 v* l9 L0 n) d+ P, e `3 u: |
a1 n$ ?- s4 j( b5 I X = np.array(df[['x1', 'x2']])
' ]" N' Q/ Y! k. r y = np.array(df[['y']])
. x+ X- ^, T; J0 p+ o0 a, m! }7 X: m6 E7 _
将特征和目标变量分别转换为 NumPy 数组格式。9 I. v5 S* H0 n- W( J) {
3 f0 C/ U" e5 B. R
4.遍历不同的 alpha 值,计算 Lasso 回归模型的拟合结果:
6 @2 L' f8 U; w
& f \- P3 a( R+ P k_array = np.logspace(-4, 1.5, 100)
9 S% r* X: K! q! [ x1_list, x2_list = [], []; G; E& J7 v/ i9 T c
for k in k_array:/ Q% V' h, X/ d% J' d0 v
model = Lasso(alpha=k).fit(X, y)" d. [' P# v5 t- h# H$ z
x1_list.append(model.coef_[0]), P) B) ?! N. W5 B7 Z5 n
x2_list.append(model.coef_[1])
! R& L! e- P. Z+ X) g" M' K1 v G7 B% v' o$ L3 |2 f
使用 Lasso 回归模型,遍历不同的正则化参数 alpha 值,计算不同 alpha 值下 x1 和 x2 的系数。4 K, `! f5 V% q9 ]; `
) x& I# U. e3 F$ ?: I- ?8 j
5.绘制岭迹图:/ Z0 ^ ^4 ?3 W; T: f
2 [$ F. [. I% R0 ^% R
plt.scatter(k_array, x1_list)
; b8 M/ b( S& T+ M ] plt.scatter(k_array, x2_list)
2 t4 Q) I3 W& ~; V8 M! i plt.plot(k_array, x1_list, label='x1')
, Z8 P* d: \( y3 K" G plt.plot(k_array, x2_list, label='x2')
3 [. Z+ B( _* q plt.legend()
5 y5 a7 h: L% N# j6 B
9 s! d) t$ z# T. q2 W W使用 plt.scatter() 绘制不同 alpha 值下 x1 和 x2 的系数散点图,并使用 plt.plot() 绘制岭迹图,分别标记了 x1 和 x2 的系数曲线,并添加图例。
; Q1 U' A D3 ^& q: T* k, L" X# c2 Q2 R
6.使用 LassoCV 自动选择最佳 alpha 值:% r6 d" ~- w8 L, Z/ S. q% u9 v( f0 N
- `! j$ q* i8 C. K
model2 = LassoCV().fit(X, y)& m# i9 ?& m9 |" ]1 C4 \/ F
0 T3 z) S M+ P: }) \ m; u; Y) L1 [使用 LassoCV 进行交叉验证,自动选择最佳的正则化参数 alpha。
2 s5 K' @) O, }
/ [/ T1 ]6 ?, y5 _9 R7.输出模型参数和评估结果:" _# ~5 V9 Y' v0 P6 j+ T8 j2 c
+ o% H) C7 T; y b0 = model2.intercept_
" c1 X6 g+ ]/ \* E b1, b2 = model2.coef_[0], model2.coef_[1]
4 Q2 u! D/ X+ Q. D1 s print('y = {:.4f} + {:.4f}*x1 + {:.4f}*x2'.format(b0, b1, b2))- B% W2 x8 i& l
print('R_square =', model2.score(X, y))
- [2 q* G: X. C* F" g% C print('k =', model2.alpha_)4 C. Q9 P1 l0 P: |3 j
& x& T- `2 G( D4 M' P! o% J& Y9 ~
输出拟合的线性模型的截距、系数以及 R_squared 值,还输出了最佳的正则化参数 alpha。* H! W! J. [! h$ r8 ?+ g
这段代码通过 Lasso 回归模型拟合了给定的数据,并展示了不同 alpha 值下的系数变化,最后选择了最佳的 alpha 值进行拟合,并输出了拟合结果和评估指标。
/ N. H% Q' @8 k4 M) o b$ K
6 T9 n& g3 q; U( R; L- F- n: k, i
7 S9 {5 l Y" X& J: u [0 L; s
2 K9 b. H/ Y5 P0 S |
zan
|