简介
在本实验中,你将学习如何使用 Python 中的 scikit-learn 库来估计稳健协方差矩阵。本教程将向你介绍稳健协方差估计的概念,并演示如何使用它来估计被异常值污染的数据集的协方差矩阵。
虚拟机使用提示
虚拟机启动完成后,点击左上角切换到“笔记本”标签页,以访问 Jupyter Notebook 进行练习。
有时,你可能需要等待几秒钟让 Jupyter Notebook 完成加载。由于 Jupyter Notebook 的限制,操作验证无法自动化。
如果你在学习过程中遇到问题,随时向 Labby 提问。课程结束后提供反馈,我们会及时为你解决问题。
导入库
第一步是导入所需的库。在本教程中,我们将使用 NumPy、Matplotlib 和 scikit-learn。
import numpy as np
import matplotlib.pyplot as plt
from sklearn.covariance import MinCovDet, EmpiricalCovariance
生成数据
在这一步中,我们生成一个具有 n_samples 个样本和 n_features 个特征的随机数据集。我们还向数据集中添加了一些异常值。
n_samples = 80
n_features = 5
## 生成随机数据集
rng = np.random.RandomState(42)
X = rng.randn(n_samples, n_features)
## 向数据集中添加异常值
n_outliers = 20
异常值索引 = rng.permutation(n_samples)[:n_outliers]
异常值偏移量 = 10.0 * (
np.random.randint(2, size=(n_outliers, n_features)) - 0.5
)
X[异常值索引] += 异常值偏移量
估计稳健协方差矩阵
在这一步中,我们使用最小协方差行列式(Minimum Covariance Determinant,MCD)估计器来估计数据集的稳健协方差矩阵。
## 估计数据集的稳健协方差矩阵
mcd = MinCovDet().fit(X)
稳健协方差 = mcd.covariance_
估计经验协方差矩阵
在这一步中,我们使用最大似然估计(Maximum Likelihood Estimate,MLE)估计器来估计数据集的经验协方差矩阵。
## 估计数据集的经验协方差矩阵
emp_cov = EmpiricalCovariance().fit(X).covariance_
比较协方差矩阵
在这一步中,我们比较数据集中估计出的稳健协方差矩阵和经验协方差矩阵。
## 比较估计出的协方差矩阵
print("稳健协方差矩阵:")
print(robust_cov)
print("\n经验协方差矩阵:")
print(emp_cov)
可视化结果
在这一步中,我们将稳健和经验协方差估计的结果进行可视化。
## 可视化结果
fig, ax = plt.subplots()
## 绘制数据集
内点索引 = np.arange(n_samples)[~np.in1d(np.arange(n_samples), 异常值索引)]
ax.scatter(
X[内点索引, 0], X[内点索引, 1], color="black", label="内点"
)
ax.scatter(X[异常值索引, 0], X[异常值索引, 1], color="red", label="异常值")
## 绘制估计的协方差矩阵
for 协方差, 颜色, 标签 in zip(
[emp_cov, robust_cov], ["green", "magenta"], ["MLE", "MCD"]
):
v, w = np.linalg.eigh(协方差)
u = w[0] / np.linalg.norm(w[0])
角度 = np.arctan2(u[1], u[0])
角度 = 180 * 角度 / np.pi
v = 2.0 * np.sqrt(2.0) * np.sqrt(v)
ell = mpl.patches.Ellipse(
mcd.location_,
v[0],
v[1],
180 + 角度,
color=颜色,
label=标签,
alpha=0.2,
)
ell.set_clip_box(ax.bbox)
ell.set_facecolor(颜色)
ax.add_artist(ell)
## 设置绘图选项
plt.legend()
plt.title("稳健协方差估计")
plt.show()
总结
在本教程中,你已经学习了如何使用 Python 中的 scikit-learn 库来估计稳健协方差矩阵。你还学习了如何使用最小协方差行列式(MCD)估计器来估计被异常值污染的数据集的协方差矩阵。