简介
新颖性检测和异常值检测是用于确定新观测值是否与现有观测值属于同一分布,或者是否应被视为不同的技术。这些技术通常用于通过识别异常或不寻常的观测值来清理真实数据集。
在这种情况下有两个重要区别:
- 异常值检测:训练数据包含异常值,即与其他观测值相差甚远的观测值。异常值检测估计器试图拟合训练数据最集中的区域,而忽略偏差较大的观测值。
- 新颖性检测:训练数据未被异常值污染,目标是检测新观测值是否为异常值。在这种情况下,异常值也称为新颖性。
scikit-learn 项目提供了一组机器学习工具,可用于新颖性检测和异常值检测。这些工具使用无监督学习算法实现,这意味着它们从数据中学习模式,而无需标记示例。
虚拟机提示
虚拟机启动完成后,点击左上角切换到“笔记本”标签以访问 Jupyter Notebook 进行练习。
有时,你可能需要等待几秒钟让 Jupyter Notebook 完成加载。由于 Jupyter Notebook 的限制,操作验证无法自动化。
如果你在学习过程中遇到问题,请随时向 Labby 提问。课程结束后提供反馈,我们将立即为你解决问题。
导入必要的库
首先,我们需要导入必要的库。在这个例子中,我们将使用 scikit-learn 的sklearn模块。
from sklearn import neighbors
加载数据集
接下来,我们需要加载想要在其上执行异常值检测的数据集。你可以使用任何你选择的数据集,或者创建一个自定义数据集。在这个例子中,我们将使用一个名为X_train的示例数据集。
X_train = [0.5, 1.5, 2.5, 3.5, 4.5, 10.5, 11.5, 12.5, 13.5, 14.5]
创建一个异常值检测估计器
现在,我们可以从neighbors.LocalOutlierFactor类创建一个异常值检测估计器对象。这个类实现了局部异常因子(Local Outlier Factor)算法,这是一种流行的异常值检测方法。
estimator = neighbors.LocalOutlierFactor()
将模型拟合到训练数据
接下来,我们可以使用fit方法将异常值检测估计器拟合到我们的训练数据上。
estimator.fit(X_train)
预测异常值
一旦模型拟合完成,我们就可以使用predict方法来预测新的观测值是否为异常值。predict方法对于内点返回 1,对于异常值返回 -1。
X_test = [5.5, 8.5]
predictions = estimator.predict(X_test)
print(predictions)
获取异常值分数
除了预测异常值,我们还可以使用negative_outlier_factor_属性获取每个观测值的异常值分数。较低的异常值分数表示更高的异常程度。
outlier_scores = estimator.negative_outlier_factor_
print(outlier_scores)
总结
在本实验中,我们学习了如何使用 scikit-learn 库进行新奇性和异常值检测。我们创建了一个异常值检测估计器,将其拟合到训练数据上,预测新观测值中的异常值,并获取异常值分数。这些技术可用于识别数据集中的异常或不寻常观测值,并且通常用于异常检测任务。