所有模型

pyod.models.abod 模块

基于角度的异常检测器 (ABOD)

class pyod.models.abod.ABOD(contamination=0.1, n_neighbors=5, method='fast')[source]

基础类: BaseDetector

ABOD 是基于角度的异常检测类。对于一个观测值,其与所有邻居的加权余弦分数的方差可以视为异常值分数。详见[BKZ+08]

支持两种版本的 ABOD

  • 快速 ABOD: 使用 k 近邻进行近似。

  • 原始 ABOD: 考虑所有训练点,时间复杂度高,为 O(n^3)。

参数

contaminationfloat,范围 (0., 0.5),可选 (默认值=0.1)

数据集的污染程度,即数据集中异常值的比例。在拟合时用于定义决策函数的阈值。

n_neighborsint,可选 (默认值=10)

默认用于 k 近邻查询的邻居数量。

method: str,可选 (默认值=’fast’)

有效的 method 值包括:

  • ‘fast’: 快速 ABOD。仅考虑 n_neighbors 个训练点。

  • ‘default’: 使用所有训练点的原始 ABOD,速度可能较慢。

属性

decision_scores_形状为 (n_samples,) 的 numpy 数组

训练数据的异常值分数。分数越高表示越异常。异常值往往得分较高。此值在检测器拟合后可用。

threshold_float

阈值基于 contamination。它是 decision_scores_n_samples * contamination 个最异常样本的分数。计算此阈值是为了生成二元异常值标签。

labels_int,值为 0 或 1

训练数据的二元标签。0 表示正常值,1 表示异常值/异常。它是通过将 threshold_ 应用于 decision_scores_ 生成的。

compute_rejection_stats(T=32, delta=0.1, c_fp=1, c_fn=1, c_r=-1, verbose=False)
为无监督检测器添加拒绝选项。

这伴随着保证:预期拒绝率的估计值 (return_rejectrate=True),拒绝率的上限 (return_ub_rejectrate= True),以及成本的上限 (return_ub_cost=True)。

参数

T: int,可选 (默认值=32)

它允许将拒绝阈值设置为 1-2exp(-T)。T 的值越高,拒绝越多。

delta: float,可选 (默认值 = 0.1)

拒绝率上限以概率 1-delta 成立。

c_fp, c_fn, c_r: float (正值),

可选 (默认值 = [1,1, contamination]) 对应于误报预测 (c_fp)、漏报预测 (c_fn) 和拒绝 (c_r) 的成本。

verbose: bool,可选 (默认值 = False)

如果为 True,则打印预期拒绝率、拒绝率上限和成本上限。

返回值

expected_rejection_rate: float,预期拒绝率;upperbound_rejection_rate: float,拒绝率上限

概率 1-delta 满足;

upperbound_cost: float,成本上限;

decision_function(X)[source]

使用已拟合的检测器预测 X 的原始异常分数。

输入样本的异常分数是根据不同的检测器算法计算的。为了一致性,异常值被赋予较大的异常分数。

参数

X形状为 (n_samples, n_features) 的 numpy 数组

训练输入样本。仅当基础估计器支持时,才接受稀疏矩阵。

返回值

anomaly_scores形状为 (n_samples,) 的 numpy 数组

输入样本的异常分数。

fit(X, y=None)[source]

拟合检测器。y 在无监督方法中被忽略。

参数

X形状为 (n_samples, n_features) 的 numpy 数组

输入样本。

y已忽略

未使用,根据约定为了 API 一致性而存在。

返回值

self对象

已拟合的估计器。

fit_predict(X, y=None)

首先拟合检测器,然后预测特定样本是否为异常值。y 在无监督模型中被忽略。

参数

X形状为 (n_samples, n_features) 的 numpy 数组

输入样本。

y已忽略

未使用,根据约定为了 API 一致性而存在。

返回值

outlier_labels形状为 (n_samples,) 的 numpy 数组

对于每个观测值,根据已拟合的模型判断是否应将其视为异常值。0 表示正常值,1 表示异常值。

自 0.6.9 版本起已弃用: fit_predict 将在 pyod 0.8.0 中移除;为了保持一致性,将替换为先调用 fit 函数,然后访问 labels_ 属性。

fit_predict_score(X, y, scoring='roc_auc_score')

拟合检测器,对样本进行预测,并使用预定义指标(例如 ROC)评估模型。

参数

X形状为 (n_samples, n_features) 的 numpy 数组

输入样本。

y已忽略

未使用,根据约定为了 API 一致性而存在。

scoringstr,可选 (默认值=’roc_auc_score’)

评估指标

  • ‘roc_auc_score’: ROC 分数

  • ‘prc_n_score’: Precision @ rank n 分数

返回值

score : float

自 0.6.9 版本起已弃用: fit_predict_score 将在 pyod 0.8.0 中移除;为了保持一致性,将替换为先调用 fit 函数,然后访问 labels_ 属性。评分可以通过调用评估方法(例如 AUC ROC)来完成。

predict(X, return_confidence=False)

预测特定样本是否为异常值。

参数

X形状为 (n_samples, n_features) 的 numpy 数组

输入样本。

return_confidenceboolean,可选 (默认值=False)

如果为 True,则同时返回预测的置信度。

返回值

outlier_labels形状为 (n_samples,) 的 numpy 数组

对于每个观测值,根据已拟合的模型判断是否应将其视为异常值。0 表示正常值,1 表示异常值。

confidence形状为 (n_samples,) 的 numpy 数组。

仅当 return_confidence 设置为 True 时返回。

predict_confidence(X)

预测模型在稍微不同的训练集下做出相同预测的置信度。详见[BPVD20]

参数

X形状为 (n_samples, n_features) 的 numpy 数组

输入样本。

返回值

confidence形状为 (n_samples,) 的 numpy 数组

对于每个观测值,表示如果在训练集受到扰动时模型会多么一致地做出相同的预测。返回一个概率,范围在 [0,1]。

predict_proba(X, method='linear', return_confidence=False)

预测样本为异常值的概率。有两种可能的方法

  1. 简单使用 Min-max 转换将异常值分数线性变换到 [0,1] 的范围。模型必须先拟合。

  2. 使用统一分数,详见[BKKSZ11]

参数

X形状为 (n_samples, n_features) 的 numpy 数组

输入样本。

methodstr,可选 (默认值=’linear’)

概率转换方法。必须是 ‘linear’ 或 ‘unify’ 之一。

return_confidenceboolean,可选 (默认值=False)

如果为 True,则同时返回预测的置信度。

返回值

outlier_probability形状为 (n_samples, n_classes) 的 numpy 数组

对于每个观测值,根据已拟合的模型判断是否应将其视为异常值。返回异常值概率,范围在 [0,1]。注意,这取决于类别数量,默认情况下为 2 个类别 ([正常概率, 异常概率])。

predict_with_rejection(X, T=32, return_stats=False, delta=0.1, c_fp=1, c_fn=1, c_r=-1)
预测特定样本是否为异常值,

允许检测器拒绝 (即输出 = -2) 低置信度的预测。

参数

X形状为 (n_samples, n_features) 的 numpy 数组

输入样本。

Tint,可选 (默认值=32)

它允许将拒绝阈值设置为 1-2exp(-T)。T 的值越高,拒绝越多。

return_stats: bool,可选 (默认值 = False)

如果为 True,则同时返回三个附加的浮点值:估计拒绝率、拒绝率上限和成本上限。

delta: float,可选 (默认值 = 0.1)

拒绝率上限以概率 1-delta 成立。

c_fp, c_fn, c_r: float (正值),可选 (默认值 = [1,1, contamination])

误报预测 (c_fp)、漏报预测 (c_fn) 和拒绝 (c_r) 的成本。

返回值

outlier_labels形状为 (n_samples,) 的 numpy 数组

对于每个观测值,根据已拟合的模型判断是否应将其视为异常值。0 表示正常值,1 表示异常值,-2 表示拒绝。

expected_rejection_rate: float,如果 return_stats 为 True;upperbound_rejection_rate: float,如果 return_stats 为 True;upperbound_cost: float,如果 return_stats 为 True;

pyod.models.ae1svm 模块

使用 AE-1SVM 进行异常检测 (PyTorch) 来源: https://arxiv.org/pdf/1804.04888 Minh Nghia 还有一个此模型的实现: https://github.com/minh-nghia/AE-1SVM (Tensorflow)

class pyod.models.ae1svm.AE1SVM(hidden_neurons=None, hidden_activation='relu', batch_norm=True, learning_rate=0.001, epochs=50, batch_size=32, dropout_rate=0.2, weight_decay=1e-05, preprocessing=True, loss_fn=None, contamination=0.1, alpha=1.0, sigma=1.0, nu=0.1, kernel_approx_features=1000)[source]

基础类: BaseDetector

结合 One-class SVM 的自编码器用于异常检测。

注意: 需要 self.device,否则所有张量可能不在同一设备上(如果设备运行 GPU)。

参数

hidden_neuronslist,可选 (默认值=[64, 32])

每个隐藏层中的神经元数量。

hidden_activationstr,可选 (默认值=’relu’)

隐藏层的激活函数。

batch_normbool,可选 (默认值=True)

是否使用批归一化。

learning_ratefloat,可选 (默认值=1e-3)

训练模型的学习率。

epochsint,可选 (默认值=50)

训练轮数(epoch)。

batch_sizeint,可选 (默认值=32)

每个训练批次的大小。

dropout_ratefloat,可选 (默认值=0.2)

用于正则化的 Dropout 比率。

weight_decayfloat,可选 (默认值=1e-5)

优化器的权重衰减 (L2 惩罚)。

preprocessingbool,可选 (默认值=True)

是否对输入数据应用标准缩放。

loss_fncallable,可选 (默认值=torch.nn.MSELoss)

用于重构损失的损失函数。

contaminationfloat,可选 (默认值=0.1)

数据中异常值的比例。

alphafloat,可选 (默认值=1.0)

最终损失计算中重构损失的权重。

sigmafloat,可选 (默认值=1.0)

随机傅立叶特征的缩放因子。

nufloat,可选 (默认值=0.1)

SVM 损失的参数。

kernel_approx_featuresint,可选 (默认值=1000)

用于近似核函数的随机傅立叶特征数量。

compute_rejection_stats(T=32, delta=0.1, c_fp=1, c_fn=1, c_r=-1, verbose=False)
为无监督检测器添加拒绝选项。

这伴随着保证:预期拒绝率的估计值 (return_rejectrate=True),拒绝率的上限 (return_ub_rejectrate= True),以及成本的上限 (return_ub_cost=True)。

参数

T: int,可选 (默认值=32)

它允许将拒绝阈值设置为 1-2exp(-T)。T 的值越高,拒绝越多。

delta: float,可选 (默认值 = 0.1)

拒绝率上限以概率 1-delta 成立。

c_fp, c_fn, c_r: float (正值),

可选 (默认值 = [1,1, contamination]) 对应于误报预测 (c_fp)、漏报预测 (c_fn) 和拒绝 (c_r) 的成本。

verbose: bool,可选 (默认值 = False)

如果为 True,则打印预期拒绝率、拒绝率上限和成本上限。

返回值

expected_rejection_rate: float,预期拒绝率;upperbound_rejection_rate: float,拒绝率上限

概率 1-delta 满足;

upperbound_cost: float,成本上限;

decision_function(X)[source]

使用已拟合的检测器预测 X 的原始异常分数。

参数

Xnumpy.ndarray

输入样本。

返回值

numpy.ndarray

输入样本的异常分数。

fit(X, y=None)[source]

将模型拟合到数据。

参数

Xnumpy.ndarray

输入数据。

yNone

已忽略,根据约定为了 API 一致性而存在。

返回值

self对象

已拟合的估计器。

fit_predict(X, y=None)

首先拟合检测器,然后预测特定样本是否为异常值。y 在无监督模型中被忽略。

参数

X形状为 (n_samples, n_features) 的 numpy 数组

输入样本。

y已忽略

未使用,根据约定为了 API 一致性而存在。

返回值

outlier_labels形状为 (n_samples,) 的 numpy 数组

对于每个观测值,根据已拟合的模型判断是否应将其视为异常值。0 表示正常值,1 表示异常值。

自 0.6.9 版本起已弃用: fit_predict 将在 pyod 0.8.0 中移除;为了保持一致性,将替换为先调用 fit 函数,然后访问 labels_ 属性。

fit_predict_score(X, y, scoring='roc_auc_score')

拟合检测器,对样本进行预测,并使用预定义指标(例如 ROC)评估模型。

参数

X形状为 (n_samples, n_features) 的 numpy 数组

输入样本。

y已忽略

未使用,根据约定为了 API 一致性而存在。

scoringstr,可选 (默认值=’roc_auc_score’)

评估指标

  • ‘roc_auc_score’: ROC 分数

  • ‘prc_n_score’: Precision @ rank n 分数

返回值

score : float

自 0.6.9 版本起已弃用: fit_predict_score 将在 pyod 0.8.0 中移除;为了保持一致性,将替换为先调用 fit 函数,然后访问 labels_ 属性。评分可以通过调用评估方法(例如 AUC ROC)来完成。

predict(X, return_confidence=False)

预测特定样本是否为异常值。

参数

X形状为 (n_samples, n_features) 的 numpy 数组

输入样本。

return_confidenceboolean,可选 (默认值=False)

如果为 True,则同时返回预测的置信度。

返回值

outlier_labels形状为 (n_samples,) 的 numpy 数组

对于每个观测值,根据已拟合的模型判断是否应将其视为异常值。0 表示正常值,1 表示异常值。

confidence形状为 (n_samples,) 的 numpy 数组。

仅当 return_confidence 设置为 True 时返回。

predict_confidence(X)

预测模型在稍微不同的训练集下做出相同预测的置信度。详见[BPVD20]

参数

X形状为 (n_samples, n_features) 的 numpy 数组

输入样本。

返回值

confidence形状为 (n_samples,) 的 numpy 数组

对于每个观测值,表示如果在训练集受到扰动时模型会多么一致地做出相同的预测。返回一个概率,范围在 [0,1]。

predict_proba(X, method='linear', return_confidence=False)

预测样本为异常值的概率。有两种可能的方法

  1. 简单使用 Min-max 转换将异常值分数线性变换到 [0,1] 的范围。模型必须先拟合。

  2. 使用统一分数,详见[BKKSZ11]

参数

X形状为 (n_samples, n_features) 的 numpy 数组

输入样本。

methodstr,可选 (默认值=’linear’)

概率转换方法。必须是 ‘linear’ 或 ‘unify’ 之一。

return_confidenceboolean,可选 (默认值=False)

如果为 True,则同时返回预测的置信度。

返回值

outlier_probability形状为 (n_samples, n_classes) 的 numpy 数组

对于每个观测值,根据已拟合的模型判断是否应将其视为异常值。返回异常值概率,范围在 [0,1]。注意,这取决于类别数量,默认情况下为 2 个类别 ([正常概率, 异常概率])。

predict_with_rejection(X, T=32, return_stats=False, delta=0.1, c_fp=1, c_fn=1, c_r=-1)
预测特定样本是否为异常值,

允许检测器拒绝 (即输出 = -2) 低置信度的预测。

参数

X形状为 (n_samples, n_features) 的 numpy 数组

输入样本。

Tint,可选 (默认值=32)

它允许将拒绝阈值设置为 1-2exp(-T)。T 的值越高,拒绝越多。

return_stats: bool,可选 (默认值 = False)

如果为 True,则同时返回三个附加的浮点值:估计拒绝率、拒绝率上限和成本上限。

delta: float,可选 (默认值 = 0.1)

拒绝率上限以概率 1-delta 成立。

c_fp, c_fn, c_r: float (正值),可选 (默认值 = [1,1, contamination])

误报预测 (c_fp)、漏报预测 (c_fn) 和拒绝 (c_r) 的成本。

返回值

outlier_labels形状为 (n_samples,) 的 numpy 数组

对于每个观测值,根据已拟合的模型判断是否应将其视为异常值。0 表示正常值,1 表示异常值,-2 表示拒绝。

expected_rejection_rate: float,如果 return_stats 为 True;upperbound_rejection_rate: float,如果 return_stats 为 True;upperbound_cost: float,如果 return_stats 为 True;

pyod.models.alad 模块

使用对抗学习异常检测

class pyod.models.alad.ALAD(activation_hidden_gen='tanh', activation_hidden_disc='tanh', output_activation=None, dropout_rate=0.2, latent_dim=2, dec_layers=[5, 10, 25], enc_layers=[25, 10, 5], disc_xx_layers=[25, 10, 5], disc_zz_layers=[25, 10, 5], disc_xz_layers=[25, 10, 5], learning_rate_gen=0.0001, learning_rate_disc=0.0001, add_recon_loss=False, lambda_recon_loss=0.1, epochs=200, verbose=0, preprocessing=False, add_disc_zz_loss=True, spectral_normalization=False, batch_size=32, contamination=0.1, device=None)[source]

基础类: BaseDetector

对抗学习异常检测 (ALAD)。论文: https://arxiv.org/pdf/1812.02288.pdf

详见[BZRF+18]

参数

output_activationstr 或 None,可选 (默认值=None)

编码器和解码器输出层使用的激活函数。

activation_hidden_discstr,可选 (默认值=’tanh’)

判别器隐藏层使用的激活函数。

activation_hidden_genstr,可选 (默认值=’tanh’)

编码器和解码器(即生成器)隐藏层使用的激活函数。

epochsint,可选 (默认值=500)

训练模型的轮数。

batch_sizeint,可选 (默认值=32)

每次梯度更新的样本数量。

dropout_ratefloat,范围 (0., 1),可选 (默认值=0.2)

所有层中使用的 Dropout。

dec_layerslist,可选 (默认值=[5,10,25])

表示解码器网络每个隐藏层节点数量的列表。因此,[10,10] 表示 2 个隐藏层,每个层有 10 个节点。

enc_layerslist,可选 (默认值=[25,10,5])

表示编码器网络每个隐藏层节点数量的列表。因此,[10,10] 表示 2 个隐藏层,每个层有 10 个节点。

disc_xx_layerslist,可选 (默认值=[25,10,5])

表示 discriminator_xx 每个隐藏层节点数量的列表。因此,[10,10] 表示 2 个隐藏层,每个层有 10 个节点。

disc_zz_layerslist,可选 (默认值=[25,10,5])

表示 discriminator_zz 每个隐藏层节点数量的列表。因此,[10,10] 表示 2 个隐藏层,每个层有 10 个节点。

disc_xz_layerslist,可选 (默认值=[25,10,5])

表示 discriminator_xz 每个隐藏层节点数量的列表。因此,[10,10] 表示 2 个隐藏层,每个层有 10 个节点。

learning_rate_gen: float,范围 (0., 1),可选 (默认值=0.001)

训练编码器和解码器的学习率

learning_rate_disc: float,范围 (0., 1),可选 (默认值=0.001)

训练判别器的学习率

add_recon_loss: bool,可选 (默认值=False)

基于重构误差为编码器和解码器添加额外损失

lambda_recon_loss: float,范围 (0., 1),可选 (默认值=0.1)

如果 add_recon_loss= True,重构损失将乘以 lambda_recon_loss 并加到生成器

(即编码器和解码器) 的总损失中。

preprocessingbool,可选 (默认值=True)

如果为 True,则对数据应用标准化。

verboseint,可选 (默认值=1)

详细模式。- 0 = 静默 - 1 = 进度条

contaminationfloat,范围 (0., 0.5),可选 (默认值=0.1)

数据集的污染程度,即数据集中异常值的比例。拟合时用于定义决策函数的阈值。

devicestr 或 None,可选 (默认值=None)

用于计算的设备。如果为 None,将使用默认设备。可能的值包括 ‘cpu’ 或 ‘gpu’。此参数允许用户指定运行模型的首选设备。

属性

decision_scores_形状为 (n_samples,) 的 numpy 数组

训练数据的异常值分数 [0,1]。分数越高表示越异常。异常值往往得分较高。此值在检测器拟合后可用。

threshold_float

阈值基于 contamination。它是 decision_scores_n_samples * contamination 个最异常样本的分数。计算此阈值是为了生成二元异常值标签。

labels_int,值为 0 或 1

训练数据的二元标签。0 表示正常值,1 表示异常值/异常。它是通过将 threshold_ 应用于 decision_scores_ 生成的。

compute_rejection_stats(T=32, delta=0.1, c_fp=1, c_fn=1, c_r=-1, verbose=False)
为无监督检测器添加拒绝选项。

这伴随着保证:预期拒绝率的估计值 (return_rejectrate=True),拒绝率的上限 (return_ub_rejectrate= True),以及成本的上限 (return_ub_cost=True)。

参数

T: int,可选 (默认值=32)

它允许将拒绝阈值设置为 1-2exp(-T)。T 的值越高,拒绝越多。

delta: float,可选 (默认值 = 0.1)

拒绝率上限以概率 1-delta 成立。

c_fp, c_fn, c_r: float (正值),

可选 (默认值 = [1,1, contamination]) 对应于误报预测 (c_fp)、漏报预测 (c_fn) 和拒绝 (c_r) 的成本。

verbose: bool,可选 (默认值 = False)

如果为 True,则打印预期拒绝率、拒绝率上限和成本上限。

返回值

expected_rejection_rate: float,预期拒绝率;upperbound_rejection_rate: float,拒绝率上限

概率 1-delta 满足;

upperbound_cost: float,成本上限;

decision_function(X)[source]

使用已拟合的检测器预测 X 的原始异常分数。输入样本的异常分数是根据不同的检测器算法计算的。为了一致性,异常值被赋予较大的异常分数。Parameters ———- X : numpy array of shape (n_samples, n_features)

训练输入样本。仅当基础估计器支持时,才接受稀疏矩阵。

返回值

anomaly_scores形状为 (n_samples,) 的 numpy 数组

输入样本的异常分数。

fit(X, y=None, noise_std=0.1)[source]

拟合检测器。y 在无监督方法中被忽略。Parameters ———- X : numpy array of shape (n_samples, n_features)

输入样本。

y已忽略

未使用,根据约定为了 API 一致性而存在。

返回值

self对象

已拟合的估计器。

fit_predict(X, y=None)

首先拟合检测器,然后预测特定样本是否为异常值。y 在无监督模型中被忽略。

参数

X形状为 (n_samples, n_features) 的 numpy 数组

输入样本。

y已忽略

未使用,根据约定为了 API 一致性而存在。

返回值

outlier_labels形状为 (n_samples,) 的 numpy 数组

对于每个观测值,根据已拟合的模型判断是否应将其视为异常值。0 表示正常值,1 表示异常值。

自 0.6.9 版本起已弃用: fit_predict 将在 pyod 0.8.0 中移除;为了保持一致性,将替换为先调用 fit 函数,然后访问 labels_ 属性。

fit_predict_score(X, y, scoring='roc_auc_score')

拟合检测器,对样本进行预测,并使用预定义指标(例如 ROC)评估模型。

参数

X形状为 (n_samples, n_features) 的 numpy 数组

输入样本。

y已忽略

未使用,根据约定为了 API 一致性而存在。

scoringstr,可选 (默认值=’roc_auc_score’)

评估指标

  • ‘roc_auc_score’: ROC 分数

  • ‘prc_n_score’: Precision @ rank n 分数

返回值

score : float

自 0.6.9 版本起已弃用: fit_predict_score 将在 pyod 0.8.0 中移除;为了保持一致性,将替换为先调用 fit 函数,然后访问 labels_ 属性。评分可以通过调用评估方法(例如 AUC ROC)来完成。

plot_learning_curves(start_ind=0, window_smoothening=10)[source]
predict(X, return_confidence=False)

预测特定样本是否为异常值。

参数

X形状为 (n_samples, n_features) 的 numpy 数组

输入样本。

return_confidenceboolean,可选 (默认值=False)

如果为 True,则同时返回预测的置信度。

返回值

outlier_labels形状为 (n_samples,) 的 numpy 数组

对于每个观测值,根据已拟合的模型判断是否应将其视为异常值。0 表示正常值,1 表示异常值。

confidence形状为 (n_samples,) 的 numpy 数组。

仅当 return_confidence 设置为 True 时返回。

predict_confidence(X)

预测模型在稍微不同的训练集下做出相同预测的置信度。详见[BPVD20]

参数

X形状为 (n_samples, n_features) 的 numpy 数组

输入样本。

返回值

confidence形状为 (n_samples,) 的 numpy 数组

对于每个观测值,表示如果在训练集受到扰动时模型会多么一致地做出相同的预测。返回一个概率,范围在 [0,1]。

predict_proba(X, method='linear', return_confidence=False)

预测样本为异常值的概率。有两种可能的方法

  1. 简单使用 Min-max 转换将异常值分数线性变换到 [0,1] 的范围。模型必须先拟合。

  2. 使用统一分数,详见[BKKSZ11]

参数

X形状为 (n_samples, n_features) 的 numpy 数组

输入样本。

methodstr,可选 (默认值=’linear’)

概率转换方法。必须是 ‘linear’ 或 ‘unify’ 之一。

return_confidenceboolean,可选 (默认值=False)

如果为 True,则同时返回预测的置信度。

返回值

outlier_probability形状为 (n_samples, n_classes) 的 numpy 数组

对于每个观测值,根据已拟合的模型判断是否应将其视为异常值。返回异常值概率,范围在 [0,1]。注意,这取决于类别数量,默认情况下为 2 个类别 ([正常概率, 异常概率])。

predict_with_rejection(X, T=32, return_stats=False, delta=0.1, c_fp=1, c_fn=1, c_r=-1)
预测特定样本是否为异常值,

允许检测器拒绝 (即输出 = -2) 低置信度的预测。

参数

X形状为 (n_samples, n_features) 的 numpy 数组

输入样本。

Tint,可选 (默认值=32)

它允许将拒绝阈值设置为 1-2exp(-T)。T 的值越高,拒绝越多。

return_stats: bool,可选 (默认值 = False)

如果为 True,则同时返回三个附加的浮点值:估计拒绝率、拒绝率上限和成本上限。

delta: float,可选 (默认值 = 0.1)

拒绝率上限以概率 1-delta 成立。

c_fp, c_fn, c_r: float (正值),可选 (默认值 = [1,1, contamination])

误报预测 (c_fp)、漏报预测 (c_fn) 和拒绝 (c_r) 的成本。

返回值

outlier_labels形状为 (n_samples,) 的 numpy 数组

对于每个观测值,根据已拟合的模型判断是否应将其视为异常值。0 表示正常值,1 表示异常值,-2 表示拒绝。

expected_rejection_rate: float,如果 return_stats 为 True;upperbound_rejection_rate: float,如果 return_stats 为 True;upperbound_cost: float,如果 return_stats 为 True;

pyod.models.anogan 模块

使用生成对抗网络进行异常检测 (AnoGAN) 论文: https://arxiv.org/pdf/1703.05921.pdf 注意,这是 AnoGAN 的另一种实现,与 https://github.com/fuchami/ANOGAN 中的不同。

class pyod.models.anogan.AnoGAN(activation_hidden='tanh', dropout_rate=0.2, latent_dim_G=2, G_layers=[20, 10, 3, 10, 20], verbose=0, D_layers=[20, 10, 5], index_D_layer_for_recon_error=1, epochs=500, preprocessing=False, learning_rate=0.001, learning_rate_query=0.01, epochs_query=20, batch_size=32, output_activation=None, contamination=0.1, device=None)[source]

基础类: BaseDetector

使用生成对抗网络进行异常检测 (AnoGAN)。详见原始论文“Unsupervised anomaly detection with generative adversarial networks to guide marker discovery”。

详见[BSSeebockW+17]

参数

output_activationstr 或 None,可选 (默认值=None)

输出层使用的激活函数。

activation_hiddenstr,可选 (默认值=’tanh’)

输出层使用的激活函数。

epochsint,可选 (默认值=500)

训练模型的轮数。

batch_sizeint,可选 (默认值=32)

每次梯度更新的样本数量。

dropout_ratefloat,范围 (0., 1),可选 (默认值=0.2)

所有层中使用的 Dropout。

G_layerslist,可选 (默认值=[20,10,3,10,20])

表示生成器每个隐藏层节点数量的列表。因此,[10,10] 表示 2 个隐藏层,每个层有 10 个节点。

D_layerslist,可选 (默认值=[20,10,5])

表示判别器每个隐藏层节点数量的列表。因此,[10,10] 表示 2 个隐藏层,每个层有 10 个节点。

learning_rate: float,范围 (0., 1),可选 (默认值=0.001)

训练网络的学习率

index_D_layer_for_recon_error: int,可选 (默认值 = 1)

这是判别器中用于确定查询样本与从潜在空间创建的样本之间重构误差的隐藏层索引。

learning_rate_query: float,范围 (0., 1),可选 (默认值=0.001)

用于查找生成器潜在空间中近似查询样本的点的反向传播步骤的学习率

epochs_query: int,可选 (默认值=20)

在生成器潜在空间中近似查询样本的轮数

preprocessingbool,可选 (默认值=True)

如果为 True,则对数据应用标准化。

verboseint,可选 (默认值=1)

详细模式。- 0 = 静默 - 1 = 进度条

contaminationfloat,范围 (0., 0.5),可选 (默认值=0.1)

数据集的污染程度,即数据集中异常值的比例。拟合时用于定义决策函数的阈值。

属性

decision_scores_形状为 (n_samples,) 的 numpy 数组

训练数据的异常值分数 [0,1]。分数越高表示越异常。异常值往往得分较高。此值在检测器拟合后可用。

threshold_float

阈值基于 contamination。它是 decision_scores_n_samples * contamination 个最异常样本的分数。计算此阈值是为了生成二元异常值标签。

labels_int,值为 0 或 1

训练数据的二元标签。0 表示正常值,1 表示异常值/异常。它是通过将 threshold_ 应用于 decision_scores_ 生成的。

compute_rejection_stats(T=32, delta=0.1, c_fp=1, c_fn=1, c_r=-1, verbose=False)
为无监督检测器添加拒绝选项。

这伴随着保证:预期拒绝率的估计值 (return_rejectrate=True),拒绝率的上限 (return_ub_rejectrate= True),以及成本的上限 (return_ub_cost=True)。

参数

T: int,可选 (默认值=32)

它允许将拒绝阈值设置为 1-2exp(-T)。T 的值越高,拒绝越多。

delta: float,可选 (默认值 = 0.1)

拒绝率上限以概率 1-delta 成立。

c_fp, c_fn, c_r: float (正值),

可选 (默认值 = [1,1, contamination]) 对应于误报预测 (c_fp)、漏报预测 (c_fn) 和拒绝 (c_r) 的成本。

verbose: bool,可选 (默认值 = False)

如果为 True,则打印预期拒绝率、拒绝率上限和成本上限。

返回值

expected_rejection_rate: float,预期拒绝率;upperbound_rejection_rate: float,拒绝率上限

概率 1-delta 满足;

upperbound_cost: float,成本上限;

decision_function(X)[source]

使用已拟合的检测器预测 X 的原始异常分数。

输入样本的异常分数是根据不同的检测器算法计算的。为了一致性,异常值被赋予较大的异常分数。

参数

X形状为 (n_samples, n_features) 的 numpy 数组

训练输入样本。仅当基础估计器支持时,才接受稀疏矩阵。

返回值

anomaly_scores形状为 (n_samples,) 的 numpy 数组

输入样本的异常分数。

fit(X, y=None)[source]

拟合检测器。y 在无监督方法中被忽略。

参数

X形状为 (n_samples, n_features) 的 numpy 数组

输入样本。

y已忽略

未使用,根据约定为了 API 一致性而存在。

返回值

self对象

已拟合的估计器。

fit_predict(X, y=None)

首先拟合检测器,然后预测特定样本是否为异常值。y 在无监督模型中被忽略。

参数

X形状为 (n_samples, n_features) 的 numpy 数组

输入样本。

y已忽略

未使用,根据约定为了 API 一致性而存在。

返回值

outlier_labels形状为 (n_samples,) 的 numpy 数组

对于每个观测值,根据已拟合的模型判断是否应将其视为异常值。0 表示正常值,1 表示异常值。

自 0.6.9 版本起已弃用: fit_predict 将在 pyod 0.8.0 中移除;为了保持一致性,将替换为先调用 fit 函数,然后访问 labels_ 属性。

fit_predict_score(X, y, scoring='roc_auc_score')

拟合检测器,对样本进行预测,并使用预定义指标(例如 ROC)评估模型。

参数

X形状为 (n_samples, n_features) 的 numpy 数组

输入样本。

y已忽略

未使用,根据约定为了 API 一致性而存在。

scoringstr,可选 (默认值=’roc_auc_score’)

评估指标

  • ‘roc_auc_score’: ROC 分数

  • ‘prc_n_score’: Precision @ rank n 分数

返回值

score : float

自 0.6.9 版本起已弃用: fit_predict_score 将在 pyod 0.8.0 中移除;为了保持一致性,将替换为先调用 fit 函数,然后访问 labels_ 属性。评分可以通过调用评估方法(例如 AUC ROC)来完成。

get_params(deep=True)

获取此估计器的参数。

详见 https://scikit-learn.cn/stable/modules/generated/sklearn.base.BaseEstimator.html 和 sklearn/base.py 获取更多信息。

参数

deepbool,可选 (默认值=True)

如果为 True,将返回此估计器以及其中包含的作为估计器的子对象的参数。

返回值

params从字符串到任意类型的映射

参数名称与其值的映射。

plot_learning_curves(start_ind=0, window_smoothening=10)[source]
predict(X, return_confidence=False)

预测特定样本是否为异常值。

参数

X形状为 (n_samples, n_features) 的 numpy 数组

输入样本。

return_confidenceboolean,可选 (默认值=False)

如果为 True,则同时返回预测的置信度。

返回值

outlier_labels形状为 (n_samples,) 的 numpy 数组

对于每个观测值,根据已拟合的模型判断是否应将其视为异常值。0 表示正常值,1 表示异常值。

confidence形状为 (n_samples,) 的 numpy 数组。

仅当 return_confidence 设置为 True 时返回。

predict_confidence(X)

预测模型在稍微不同的训练集下做出相同预测的置信度。详见[BPVD20]

参数

X形状为 (n_samples, n_features) 的 numpy 数组

输入样本。

返回值

confidence形状为 (n_samples,) 的 numpy 数组

对于每个观测值,表示如果在训练集受到扰动时模型会多么一致地做出相同的预测。返回一个概率,范围在 [0,1]。

predict_proba(X, method='linear', return_confidence=False)

预测样本为异常值的概率。有两种可能的方法

  1. 简单使用 Min-max 转换将异常值分数线性变换到 [0,1] 的范围。模型必须先拟合。

  2. 使用统一分数,详见[BKKSZ11]

参数

X形状为 (n_samples, n_features) 的 numpy 数组

输入样本。

methodstr,可选 (默认值=’linear’)

概率转换方法。必须是 ‘linear’ 或 ‘unify’ 之一。

return_confidenceboolean,可选 (默认值=False)

如果为 True,则同时返回预测的置信度。

返回值

outlier_probability形状为 (n_samples, n_classes) 的 numpy 数组

对于每个观测值,根据已拟合的模型判断是否应将其视为异常值。返回异常值概率,范围在 [0,1]。注意,这取决于类别数量,默认情况下为 2 个类别 ([正常概率, 异常概率])。

predict_with_rejection(X, T=32, return_stats=False, delta=0.1, c_fp=1, c_fn=1, c_r=-1)
预测特定样本是否为异常值,

允许检测器拒绝 (即输出 = -2) 低置信度的预测。

参数

X形状为 (n_samples, n_features) 的 numpy 数组

输入样本。

Tint,可选 (默认值=32)

它允许将拒绝阈值设置为 1-2exp(-T)。T 的值越高,拒绝越多。

return_stats: bool,可选 (默认值 = False)

如果为 True,则同时返回三个附加的浮点值:估计拒绝率、拒绝率上限和成本上限。

delta: float,可选 (默认值 = 0.1)

拒绝率上限以概率 1-delta 成立。

c_fp, c_fn, c_r: float (正值),可选 (默认值 = [1,1, contamination])

误报预测 (c_fp)、漏报预测 (c_fn) 和拒绝 (c_r) 的成本。

返回值

outlier_labels形状为 (n_samples,) 的 numpy 数组

对于每个观测值,根据已拟合的模型判断是否应将其视为异常值。0 表示正常值,1 表示异常值,-2 表示拒绝。

expected_rejection_rate: float,如果 return_stats 为 True;upperbound_rejection_rate: float,如果 return_stats 为 True;upperbound_cost: float,如果 return_stats 为 True;

set_params(**params)

设置此估计器的参数。此方法适用于简单估计器和嵌套对象(例如管道)。嵌套对象的参数形式为 <component>__<parameter>,以便可以更新嵌套对象的每个组件。

详见 https://scikit-learn.cn/stable/modules/generated/sklearn.base.BaseEstimator.html 和 sklearn/base.py 获取更多信息。

返回值

self : object

pyod.models.auto_encoder 模块

使用自编码器进行异常检测

class pyod.models.auto_encoder.AutoEncoder(contamination=0.1, preprocessing=True, lr=0.001, epoch_num=10, batch_size=32, optimizer_name='adam', device=None, random_state=42, use_compile=False, compile_mode='default', verbose=1, optimizer_params: dict = {'weight_decay': 1e-05}, hidden_neuron_list=[64, 32], hidden_activation_name='relu', batch_norm=True, dropout_rate=0.2)[source]

基础类: BaseDeepLearningDetector

自动编码器(AE)是一种用于无监督学习有用数据表示的神经网络。与 PCA 类似,AE 可以通过计算重构误差来检测数据中的异常对象。详见 [BAgg15] 第三章。

参数

contaminationfloat,范围 (0., 0.5),可选 (默认值=0.1)

数据集的污染程度,即数据集中异常值的比例。在拟合时用于定义决策函数的阈值。

preprocessingbool,可选 (默认值=True)

如果为 True,则在训练模型之前应用预处理过程。

lrfloat, 可选 (默认=1e-3)

优化器的初始学习率。

epoch_numint, 可选 (默认=10)

训练的周期(epoch)数量。

batch_sizeint,可选 (默认值=32)

训练的批次大小。

optimizer_namestr, 可选 (默认=’adam’)

用于训练模型的优化器名称。

devicestr, 可选 (默认=None)

用于模型的设备。如果为 None,则自动决定。如果想使用 MPS,请将其设置为 ‘mps’。

random_stateint, 可选 (默认=42)

用于重现结果的随机种子。

use_compilebool, 可选 (默认=False)

是否编译模型。如果为 True,则在训练前编译模型。此功能仅适用于 PyTorch 版本 >= 2.0.0 和 Python < 3.12。

compile_modestr, 可选 (默认=’default’)

编译模型时使用的模式。可以是“default”、“reduce-overhead”、“max-autotune”或“max-autotune-no-cudagraphs”之一。详见 https://pytorch.ac.cn/docs/stable/generated/torch.compile.html#torch-compile

verboseint,可选 (默认值=1)

详细程度模式。- 0 = 静默 - 1 = 进度条 - 2 = 每个周期(epoch)一行。

optimizer_paramsdict, 可选 (默认={‘weight_decay’: 1e-5})

优化器的附加参数。例如,optimizer_params={‘weight_decay’: 1e-5}

hidden_neuron_listlist, 可选 (默认=[64, 32])

每层隐藏层的神经元数量。因此网络结构为 [feature_size, 64, 32, 32, 64, feature_size]。

hidden_activation_namestr, 可选 (默认=’relu’)

隐藏层中使用的激活函数。

batch_normboolean, 可选 (默认=True)

是否应用 Batch Normalization。详见 https://pytorch.ac.cn/docs/stable/generated/torch.nn.BatchNorm1d.html

dropout_ratefloat,范围 (0., 1),可选 (默认值=0.2)

所有层中使用的 Dropout。

属性

modeltorch.nn.Module

底层的 AutoEncoder 模型。

optimizertorch.optim

用于训练模型的优化器。

criteriontorch.nn.modules

用于训练模型的损失函数。

decision_scores_形状为 (n_samples,) 的 numpy 数组

训练数据的异常值分数。分数越高表示越异常。异常值往往得分较高。此值在检测器拟合后可用。

threshold_float

阈值基于 contamination。它是 decision_scores_n_samples * contamination 个最异常样本的分数。计算此阈值是为了生成二元异常值标签。

labels_int, 0 或 1

训练数据的二元标签。0 表示正常值,1 表示异常值/异常。它是通过将 threshold_ 应用于 decision_scores_ 生成的。

build_model()[source]

需要在此方法中定义模型。self.feature_size 是输入数据中的特征数量。

compute_rejection_stats(T=32, delta=0.1, c_fp=1, c_fn=1, c_r=-1, verbose=False)
为无监督检测器添加拒绝选项。

这伴随着保证:预期拒绝率的估计值 (return_rejectrate=True),拒绝率的上限 (return_ub_rejectrate= True),以及成本的上限 (return_ub_cost=True)。

参数

T: int,可选 (默认值=32)

它允许将拒绝阈值设置为 1-2exp(-T)。T 的值越高,拒绝越多。

delta: float,可选 (默认值 = 0.1)

拒绝率上限以概率 1-delta 成立。

c_fp, c_fn, c_r: float (正值),

可选 (默认值 = [1,1, contamination]) 对应于误报预测 (c_fp)、漏报预测 (c_fn) 和拒绝 (c_r) 的成本。

verbose: bool,可选 (默认值 = False)

如果为 True,则打印预期拒绝率、拒绝率上限和成本上限。

返回值

expected_rejection_rate: float,预期拒绝率;upperbound_rejection_rate: float,拒绝率上限

概率 1-delta 满足;

upperbound_cost: float,成本上限;

decision_function(X, batch_size=None)

使用已拟合的检测器预测 X 的原始异常分数。

输入样本的异常分数是基于不同的检测器算法计算的。为了保持一致性,异常值被赋予更高的异常分数。参数 ———- X:形状为 (n_samples, n_features) 的 numpy 数组

训练输入样本。仅当基础估计器支持时,才接受稀疏矩阵。

batch_sizeint, 可选 (默认=None)

处理输入样本的批次大小。如果未指定,则使用默认批次大小。

返回值

anomaly_scores形状为 (n_samples,) 的 numpy 数组

输入样本的异常分数。

evaluate(data_loader)

评估深度学习模型。

参数

data_loadertorch.utils.data.DataLoader

用于评估模型的数据加载器。

返回值

outlier_scores形状为 (n_samples,) 的 numpy 数组

输入样本的异常值分数。

fit(X, y=None)

拟合检测器。y 在无监督方法中被忽略。

参数

X形状为 (n_samples, n_features) 的 numpy 数组

输入样本。

y形状为 (n_samples,) 的 numpy 数组, 可选 (默认=None)

输入样本的真实标签。在无监督方法中不使用。

fit_predict(X, y=None)

首先拟合检测器,然后预测特定样本是否为异常值。y 在无监督模型中被忽略。

参数

X形状为 (n_samples, n_features) 的 numpy 数组

输入样本。

y已忽略

未使用,根据约定为了 API 一致性而存在。

返回值

outlier_labels形状为 (n_samples,) 的 numpy 数组

对于每个观测值,根据已拟合的模型判断是否应将其视为异常值。0 表示正常值,1 表示异常值。

自 0.6.9 版本起已弃用: fit_predict 将在 pyod 0.8.0 中移除;为了保持一致性,将替换为先调用 fit 函数,然后访问 labels_ 属性。

fit_predict_score(X, y, scoring='roc_auc_score')

拟合检测器,对样本进行预测,并使用预定义指标(例如 ROC)评估模型。

参数

X形状为 (n_samples, n_features) 的 numpy 数组

输入样本。

y已忽略

未使用,根据约定为了 API 一致性而存在。

scoringstr,可选 (默认值=’roc_auc_score’)

评估指标

  • ‘roc_auc_score’: ROC 分数

  • ‘prc_n_score’: Precision @ rank n 分数

返回值

score : float

自 0.6.9 版本起已弃用: fit_predict_score 将在 pyod 0.8.0 中移除;为了保持一致性,将替换为先调用 fit 函数,然后访问 labels_ 属性。评分可以通过调用评估方法(例如 AUC ROC)来完成。

predict(X, return_confidence=False)

预测特定样本是否为异常值。

参数

X形状为 (n_samples, n_features) 的 numpy 数组

输入样本。

return_confidenceboolean,可选 (默认值=False)

如果为 True,则同时返回预测的置信度。

返回值

outlier_labels形状为 (n_samples,) 的 numpy 数组

对于每个观测值,根据已拟合的模型判断是否应将其视为异常值。0 表示正常值,1 表示异常值。

confidence形状为 (n_samples,) 的 numpy 数组。

仅当 return_confidence 设置为 True 时返回。

predict_confidence(X)

预测模型在稍微不同的训练集下做出相同预测的置信度。详见 [BPVD20]

参数

X形状为 (n_samples, n_features) 的 numpy 数组

输入样本。

返回值

confidence形状为 (n_samples,) 的 numpy 数组

对于每个观测值,表示如果在训练集受到扰动时模型会多么一致地做出相同的预测。返回一个概率,范围在 [0,1]。

predict_proba(X, method='linear', return_confidence=False)

预测样本为异常值的概率。有两种可能的方法

  1. 简单使用 Min-max 转换将异常值分数线性变换到 [0,1] 的范围。模型必须先拟合。

  2. 使用统一分数,详见 [BKKSZ11]

参数

X形状为 (n_samples, n_features) 的 numpy 数组

输入样本。

methodstr,可选 (默认值=’linear’)

概率转换方法。必须是 ‘linear’ 或 ‘unify’ 之一。

return_confidenceboolean,可选 (默认值=False)

如果为 True,则同时返回预测的置信度。

返回值

outlier_probability形状为 (n_samples, n_classes) 的 numpy 数组

对于每个观测值,根据已拟合的模型判断是否应将其视为异常值。返回异常值概率,范围在 [0,1]。注意,这取决于类别数量,默认情况下为 2 个类别 ([正常概率, 异常概率])。

predict_with_rejection(X, T=32, return_stats=False, delta=0.1, c_fp=1, c_fn=1, c_r=-1)
预测特定样本是否为异常值,

允许检测器拒绝 (即输出 = -2) 低置信度的预测。

参数

X形状为 (n_samples, n_features) 的 numpy 数组

输入样本。

Tint,可选 (默认值=32)

它允许将拒绝阈值设置为 1-2exp(-T)。T 的值越高,拒绝越多。

return_stats: bool,可选 (默认值 = False)

如果为 True,则同时返回三个附加的浮点值:估计拒绝率、拒绝率上限和成本上限。

delta: float,可选 (默认值 = 0.1)

拒绝率上限以概率 1-delta 成立。

c_fp, c_fn, c_r: float (正值),可选 (默认值 = [1,1, contamination])

误报预测 (c_fp)、漏报预测 (c_fn) 和拒绝 (c_r) 的成本。

返回值

outlier_labels形状为 (n_samples,) 的 numpy 数组

对于每个观测值,根据已拟合的模型判断是否应将其视为异常值。0 表示正常值,1 表示异常值,-2 表示拒绝。

expected_rejection_rate: float,如果 return_stats 为 True;upperbound_rejection_rate: float,如果 return_stats 为 True;upperbound_cost: float,如果 return_stats 为 True;

save(path)

将模型保存到指定路径。

参数

pathstr

保存模型的路径。

train(train_loader)

训练深度学习模型。

参数

train_loadertorch.utils.data.DataLoader

用于训练模型的数据加载器。

training_forward(batch_data)[source]

模型训练的前向传播。需要实现抽象方法。

参数

batch_datatuple

用于训练模型的批次数据。

返回值

lossfloat 或 float 元组

模型的 loss.item,如果存在多个损失,则为 loss.item 元组。

training_prepare()

pyod.models.auto_encoder_torch 模块

pyod.models.cblof 模块

基于聚类的局部异常因子 (CBLOF)

class pyod.models.cblof.CBLOF(n_clusters=8, contamination=0.1, clustering_estimator=None, alpha=0.9, beta=5, use_weights=False, check_estimator=False, random_state=None, n_jobs=1)[source]

基础类: BaseDetector

CBLOF 算子根据基于聚类的局部异常因子计算异常值分数。

CBLOF 输入数据集和由聚类算法生成的聚类模型。它使用参数 alpha 和 beta 将簇分为小簇和大簇。然后根据点所属簇的大小以及到最近的大簇的距离来计算异常分数。

根据原始论文的建议,使用簇的大小对异常因子进行加权。由于这可能导致意外行为(找不到靠近小簇的异常值),默认情况下此功能被禁用。异常值分数仅根据它们到最近的大簇中心的距离计算。

默认情况下,出于多种原因,聚类算法使用 kMeans 而不是原始论文中提到的 Squeezer 算法。

详见 [BHXD03]

参数

n_clustersint, 可选 (默认=8)

要形成的簇的数量以及要生成的质心的数量。

contaminationfloat,范围 (0., 0.5),可选 (默认值=0.1)

数据集的污染程度,即数据集中异常值的比例。在拟合时用于定义决策函数的阈值。

clustering_estimatorEstimator, 可选 (默认=None)

用于执行数据聚类的基础聚类算法。应传入一个有效的聚类算法。估计器应具有标准的 sklearn API,fit() 和 predict()。估计器应具有属性 labels_cluster_centers_。如果在拟合模型后 cluster_centers_ 不在属性中,则将其计算为簇中样本的均值。

如果未设置,CBLOF 为可扩展性使用 KMeans。详见 https://scikit-learn.cn/stable/modules/generated/sklearn.cluster.KMeans.html

alphafloat 在 (0.5, 1) 范围内, 可选 (默认=0.9)

用于决定小簇和大簇的系数。大簇中样本数量与小簇中样本数量的比率。

betaint 或 float 在 (1,) 范围内, 可选 (默认=5)。

用于决定小簇和大簇的系数。对于按大小排序的簇列表 |C1|, |C2|, …, |Cn|, beta = |Ck|/|Ck-1|

use_weightsbool, 可选 (默认=False)

如果设置为 True,则簇的大小被用作计算异常值分数的权重。

check_estimatorbool, 可选 (默认=False)

如果设置为 True,检查基础估计器是否符合 sklearn 标准。

警告

check_estimator 在 scikit-learn 0.20 版本以上可能会引发错误。

random_stateint, RandomState 或 None, 可选 (默认=None)

如果是 int,random_state 是随机数生成器使用的种子;如果是 RandomState 实例,random_state 是随机数生成器;如果是 None,随机数生成器是 np.random 使用的 RandomState 实例。

属性

clustering_estimator_Estimator, sklearn 实例

用于聚类的基础估计器。

cluster_labels_形状为 (n_samples,) 的列表

训练样本的聚类分配。

n_clusters_int

实际的簇数量(可能与 n_clusters 不同)。

cluster_sizes_形状为 (n_clusters_,) 的列表

使用训练数据拟合后每个簇的大小。

decision_scores_形状为 (n_samples,) 的 numpy 数组

训练数据的异常值分数。分数越高表示越异常。异常值往往得分较高。此值在检测器拟合后可用。

cluster_centers_形状为 (n_clusters_, n_features) 的 numpy 数组

每个簇的中心。

small_cluster_labels_小簇对应的簇编号列表

属于小簇的簇分配。

large_cluster_labels_大簇对应的簇编号列表

属于大簇的簇分配。

threshold_float

阈值基于 contamination。它是 decision_scores_n_samples * contamination 个最异常样本的分数。计算此阈值是为了生成二元异常值标签。

labels_int, 0 或 1

训练数据的二元标签。0 表示正常值,1 表示异常值/异常。它是通过将 threshold_ 应用于 decision_scores_ 生成的。

compute_rejection_stats(T=32, delta=0.1, c_fp=1, c_fn=1, c_r=-1, verbose=False)
为无监督检测器添加拒绝选项。

这伴随着保证:预期拒绝率的估计值 (return_rejectrate=True),拒绝率的上限 (return_ub_rejectrate= True),以及成本的上限 (return_ub_cost=True)。

参数

T: int,可选 (默认值=32)

它允许将拒绝阈值设置为 1-2exp(-T)。T 的值越高,拒绝越多。

delta: float,可选 (默认值 = 0.1)

拒绝率上限以概率 1-delta 成立。

c_fp, c_fn, c_r: float (正值),

可选 (默认值 = [1,1, contamination]) 对应于误报预测 (c_fp)、漏报预测 (c_fn) 和拒绝 (c_r) 的成本。

verbose: bool,可选 (默认值 = False)

如果为 True,则打印预期拒绝率、拒绝率上限和成本上限。

返回值

expected_rejection_rate: float,预期拒绝率;upperbound_rejection_rate: float,拒绝率上限

概率 1-delta 满足;

upperbound_cost: float,成本上限;

decision_function(X)[source]

使用已拟合的检测器预测 X 的原始异常分数。

输入样本的异常分数是根据不同的检测器算法计算的。为了一致性,异常值被赋予较大的异常分数。

参数

X形状为 (n_samples, n_features) 的 numpy 数组

训练输入样本。仅当基础估计器支持时,才接受稀疏矩阵。

返回值

anomaly_scores形状为 (n_samples,) 的 numpy 数组

输入样本的异常分数。

fit(X, y=None)[source]

拟合检测器。y 在无监督方法中被忽略。

参数

X形状为 (n_samples, n_features) 的 numpy 数组

输入样本。

y已忽略

未使用,根据约定为了 API 一致性而存在。

返回值

self对象

已拟合的估计器。

fit_predict(X, y=None)

首先拟合检测器,然后预测特定样本是否为异常值。y 在无监督模型中被忽略。

参数

X形状为 (n_samples, n_features) 的 numpy 数组

输入样本。

y已忽略

未使用,根据约定为了 API 一致性而存在。

返回值

outlier_labels形状为 (n_samples,) 的 numpy 数组

对于每个观测值,根据已拟合的模型判断是否应将其视为异常值。0 表示正常值,1 表示异常值。

自 0.6.9 版本起已弃用: fit_predict 将在 pyod 0.8.0 中移除;为了保持一致性,将替换为先调用 fit 函数,然后访问 labels_ 属性。

fit_predict_score(X, y, scoring='roc_auc_score')

拟合检测器,对样本进行预测,并使用预定义指标(例如 ROC)评估模型。

参数

X形状为 (n_samples, n_features) 的 numpy 数组

输入样本。

y已忽略

未使用,根据约定为了 API 一致性而存在。

scoringstr,可选 (默认值=’roc_auc_score’)

评估指标

  • ‘roc_auc_score’: ROC 分数

  • ‘prc_n_score’: Precision @ rank n 分数

返回值

score : float

自 0.6.9 版本起已弃用: fit_predict_score 将在 pyod 0.8.0 中移除;为了保持一致性,将替换为先调用 fit 函数,然后访问 labels_ 属性。评分可以通过调用评估方法(例如 AUC ROC)来完成。

predict(X, return_confidence=False)

预测特定样本是否为异常值。

参数

X形状为 (n_samples, n_features) 的 numpy 数组

输入样本。

return_confidenceboolean,可选 (默认值=False)

如果为 True,则同时返回预测的置信度。

返回值

outlier_labels形状为 (n_samples,) 的 numpy 数组

对于每个观测值,根据已拟合的模型判断是否应将其视为异常值。0 表示正常值,1 表示异常值。

confidence形状为 (n_samples,) 的 numpy 数组。

仅当 return_confidence 设置为 True 时返回。

predict_confidence(X)

预测模型在稍微不同的训练集下做出相同预测的置信度。详见 [BPVD20]

参数

X形状为 (n_samples, n_features) 的 numpy 数组

输入样本。

返回值

confidence形状为 (n_samples,) 的 numpy 数组

对于每个观测值,表示如果在训练集受到扰动时模型会多么一致地做出相同的预测。返回一个概率,范围在 [0,1]。

predict_proba(X, method='linear', return_confidence=False)

预测样本为异常值的概率。有两种可能的方法

  1. 简单使用 Min-max 转换将异常值分数线性变换到 [0,1] 的范围。模型必须先拟合。

  2. 使用统一分数,详见 [BKKSZ11]

参数

X形状为 (n_samples, n_features) 的 numpy 数组

输入样本。

methodstr,可选 (默认值=’linear’)

概率转换方法。必须是 ‘linear’ 或 ‘unify’ 之一。

return_confidenceboolean,可选 (默认值=False)

如果为 True,则同时返回预测的置信度。

返回值

outlier_probability形状为 (n_samples, n_classes) 的 numpy 数组

对于每个观测值,根据已拟合的模型判断是否应将其视为异常值。返回异常值概率,范围在 [0,1]。注意,这取决于类别数量,默认情况下为 2 个类别 ([正常概率, 异常概率])。

predict_with_rejection(X, T=32, return_stats=False, delta=0.1, c_fp=1, c_fn=1, c_r=-1)
预测特定样本是否为异常值,

允许检测器拒绝 (即输出 = -2) 低置信度的预测。

参数

X形状为 (n_samples, n_features) 的 numpy 数组

输入样本。

Tint,可选 (默认值=32)

它允许将拒绝阈值设置为 1-2exp(-T)。T 的值越高,拒绝越多。

return_stats: bool,可选 (默认值 = False)

如果为 True,则同时返回三个附加的浮点值:估计拒绝率、拒绝率上限和成本上限。

delta: float,可选 (默认值 = 0.1)

拒绝率上限以概率 1-delta 成立。

c_fp, c_fn, c_r: float (正值),可选 (默认值 = [1,1, contamination])

误报预测 (c_fp)、漏报预测 (c_fn) 和拒绝 (c_r) 的成本。

返回值

outlier_labels形状为 (n_samples,) 的 numpy 数组

对于每个观测值,根据已拟合的模型判断是否应将其视为异常值。0 表示正常值,1 表示异常值,-2 表示拒绝。

expected_rejection_rate: float,如果 return_stats 为 True;upperbound_rejection_rate: float,如果 return_stats 为 True;upperbound_cost: float,如果 return_stats 为 True;

pyod.models.cof 模块

基于连通性的异常因子 (COF) 算法

class pyod.models.cof.COF(contamination=0.1, n_neighbors=20, method='fast')[source]

基础类: BaseDetector

基于连通性的异常因子 (COF) COF 使用数据点的平均链接距离与数据点的 k 个最近邻的平均链接距离的平均值之比,作为观测值的异常分数。

详见 [BTCFC02]

支持两种版本的 COF

  • 快速 COF:计算整个成对距离矩阵,代价是 O(n^2) 的内存需求。

  • 内存高效 COF:增量计算成对距离。当无法在内存中存储 n-by-n 距离时使用此实现。这会导致线性开销,因为许多距离必须重新计算。

参数

contaminationfloat,范围 (0., 0.5),可选 (默认值=0.1)

数据集的污染程度,即数据集中异常值的比例。在拟合时用于定义决策函数的阈值。

n_neighborsint, 可选 (默认=20)

k 近邻查询中默认使用的邻居数量。注意 n_neighbors 应小于样本数量。如果 n_neighbors 大于提供的样本数量,将使用所有样本。

methodstring, 可选 (默认=’fast’)

method 的有效值为

  • ‘fast’ 快速 COF,预先计算完整的成对距离矩阵。

  • ‘memory’ 内存高效 COF,仅在需要时计算成对距离,代价是计算速度较低。

属性

decision_scores_形状为 (n_samples,) 的 numpy 数组

训练数据的异常值分数。分数越高表示越异常。异常值往往得分较高。此值在检测器拟合后可用。

threshold_float

阈值基于 contamination。它是 decision_scores_n_samples * contamination 个最异常样本的分数。计算此阈值是为了生成二元异常值标签。

labels_int, 0 或 1

训练数据的二元标签。0 表示正常值,1 表示异常值/异常。它是通过将 threshold_ 应用于 decision_scores_ 生成的。

n_neighbors_: int

默认用于 k 近邻查询的邻居数量。

compute_rejection_stats(T=32, delta=0.1, c_fp=1, c_fn=1, c_r=-1, verbose=False)
为无监督检测器添加拒绝选项。

这伴随着保证:预期拒绝率的估计值 (return_rejectrate=True),拒绝率的上限 (return_ub_rejectrate= True),以及成本的上限 (return_ub_cost=True)。

参数

T: int,可选 (默认值=32)

它允许将拒绝阈值设置为 1-2exp(-T)。T 的值越高,拒绝越多。

delta: float,可选 (默认值 = 0.1)

拒绝率上限以概率 1-delta 成立。

c_fp, c_fn, c_r: float (正值),

可选 (默认值 = [1,1, contamination]) 对应于误报预测 (c_fp)、漏报预测 (c_fn) 和拒绝 (c_r) 的成本。

verbose: bool,可选 (默认值 = False)

如果为 True,则打印预期拒绝率、拒绝率上限和成本上限。

返回值

expected_rejection_rate: float,预期拒绝率;upperbound_rejection_rate: float,拒绝率上限

概率 1-delta 满足;

upperbound_cost: float,成本上限;

decision_function(X)[source]

使用拟合的检测器预测 X 的原始异常分数。输入样本的异常分数是基于不同的检测器算法计算的。为了保持一致性,异常值被赋予更高的异常分数。

参数

X形状为 (n_samples, n_features) 的 numpy 数组

训练输入样本。仅当基础估计器支持时,才接受稀疏矩阵。

返回值

anomaly_scores形状为 (n_samples,) 的 numpy 数组

输入样本的异常分数。

fit(X, y=None)[source]

拟合检测器。y 在无监督方法中被忽略。

参数

X形状为 (n_samples, n_features) 的 numpy 数组

输入样本。

y已忽略

未使用,根据约定为了 API 一致性而存在。

返回值

self对象

已拟合的估计器。

fit_predict(X, y=None)

首先拟合检测器,然后预测特定样本是否为异常值。y 在无监督模型中被忽略。

参数

X形状为 (n_samples, n_features) 的 numpy 数组

输入样本。

y已忽略

未使用,根据约定为了 API 一致性而存在。

返回值

outlier_labels形状为 (n_samples,) 的 numpy 数组

对于每个观测值,根据已拟合的模型判断是否应将其视为异常值。0 表示正常值,1 表示异常值。

自 0.6.9 版本起已弃用: fit_predict 将在 pyod 0.8.0 中移除;为了保持一致性,将替换为先调用 fit 函数,然后访问 labels_ 属性。

fit_predict_score(X, y, scoring='roc_auc_score')

拟合检测器,对样本进行预测,并使用预定义指标(例如 ROC)评估模型。

参数

X形状为 (n_samples, n_features) 的 numpy 数组

输入样本。

y已忽略

未使用,根据约定为了 API 一致性而存在。

scoringstr,可选 (默认值=’roc_auc_score’)

评估指标

  • ‘roc_auc_score’: ROC 分数

  • ‘prc_n_score’: Precision @ rank n 分数

返回值

score : float

自 0.6.9 版本起已弃用: fit_predict_score 将在 pyod 0.8.0 中移除;为了保持一致性,将替换为先调用 fit 函数,然后访问 labels_ 属性。评分可以通过调用评估方法(例如 AUC ROC)来完成。

predict(X, return_confidence=False)

预测特定样本是否为异常值。

参数

X形状为 (n_samples, n_features) 的 numpy 数组

输入样本。

return_confidenceboolean,可选 (默认值=False)

如果为 True,则同时返回预测的置信度。

返回值

outlier_labels形状为 (n_samples,) 的 numpy 数组

对于每个观测值,根据已拟合的模型判断是否应将其视为异常值。0 表示正常值,1 表示异常值。

confidence形状为 (n_samples,) 的 numpy 数组。

仅当 return_confidence 设置为 True 时返回。

predict_confidence(X)

预测模型在稍微不同的训练集下做出相同预测的置信度。详见 [BPVD20]

参数

X形状为 (n_samples, n_features) 的 numpy 数组

输入样本。

返回值

confidence形状为 (n_samples,) 的 numpy 数组

对于每个观测值,表示如果在训练集受到扰动时模型会多么一致地做出相同的预测。返回一个概率,范围在 [0,1]。

predict_proba(X, method='linear', return_confidence=False)

预测样本为异常值的概率。有两种可能的方法

  1. 简单使用 Min-max 转换将异常值分数线性变换到 [0,1] 的范围。模型必须先拟合。

  2. 使用统一分数,详见 [BKKSZ11]

参数

X形状为 (n_samples, n_features) 的 numpy 数组

输入样本。

methodstr,可选 (默认值=’linear’)

概率转换方法。必须是 ‘linear’ 或 ‘unify’ 之一。

return_confidenceboolean,可选 (默认值=False)

如果为 True,则同时返回预测的置信度。

返回值

outlier_probability形状为 (n_samples, n_classes) 的 numpy 数组

对于每个观测值,根据已拟合的模型判断是否应将其视为异常值。返回异常值概率,范围在 [0,1]。注意,这取决于类别数量,默认情况下为 2 个类别 ([正常概率, 异常概率])。

predict_with_rejection(X, T=32, return_stats=False, delta=0.1, c_fp=1, c_fn=1, c_r=-1)
预测特定样本是否为异常值,

允许检测器拒绝 (即输出 = -2) 低置信度的预测。

参数

X形状为 (n_samples, n_features) 的 numpy 数组

输入样本。

Tint,可选 (默认值=32)

它允许将拒绝阈值设置为 1-2exp(-T)。T 的值越高,拒绝越多。

return_stats: bool,可选 (默认值 = False)

如果为 True,则同时返回三个附加的浮点值:估计拒绝率、拒绝率上限和成本上限。

delta: float,可选 (默认值 = 0.1)

拒绝率上限以概率 1-delta 成立。

c_fp, c_fn, c_r: float (正值),可选 (默认值 = [1,1, contamination])

误报预测 (c_fp)、漏报预测 (c_fn) 和拒绝 (c_r) 的成本。

返回值

outlier_labels形状为 (n_samples,) 的 numpy 数组

对于每个观测值,根据已拟合的模型判断是否应将其视为异常值。0 表示正常值,1 表示异常值,-2 表示拒绝。

expected_rejection_rate: float,如果 return_stats 为 True;upperbound_rejection_rate: float,如果 return_stats 为 True;upperbound_cost: float,如果 return_stats 为 True;

pyod.models.combination 模块

模型组合功能的集合。

pyod.models.combination.aom(scores, n_buckets=5, method='static', bootstrap_estimators=False, random_state=None)[source]

最大值平均 (Average of Maximum) - 一种组合多个估计器的集成方法。详见 [BAS15]

首先将估计器分组,取最大分数作为小组分数。最后,取所有小组异常分数的平均值。

参数

scores形状为 (n_samples, n_estimators) 的 numpy 数组

来自各种估计器的分数矩阵

n_bucketsint, 可选 (默认=5)

要构建的小组数量

methodstr, 可选 (默认=’static’)

{‘static’, ‘dynamic’},如果为 ‘dynamic’,则使用动态桶大小随机构建小组。

bootstrap_estimatorsbool, 可选 (默认=False)

是否带放回地抽取估计器。

random_stateint, RandomState 实例或 None, 可选 (默认=None)

如果是 int,random_state 是随机数生成器使用的种子;如果是 RandomState 实例,random_state 是随机数生成器;如果是 None,随机数生成器是 np.random 使用的 RandomState 实例。

返回值

combined_scores形状为 (n_samples,) 的 Numpy 数组

组合后的异常值分数。

pyod.models.combination.average(scores, estimator_weights=None)[source]

通过取平均值合并来自多个估计器的异常分数的组合方法。

参数

scores形状为 (n_samples, n_estimators) 的 numpy 数组

来自多个估计器在相同样本上的分数矩阵。

estimator_weights形状为 (1, n_estimators) 的列表

如果指定,使用加权平均。

返回值

combined_scores形状为 (n_samples, ) 的 numpy 数组

组合后的异常值分数。

pyod.models.combination.majority_vote(scores, weights=None)[source]

通过多数投票合并来自多个估计器分数的组合方法。

参数

scores形状为 (n_samples, n_estimators) 的 numpy 数组

来自多个估计器在相同样本上的分数矩阵。

weights形状为 (1, n_estimators) 的 numpy 数组

如果指定,使用加权多数投票。

返回值

combined_scores形状为 (n_samples, ) 的 numpy 数组

组合后的分数。

pyod.models.combination.maximization(scores)[source]

通过取最大值合并来自多个估计器的异常分数的组合方法。

参数

scores形状为 (n_samples, n_estimators) 的 numpy 数组

来自多个估计器在相同样本上的分数矩阵。

返回值

combined_scores形状为 (n_samples, ) 的 numpy 数组

组合后的异常值分数。

pyod.models.combination.median(scores)[source]

通过取中位数合并来自多个估计器分数的组合方法。

参数

scores形状为 (n_samples, n_estimators) 的 numpy 数组

来自多个估计器在相同样本上的分数矩阵。

返回值

combined_scores形状为 (n_samples, ) 的 numpy 数组

组合后的分数。

pyod.models.combination.moa(scores, n_buckets=5, method='static', bootstrap_estimators=False, random_state=None)[source]

平均值最大化 (Maximization of Average) - 一种组合多个估计器的集成方法。详见 [BAS15]

首先将估计器分组,取平均分数作为小组分数。最后,取所有小组异常分数的最大值。

参数

scores形状为 (n_samples, n_estimators) 的 numpy 数组

来自各种估计器的分数矩阵

n_bucketsint, 可选 (默认=5)

要构建的小组数量

methodstr, 可选 (默认=’static’)

{‘static’, ‘dynamic’},如果为 ‘dynamic’,则使用动态桶大小随机构建小组。

bootstrap_estimatorsbool, 可选 (默认=False)

是否带放回地抽取估计器。

random_stateint, RandomState 实例或 None, 可选 (默认=None)

如果是 int,random_state 是随机数生成器使用的种子;如果是 RandomState 实例,random_state 是随机数生成器;如果是 None,随机数生成器是 np.random 使用的 RandomState 实例。

返回值

combined_scores形状为 (n_samples,) 的 Numpy 数组

组合后的异常值分数。

pyod.models.cd 模块

Cook's Distance 异常值检测 (CD)

class pyod.models.cd.CD(contamination=0.1, model=LinearRegression())[source]

基础类: BaseDetector

Cook's Distance 可用于识别对回归模型产生负面影响的点。

测量中使用每个观测值的杠杆值和残差值的组合。较高的杠杆值和残差值与较高的 Cook's Distance 相关。请注意,此方法是无监督的,并且需要至少两个特征(用于 X)来计算每个数据点的平均 Cook's Distance。详见 [BCoo77]

参数

contaminationfloat,范围 (0., 0.5),可选 (默认值=0.1)

数据集的污染程度,即数据集中异常值的比例。在拟合时用于定义决策函数的阈值。

modelobject, 可选 (默认=LinearRegression())

用于计算 Cook's Distance 的回归模型。

属性

decision_scores_形状为 (n_samples,) 的 numpy 数组

训练数据的异常值分数。分数越高表示越异常。异常值往往得分较高。此值在检测器拟合后可用。

threshold_float

用作阈值的修正 z 分数。修正 z 分数(基于中位数绝对偏差)大于此值的观测值将被归类为异常值。

labels_int, 0 或 1

训练数据的二元标签。0 表示正常值,1 表示异常值/异常。它是通过将 threshold_ 应用于 decision_scores_ 生成的。

compute_rejection_stats(T=32, delta=0.1, c_fp=1, c_fn=1, c_r=-1, verbose=False)
为无监督检测器添加拒绝选项。

这伴随着保证:预期拒绝率的估计值 (return_rejectrate=True),拒绝率的上限 (return_ub_rejectrate= True),以及成本的上限 (return_ub_cost=True)。

参数

T: int,可选 (默认值=32)

它允许将拒绝阈值设置为 1-2exp(-T)。T 的值越高,拒绝越多。

delta: float,可选 (默认值 = 0.1)

拒绝率上限以概率 1-delta 成立。

c_fp, c_fn, c_r: float (正值),

可选 (默认值 = [1,1, contamination]) 对应于误报预测 (c_fp)、漏报预测 (c_fn) 和拒绝 (c_r) 的成本。

verbose: bool,可选 (默认值 = False)

如果为 True,则打印预期拒绝率、拒绝率上限和成本上限。

返回值

expected_rejection_rate: float,预期拒绝率;upperbound_rejection_rate: float,拒绝率上限

概率 1-delta 满足;

upperbound_cost: float,成本上限;

decision_function(X)[source]

使用拟合的检测器预测 X 的原始异常分数。为了保持一致性,异常值被赋予更高的异常分数。

参数

X形状为 (n_samples, n_features) 的 numpy 数组

训练输入样本。仅当基础估计器支持时,才接受稀疏矩阵。

返回值

anomaly_scores形状为 (n_samples,) 的 numpy 数组

输入样本的异常分数。

fit(X, y=None)[source]

拟合检测器。无监督方法中忽略 y。

参数

X形状为 (n_samples, n_features) 的 numpy 数组

输入样本。

y已忽略

未使用,根据约定为了 API 一致性而存在。

返回值

self对象

已拟合的估计器。

fit_predict(X, y=None)

首先拟合检测器,然后预测特定样本是否为异常值。y 在无监督模型中被忽略。

参数

X形状为 (n_samples, n_features) 的 numpy 数组

输入样本。

y已忽略

未使用,根据约定为了 API 一致性而存在。

返回值

outlier_labels形状为 (n_samples,) 的 numpy 数组

对于每个观测值,根据已拟合的模型判断是否应将其视为异常值。0 表示正常值,1 表示异常值。

自 0.6.9 版本起已弃用: fit_predict 将在 pyod 0.8.0 中移除;为了保持一致性,将替换为先调用 fit 函数,然后访问 labels_ 属性。

fit_predict_score(X, y, scoring='roc_auc_score')

拟合检测器,对样本进行预测,并使用预定义指标(例如 ROC)评估模型。

参数

X形状为 (n_samples, n_features) 的 numpy 数组

输入样本。

y已忽略

未使用,根据约定为了 API 一致性而存在。

scoringstr,可选 (默认值=’roc_auc_score’)

评估指标

  • ‘roc_auc_score’: ROC 分数

  • ‘prc_n_score’: Precision @ rank n 分数

返回值

score : float

自 0.6.9 版本起已弃用: fit_predict_score 将在 pyod 0.8.0 中移除;为了保持一致性,将替换为先调用 fit 函数,然后访问 labels_ 属性。评分可以通过调用评估方法(例如 AUC ROC)来完成。

predict(X, return_confidence=False)

预测特定样本是否为异常值。

参数

X形状为 (n_samples, n_features) 的 numpy 数组

输入样本。

return_confidenceboolean,可选 (默认值=False)

如果为 True,则同时返回预测的置信度。

返回值

outlier_labels形状为 (n_samples,) 的 numpy 数组

对于每个观测值,根据已拟合的模型判断是否应将其视为异常值。0 表示正常值,1 表示异常值。

confidence形状为 (n_samples,) 的 numpy 数组。

仅当 return_confidence 设置为 True 时返回。

predict_confidence(X)

预测模型在稍微不同的训练集下做出相同预测的置信度。详见 [BPVD20]

参数

X形状为 (n_samples, n_features) 的 numpy 数组

输入样本。

返回值

confidence形状为 (n_samples,) 的 numpy 数组

对于每个观测值,表示如果在训练集受到扰动时模型会多么一致地做出相同的预测。返回一个概率,范围在 [0,1]。

predict_proba(X, method='linear', return_confidence=False)

预测样本为异常值的概率。有两种可能的方法

  1. 简单使用 Min-max 转换将异常值分数线性变换到 [0,1] 的范围。模型必须先拟合。

  2. 使用统一分数,详见 [BKKSZ11]

参数

X形状为 (n_samples, n_features) 的 numpy 数组

输入样本。

methodstr,可选 (默认值=’linear’)

概率转换方法。必须是 ‘linear’ 或 ‘unify’ 之一。

return_confidenceboolean,可选 (默认值=False)

如果为 True,则同时返回预测的置信度。

返回值

outlier_probability形状为 (n_samples, n_classes) 的 numpy 数组

对于每个观测值,根据已拟合的模型判断是否应将其视为异常值。返回异常值概率,范围在 [0,1]。注意,这取决于类别数量,默认情况下为 2 个类别 ([正常概率, 异常概率])。

predict_with_rejection(X, T=32, return_stats=False, delta=0.1, c_fp=1, c_fn=1, c_r=-1)
预测特定样本是否为异常值,

允许检测器拒绝 (即输出 = -2) 低置信度的预测。

参数

X形状为 (n_samples, n_features) 的 numpy 数组

输入样本。

Tint,可选 (默认值=32)

它允许将拒绝阈值设置为 1-2exp(-T)。T 的值越高,拒绝越多。

return_stats: bool,可选 (默认值 = False)

如果为 True,则同时返回三个附加的浮点值:估计拒绝率、拒绝率上限和成本上限。

delta: float,可选 (默认值 = 0.1)

拒绝率上限以概率 1-delta 成立。

c_fp, c_fn, c_r: float (正值),可选 (默认值 = [1,1, contamination])

误报预测 (c_fp)、漏报预测 (c_fn) 和拒绝 (c_r) 的成本。

返回值

outlier_labels形状为 (n_samples,) 的 numpy 数组

对于每个观测值,根据已拟合的模型判断是否应将其视为异常值。0 表示正常值,1 表示异常值,-2 表示拒绝。

expected_rejection_rate: float,如果 return_stats 为 True;upperbound_rejection_rate: float,如果 return_stats 为 True;upperbound_cost: float,如果 return_stats 为 True;

pyod.models.copod 模块

基于 Copula 的异常值检测器 (COPOD)

class pyod.models.copod.COPOD(contamination=0.1, n_jobs=1)[source]

基础类: BaseDetector

COPOD 类,用于基于 Copula 的异常值检测器。COPOD 是一种无参数、高度可解释的异常值检测算法,基于经验 Copula 模型。详见 [BLZB+20]

参数

contaminationfloat,范围 (0., 0.5),可选 (默认值=0.1)

数据集的污染程度,即数据集中异常值的比例。在拟合时用于定义决策函数的阈值。

n_jobs可选 (默认=1)

用于 fitpredict 并行运行的作业数。如果为 -1,则作业数设置为核心数。

属性

decision_scores_形状为 (n_samples,) 的 numpy 数组

训练数据的异常值分数。分数越高表示越异常。异常值往往得分较高。此值在检测器拟合后可用。

threshold_float

阈值基于 contamination。它是 decision_scores_n_samples * contamination 个最异常样本的分数。计算此阈值是为了生成二元异常值标签。

labels_int, 0 或 1

训练数据的二元标签。0 表示正常值,1 表示异常值/异常。它是通过将 threshold_ 应用于 decision_scores_ 生成的。

compute_rejection_stats(T=32, delta=0.1, c_fp=1, c_fn=1, c_r=-1, verbose=False)
为无监督检测器添加拒绝选项。

这伴随着保证:预期拒绝率的估计值 (return_rejectrate=True),拒绝率的上限 (return_ub_rejectrate= True),以及成本的上限 (return_ub_cost=True)。

参数

T: int,可选 (默认值=32)

它允许将拒绝阈值设置为 1-2exp(-T)。T 的值越高,拒绝越多。

delta: float,可选 (默认值 = 0.1)

拒绝率上限以概率 1-delta 成立。

c_fp, c_fn, c_r: float (正值),

可选 (默认值 = [1,1, contamination]) 对应于误报预测 (c_fp)、漏报预测 (c_fn) 和拒绝 (c_r) 的成本。

verbose: bool,可选 (默认值 = False)

如果为 True,则打印预期拒绝率、拒绝率上限和成本上限。

返回值

expected_rejection_rate: float,预期拒绝率;upperbound_rejection_rate: float,拒绝率上限

概率 1-delta 满足;

upperbound_cost: float,成本上限;

decision_function(X)[source]
使用已拟合的检测器预测 X 的原始异常分数。

为了保持一致性,异常值被赋予更高的异常分数。

参数

X形状为 (n_samples, n_features) 的 numpy 数组

训练输入样本。仅当基础估计器支持时,才接受稀疏矩阵。

返回值

anomaly_scores形状为 (n_samples,) 的 numpy 数组

输入样本的异常分数。

explain_outlier(ind, columns=None, cutoffs=None, feature_names=None, file_name=None, file_type=None)[source]

绘制数据集中给定数据点的维度异常值图。

参数

indint

希望获得维度异常值图的数据点索引。

columnslist

指定要绘制的特征/维度列表。如果未指定,则使用所有特征。

cutoffslist of floats in (0., 1), 可选 (默认=[0.95, 0.99])

维度异常值图的显著性截止带。

feature_namesstring 列表

数据集所有列的显示名称,用于显示在图的 x 轴上。

file_namestring

保存图的文件名。

file_typestring

保存图的文件类型。

返回值

Plotmatplotlib plot

索引为 ind 的数据点的维度异常值图。

fit(X, y=None)[source]

拟合检测器。y 在无监督方法中被忽略。Parameters ———- X : numpy array of shape (n_samples, n_features)

输入样本。

y已忽略

未使用,根据约定为了 API 一致性而存在。

返回值

self对象

已拟合的估计器。

fit_predict(X, y=None)

首先拟合检测器,然后预测特定样本是否为异常值。y 在无监督模型中被忽略。

参数

X形状为 (n_samples, n_features) 的 numpy 数组

输入样本。

y已忽略

未使用,根据约定为了 API 一致性而存在。

返回值

outlier_labels形状为 (n_samples,) 的 numpy 数组

对于每个观测值,根据已拟合的模型判断是否应将其视为异常值。0 表示正常值,1 表示异常值。

自 0.6.9 版本起已弃用: fit_predict 将在 pyod 0.8.0 中移除;为了保持一致性,将替换为先调用 fit 函数,然后访问 labels_ 属性。

fit_predict_score(X, y, scoring='roc_auc_score')

拟合检测器,对样本进行预测,并使用预定义指标(例如 ROC)评估模型。

参数

X形状为 (n_samples, n_features) 的 numpy 数组

输入样本。

y已忽略

未使用,根据约定为了 API 一致性而存在。

scoringstr,可选 (默认值=’roc_auc_score’)

评估指标

  • ‘roc_auc_score’: ROC 分数

  • ‘prc_n_score’: Precision @ rank n 分数

返回值

score : float

自 0.6.9 版本起已弃用: fit_predict_score 将在 pyod 0.8.0 中移除;为了保持一致性,将替换为先调用 fit 函数,然后访问 labels_ 属性。评分可以通过调用评估方法(例如 AUC ROC)来完成。

get_params(deep=True)

获取此估计器的参数。

详见 https://scikit-learn.cn/stable/modules/generated/sklearn.base.BaseEstimator.html 和 sklearn/base.py 获取更多信息。

参数

deepbool,可选 (默认值=True)

如果为 True,将返回此估计器以及其中包含的作为估计器的子对象的参数。

返回值

params从字符串到任意类型的映射

参数名称与其值的映射。

predict(X, return_confidence=False)

预测特定样本是否为异常值。

参数

X形状为 (n_samples, n_features) 的 numpy 数组

输入样本。

return_confidenceboolean,可选 (默认值=False)

如果为 True,则同时返回预测的置信度。

返回值

outlier_labels形状为 (n_samples,) 的 numpy 数组

对于每个观测值,根据已拟合的模型判断是否应将其视为异常值。0 表示正常值,1 表示异常值。

confidence形状为 (n_samples,) 的 numpy 数组。

仅当 return_confidence 设置为 True 时返回。

predict_confidence(X)

预测模型在稍微不同的训练集下做出相同预测的置信度。详见 [BPVD20]

参数

X形状为 (n_samples, n_features) 的 numpy 数组

输入样本。

返回值

confidence形状为 (n_samples,) 的 numpy 数组

对于每个观测值,表示如果在训练集受到扰动时模型会多么一致地做出相同的预测。返回一个概率,范围在 [0,1]。

predict_proba(X, method='linear', return_confidence=False)

预测样本为异常值的概率。有两种可能的方法

  1. 简单使用 Min-max 转换将异常值分数线性变换到 [0,1] 的范围。模型必须先拟合。

  2. 使用统一分数,详见 [BKKSZ11]

参数

X形状为 (n_samples, n_features) 的 numpy 数组

输入样本。

methodstr,可选 (默认值=’linear’)

概率转换方法。必须是 ‘linear’ 或 ‘unify’ 之一。

return_confidenceboolean,可选 (默认值=False)

如果为 True,则同时返回预测的置信度。

返回值

outlier_probability形状为 (n_samples, n_classes) 的 numpy 数组

对于每个观测值,根据已拟合的模型判断是否应将其视为异常值。返回异常值概率,范围在 [0,1]。注意,这取决于类别数量,默认情况下为 2 个类别 ([正常概率, 异常概率])。

predict_with_rejection(X, T=32, return_stats=False, delta=0.1, c_fp=1, c_fn=1, c_r=-1)
预测特定样本是否为异常值,

允许检测器拒绝 (即输出 = -2) 低置信度的预测。

参数

X形状为 (n_samples, n_features) 的 numpy 数组

输入样本。

Tint,可选 (默认值=32)

它允许将拒绝阈值设置为 1-2exp(-T)。T 的值越高,拒绝越多。

return_stats: bool,可选 (默认值 = False)

如果为 True,则同时返回三个附加的浮点值:估计拒绝率、拒绝率上限和成本上限。

delta: float,可选 (默认值 = 0.1)

拒绝率上限以概率 1-delta 成立。

c_fp, c_fn, c_r: float (正值),可选 (默认值 = [1,1, contamination])

误报预测 (c_fp)、漏报预测 (c_fn) 和拒绝 (c_r) 的成本。

返回值

outlier_labels形状为 (n_samples,) 的 numpy 数组

对于每个观测值,根据已拟合的模型判断是否应将其视为异常值。0 表示正常值,1 表示异常值,-2 表示拒绝。

expected_rejection_rate: float,如果 return_stats 为 True;upperbound_rejection_rate: float,如果 return_stats 为 True;upperbound_cost: float,如果 return_stats 为 True;

set_params(**params)

设置此估计器的参数。此方法适用于简单估计器和嵌套对象(例如管道)。嵌套对象的参数形式为 <component>__<parameter>,以便可以更新嵌套对象的每个组件。

详见 https://scikit-learn.cn/stable/modules/generated/sklearn.base.BaseEstimator.html 和 sklearn/base.py 获取更多信息。

返回值

self : object

pyod.models.copod.skew(X, axis=0)[source]

pyod.models.deep_svdd 模块

用于异常值检测的深度单类分类

class pyod.models.deep_svdd.DeepSVDD(n_features, c=None, use_ae=False, hidden_neurons=None, hidden_activation='relu', output_activation='sigmoid', optimizer='adam', epochs=100, batch_size=32, dropout_rate=0.2, l2_regularizer=0.1, validation_size=0.1, preprocessing=True, verbose=1, random_state=None, contamination=0.1)[source]

基础类: BaseDetector

带有自编码器(AE)的深度单类分类器是一种神经网络,用于以无监督的方式学习有用的数据表示。DeepSVDD 在训练神经网络的同时最小化包含数据网络表示的超球体体积,迫使网络提取常见的变化因素。类似于 PCA,DeepSVDD 可用于通过计算距中心的距离来检测数据中的异常对象。详细信息请参阅[BRVG+18]

参数

n_features: int,

输入数据中的特征数量。

c: float, 可选 (默认=’forwad_nn_pass’)

Deep SVDD 中心,默认为基于网络初始化第一次正向传播计算。如果 c 设置为 None,为获得重复结果请设置 random_state。

use_ae: bool, 可选 (默认=False)

DeepSVDD 的自编码器类型,如果设置为 True,它会反转 hidden_neurons 中的神经元。

hidden_neuronslist,可选 (默认值=[64, 32])

每个隐藏层的神经元数量。如果 use_ae 为 True,神经元将被反转,例如 [64, 32] -> [64, 32, 32, 64, n_features]

hidden_activationstr,可选 (默认值=’relu’)

用于隐藏层的激活函数。所有隐藏层都强制使用相同类型的激活函数。请参阅 https://keras.org.cn/activations/

output_activationstr, 可选 (默认=’sigmoid’)

用于输出层的激活函数。请参阅 https://keras.org.cn/activations/

optimizerstr, 可选 (默认=’adam’)

字符串(优化器名称)或优化器实例。请参阅 https://keras.org.cn/optimizers/

epochsint, 可选 (默认=100)

训练模型的轮数。

batch_sizeint,可选 (默认值=32)

每次梯度更新的样本数量。

dropout_ratefloat,范围 (0., 1),可选 (默认值=0.2)

所有层中使用的 Dropout。

l2_regularizerfloat, 范围 (0., 1), 可选 (默认=0.1)

应用于每一层的 activity_regularizer 正则化强度。默认使用 l2 正则化器。请参阅 https://keras.org.cn/regularizers/

validation_sizefloat, 范围 (0., 1), 可选 (默认=0.1)

用于验证的数据百分比。

preprocessingbool,可选 (默认值=True)

如果为 True,则对数据应用标准化。

random_staterandom_state: int, RandomState 实例或 None, 可选

(默认=None) 如果是 int,random_state 是随机数生成器使用的种子;如果是 RandomState 实例,random_state 是随机数生成器;如果是 None,随机数生成器是 np.random 使用的 RandomState 实例。

contaminationfloat,范围 (0., 0.5),可选 (默认值=0.1)

数据集的污染程度,即数据集中异常值的比例。拟合时用于定义决策函数的阈值。

属性

decision_scores_形状为 (n_samples,) 的 numpy 数组

训练数据的异常值分数。分数越高表示越异常。异常值往往得分较高。此值在检测器拟合后可用。

threshold_float

阈值基于 contamination。它是 decision_scores_n_samples * contamination 个最异常样本的分数。计算此阈值是为了生成二元异常值标签。

labels_int, 0 或 1

训练数据的二元标签。0 表示正常值,1 表示异常值/异常。它是通过将 threshold_ 应用于 decision_scores_ 生成的。

compute_rejection_stats(T=32, delta=0.1, c_fp=1, c_fn=1, c_r=-1, verbose=False)
为无监督检测器添加拒绝选项。

这伴随着保证:预期拒绝率的估计值 (return_rejectrate=True),拒绝率的上限 (return_ub_rejectrate= True),以及成本的上限 (return_ub_cost=True)。

参数

T: int,可选 (默认值=32)

它允许将拒绝阈值设置为 1-2exp(-T)。T 的值越高,拒绝越多。

delta: float,可选 (默认值 = 0.1)

拒绝率上限以概率 1-delta 成立。

c_fp, c_fn, c_r: float (正值),

可选 (默认值 = [1,1, contamination]) 对应于误报预测 (c_fp)、漏报预测 (c_fn) 和拒绝 (c_r) 的成本。

verbose: bool,可选 (默认值 = False)

如果为 True,则打印预期拒绝率、拒绝率上限和成本上限。

返回值

expected_rejection_rate: float,预期拒绝率;upperbound_rejection_rate: float,拒绝率上限

概率 1-delta 满足;

upperbound_cost: float,成本上限;

decision_function(X)[source]

使用已拟合的检测器预测 X 的原始异常分数。

输入样本的异常分数是根据不同的检测器算法计算的。为了一致性,异常值被赋予较大的异常分数。

参数

X形状为 (n_samples, n_features) 的 numpy 数组

训练输入样本。仅当基础估计器支持时,才接受稀疏矩阵。

返回值

anomaly_scores形状为 (n_samples,) 的 numpy 数组

输入样本的异常分数。

fit(X, y=None)[source]

拟合检测器。y 在无监督方法中被忽略。

参数

X形状为 (n_samples, n_features) 的 numpy 数组

输入样本。

y已忽略

未使用,根据约定为了 API 一致性而存在。

返回值

self对象

已拟合的估计器。

fit_predict(X, y=None)

首先拟合检测器,然后预测特定样本是否为异常值。y 在无监督模型中被忽略。

参数

X形状为 (n_samples, n_features) 的 numpy 数组

输入样本。

y已忽略

未使用,根据约定为了 API 一致性而存在。

返回值

outlier_labels形状为 (n_samples,) 的 numpy 数组

对于每个观测值,根据已拟合的模型判断是否应将其视为异常值。0 表示正常值,1 表示异常值。

自 0.6.9 版本起已弃用: fit_predict 将在 pyod 0.8.0 中移除;为了保持一致性,将替换为先调用 fit 函数,然后访问 labels_ 属性。

fit_predict_score(X, y, scoring='roc_auc_score')

拟合检测器,对样本进行预测,并使用预定义指标(例如 ROC)评估模型。

参数

X形状为 (n_samples, n_features) 的 numpy 数组

输入样本。

y已忽略

未使用,根据约定为了 API 一致性而存在。

scoringstr,可选 (默认值=’roc_auc_score’)

评估指标

  • ‘roc_auc_score’: ROC 分数

  • ‘prc_n_score’: Precision @ rank n 分数

返回值

score : float

自 0.6.9 版本起已弃用: fit_predict_score 将在 pyod 0.8.0 中移除;为了保持一致性,将替换为先调用 fit 函数,然后访问 labels_ 属性。评分可以通过调用评估方法(例如 AUC ROC)来完成。

get_params(deep=True)

获取此估计器的参数。

详见 https://scikit-learn.cn/stable/modules/generated/sklearn.base.BaseEstimator.html 和 sklearn/base.py 获取更多信息。

参数

deepbool,可选 (默认值=True)

如果为 True,将返回此估计器以及其中包含的作为估计器的子对象的参数。

返回值

params从字符串到任意类型的映射

参数名称与其值的映射。

predict(X, return_confidence=False)

预测特定样本是否为异常值。

参数

X形状为 (n_samples, n_features) 的 numpy 数组

输入样本。

return_confidenceboolean,可选 (默认值=False)

如果为 True,则同时返回预测的置信度。

返回值

outlier_labels形状为 (n_samples,) 的 numpy 数组

对于每个观测值,根据已拟合的模型判断是否应将其视为异常值。0 表示正常值,1 表示异常值。

confidence形状为 (n_samples,) 的 numpy 数组。

仅当 return_confidence 设置为 True 时返回。

predict_confidence(X)

预测模型在稍微不同的训练集下做出相同预测的置信度。详细信息请参阅 [BPVD20]

参数

X形状为 (n_samples, n_features) 的 numpy 数组

输入样本。

返回值

confidence形状为 (n_samples,) 的 numpy 数组

对于每个观测值,表示如果在训练集受到扰动时模型会多么一致地做出相同的预测。返回一个概率,范围在 [0,1]。

predict_proba(X, method='linear', return_confidence=False)

预测样本为异常值的概率。有两种可能的方法

  1. 简单使用 Min-max 转换将异常值分数线性变换到 [0,1] 的范围。模型必须先拟合。

  2. 使用统一的分数,详细信息请参阅 [BKKSZ11]

参数

X形状为 (n_samples, n_features) 的 numpy 数组

输入样本。

methodstr,可选 (默认值=’linear’)

概率转换方法。必须是 ‘linear’ 或 ‘unify’ 之一。

return_confidenceboolean,可选 (默认值=False)

如果为 True,则同时返回预测的置信度。

返回值

outlier_probability形状为 (n_samples, n_classes) 的 numpy 数组

对于每个观测值,根据已拟合的模型判断是否应将其视为异常值。返回异常值概率,范围在 [0,1]。注意,这取决于类别数量,默认情况下为 2 个类别 ([正常概率, 异常概率])。

predict_with_rejection(X, T=32, return_stats=False, delta=0.1, c_fp=1, c_fn=1, c_r=-1)
预测特定样本是否为异常值,

允许检测器拒绝 (即输出 = -2) 低置信度的预测。

参数

X形状为 (n_samples, n_features) 的 numpy 数组

输入样本。

Tint,可选 (默认值=32)

它允许将拒绝阈值设置为 1-2exp(-T)。T 的值越高,拒绝越多。

return_stats: bool,可选 (默认值 = False)

如果为 True,则同时返回三个附加的浮点值:估计拒绝率、拒绝率上限和成本上限。

delta: float,可选 (默认值 = 0.1)

拒绝率上限以概率 1-delta 成立。

c_fp, c_fn, c_r: float (正值),可选 (默认值 = [1,1, contamination])

误报预测 (c_fp)、漏报预测 (c_fn) 和拒绝 (c_r) 的成本。

返回值

outlier_labels形状为 (n_samples,) 的 numpy 数组

对于每个观测值,根据已拟合的模型判断是否应将其视为异常值。0 表示正常值,1 表示异常值,-2 表示拒绝。

expected_rejection_rate: float,如果 return_stats 为 True;upperbound_rejection_rate: float,如果 return_stats 为 True;upperbound_cost: float,如果 return_stats 为 True;

set_params(**params)

设置此估计器的参数。此方法适用于简单估计器和嵌套对象(例如管道)。嵌套对象的参数形式为 <component>__<parameter>,以便可以更新嵌套对象的每个组件。

详见 https://scikit-learn.cn/stable/modules/generated/sklearn.base.BaseEstimator.html 和 sklearn/base.py 获取更多信息。

返回值

self : object

pyod.models.devnet module

使用偏差网络的深度异常检测 部分代码改编自 https://github.com/GuansongPang/deviation-network

class pyod.models.devnet.DevNet(network_depth=2, batch_size=512, epochs=50, nb_batch=20, known_outliers=30, cont_rate=0.02, data_format=0, random_seed=42, device=None, contamination=0.1)[source]

基础类: BaseDetector

compute_rejection_stats(T=32, delta=0.1, c_fp=1, c_fn=1, c_r=-1, verbose=False)
为无监督检测器添加拒绝选项。

这伴随着保证:预期拒绝率的估计值 (return_rejectrate=True),拒绝率的上限 (return_ub_rejectrate= True),以及成本的上限 (return_ub_cost=True)。

参数

T: int,可选 (默认值=32)

它允许将拒绝阈值设置为 1-2exp(-T)。T 的值越高,拒绝越多。

delta: float,可选 (默认值 = 0.1)

拒绝率上限以概率 1-delta 成立。

c_fp, c_fn, c_r: float (正值),

可选 (默认值 = [1,1, contamination]) 对应于误报预测 (c_fp)、漏报预测 (c_fn) 和拒绝 (c_r) 的成本。

verbose: bool,可选 (默认值 = False)

如果为 True,则打印预期拒绝率、拒绝率上限和成本上限。

返回值

expected_rejection_rate: float,预期拒绝率;upperbound_rejection_rate: float,拒绝率上限

概率 1-delta 满足;

upperbound_cost: float,成本上限;

decision_function(X)[source]

使用已拟合的检测器预测 X 的原始异常分数。

输入样本的异常分数基于已拟合的检测器计算。为了一致性,异常值被赋予更高的异常分数。

参数

X形状为 (n_samples, n_features) 的 numpy 数组

输入样本。只有当基础估计器支持稀疏矩阵时,才接受稀疏矩阵。

返回值

anomaly_scores形状为 (n_samples,) 的 numpy 数组

输入样本的异常分数。

fit(X, y)[source]

拟合检测器。y 在无监督方法中被忽略。

参数

X形状为 (n_samples, n_features) 的 numpy 数组

输入样本。

y已忽略

未使用,根据约定为了 API 一致性而存在。

返回值

self对象

已拟合的估计器。

fit_predict(X, y=None)

首先拟合检测器,然后预测特定样本是否为异常值。y 在无监督模型中被忽略。

参数

X形状为 (n_samples, n_features) 的 numpy 数组

输入样本。

y已忽略

未使用,根据约定为了 API 一致性而存在。

返回值

outlier_labels形状为 (n_samples,) 的 numpy 数组

对于每个观测值,根据已拟合的模型判断是否应将其视为异常值。0 表示正常值,1 表示异常值。

自 0.6.9 版本起已弃用: fit_predict 将在 pyod 0.8.0 中移除;为了保持一致性,将替换为先调用 fit 函数,然后访问 labels_ 属性。

fit_predict_score(X, y, scoring='roc_auc_score')[source]

使用标签拟合检测器,在样本上进行预测,并使用预定义的指标评估模型。

参数

X形状为 (n_samples, n_features) 的 numpy 数组

输入样本。

y形状为 (n_samples,) 的 numpy 数组

对应于 X 的标签或目标值。

scoringstr,可选 (默认值=’roc_auc_score’)

评估指标: - ‘roc_auc_score’:ROC 分数 - ‘prc_n_score’:Precision @ rank n 分数

返回值

score : float

get_params(deep=True)

获取此估计器的参数。

详见 https://scikit-learn.cn/stable/modules/generated/sklearn.base.BaseEstimator.html 和 sklearn/base.py 获取更多信息。

参数

deepbool,可选 (默认值=True)

如果为 True,将返回此估计器以及其中包含的作为估计器的子对象的参数。

返回值

params从字符串到任意类型的映射

参数名称与其值的映射。

predict(X, return_confidence=False)

预测特定样本是否为异常值。

参数

X形状为 (n_samples, n_features) 的 numpy 数组

输入样本。

return_confidenceboolean,可选 (默认值=False)

如果为 True,则同时返回预测的置信度。

返回值

outlier_labels形状为 (n_samples,) 的 numpy 数组

对于每个观测值,根据已拟合的模型判断是否应将其视为异常值。0 表示正常值,1 表示异常值。

confidence形状为 (n_samples,) 的 numpy 数组。

仅当 return_confidence 设置为 True 时返回。

predict_confidence(X)

预测模型在稍微不同的训练集下做出相同预测的置信度。详细信息请参阅 [BPVD20]

参数

X形状为 (n_samples, n_features) 的 numpy 数组

输入样本。

返回值

confidence形状为 (n_samples,) 的 numpy 数组

对于每个观测值,表示如果在训练集受到扰动时模型会多么一致地做出相同的预测。返回一个概率,范围在 [0,1]。

predict_proba(X, method='linear', return_confidence=False)

预测样本为异常值的概率。有两种可能的方法

  1. 简单使用 Min-max 转换将异常值分数线性变换到 [0,1] 的范围。模型必须先拟合。

  2. 使用统一的分数,详细信息请参阅 [BKKSZ11]

参数

X形状为 (n_samples, n_features) 的 numpy 数组

输入样本。

methodstr,可选 (默认值=’linear’)

概率转换方法。必须是 ‘linear’ 或 ‘unify’ 之一。

return_confidenceboolean,可选 (默认值=False)

如果为 True,则同时返回预测的置信度。

返回值

outlier_probability形状为 (n_samples, n_classes) 的 numpy 数组

对于每个观测值,根据已拟合的模型判断是否应将其视为异常值。返回异常值概率,范围在 [0,1]。注意,这取决于类别数量,默认情况下为 2 个类别 ([正常概率, 异常概率])。

predict_with_rejection(X, T=32, return_stats=False, delta=0.1, c_fp=1, c_fn=1, c_r=-1)
预测特定样本是否为异常值,

允许检测器拒绝 (即输出 = -2) 低置信度的预测。

参数

X形状为 (n_samples, n_features) 的 numpy 数组

输入样本。

Tint,可选 (默认值=32)

它允许将拒绝阈值设置为 1-2exp(-T)。T 的值越高,拒绝越多。

return_stats: bool,可选 (默认值 = False)

如果为 True,则同时返回三个附加的浮点值:估计拒绝率、拒绝率上限和成本上限。

delta: float,可选 (默认值 = 0.1)

拒绝率上限以概率 1-delta 成立。

c_fp, c_fn, c_r: float (正值),可选 (默认值 = [1,1, contamination])

误报预测 (c_fp)、漏报预测 (c_fn) 和拒绝 (c_r) 的成本。

返回值

outlier_labels形状为 (n_samples,) 的 numpy 数组

对于每个观测值,根据已拟合的模型判断是否应将其视为异常值。0 表示正常值,1 表示异常值,-2 表示拒绝。

expected_rejection_rate: float,如果 return_stats 为 True;upperbound_rejection_rate: float,如果 return_stats 为 True;upperbound_cost: float,如果 return_stats 为 True;

set_params(**params)

设置此估计器的参数。此方法适用于简单估计器和嵌套对象(例如管道)。嵌套对象的参数形式为 <component>__<parameter>,以便可以更新嵌套对象的每个组件。

详见 https://scikit-learn.cn/stable/modules/generated/sklearn.base.BaseEstimator.html 和 sklearn/base.py 获取更多信息。

返回值

self : object

pyod.models.dif module

用于异常检测的深度隔离森林 (DIF)

class pyod.models.dif.DIF(batch_size=1000, representation_dim=20, hidden_neurons=None, hidden_activation='tanh', skip_connection=False, n_ensemble=50, n_estimators=6, max_samples=256, contamination=0.1, random_state=None, device=None)[source]

基础类: BaseDetector

Deep Isolation Forest (DIF) 是 iForest 的扩展。它使用深度表示集成在原始数据空间上实现非线性隔离。详细信息请参阅 [BXPWW23]

参数

batch_sizeint, 可选 (默认=1000)

每次梯度更新的样本数量。

representation_dim, int, 可选 (默认=20)

表示空间的维度。

hidden_neurons, list, 可选 (默认=[64, 32])

每个隐藏层的神经元数量。因此网络的结构为 [n_features, hidden_neurons[0], hidden_neurons[1], …, representation_dim]

hidden_activation, str, 可选 (默认=’tanh’)

用于隐藏层的激活函数。所有隐藏层都强制使用相同类型的激活函数。详细信息请参阅 https://pytorch.ac.cn/docs/stable/nn.html。目前仅支持 ‘relu’: nn.ReLU() ‘sigmoid’: nn.Sigmoid() ‘tanh’: nn.Tanh()。详细信息请参阅 pyod/utils/torch_utility.py。

skip_connection, boolean, 可选 (默认=False)

如果为 True,则在神经网络结构中应用跳跃连接。

n_ensemble, int, 可选 (默认=50)

深度表示集成成员的数量。

n_estimators, int, 可选 (默认=6)

每个表示的隔离森林数量。

max_samples, int, 可选 (默认=256)

从 X 中抽取用于训练每个基础隔离树的样本数量。

contaminationfloat,范围 (0., 0.5),可选 (默认值=0.1)

数据集的污染程度,即数据集中异常值的比例。在拟合时用于定义决策函数的阈值。

random_stateint 或 None, 可选 (默认=None)

如果是 int,random_state 是随机数生成器使用的种子;如果是 None,随机数生成器是 np.random 使用的 RandomState 实例。

device, ‘cuda’, ‘cpu’, 或 None, 可选 (默认=None)

如果为 ‘cuda’,则在 torch 中使用 GPU 加速;如果为 ‘cpu’,则在 torch 中使用 CPU;如果为 None,则自动确定 GPU 是否可用。

属性

net_lsttorch.Module 的列表

表示神经网络列表。

iForest_lstiForest 的列表

已实例化的 iForest 模型列表。

x_reduced_lst: numpy 数组的列表

训练数据表示列表。

decision_scores_形状为 (n_samples,) 的 numpy 数组

训练数据的异常值分数。分数越高表示越异常。异常值往往得分较高。此值在检测器拟合后可用。

threshold_float

阈值基于 contamination。它是 decision_scores_n_samples * contamination 个最异常样本的分数。计算此阈值是为了生成二元异常值标签。

labels_int, 0 或 1

训练数据的二元标签。0 表示正常值,1 表示异常值/异常。它是通过将 threshold_ 应用于 decision_scores_ 生成的。

compute_rejection_stats(T=32, delta=0.1, c_fp=1, c_fn=1, c_r=-1, verbose=False)
为无监督检测器添加拒绝选项。

这伴随着保证:预期拒绝率的估计值 (return_rejectrate=True),拒绝率的上限 (return_ub_rejectrate= True),以及成本的上限 (return_ub_cost=True)。

参数

T: int,可选 (默认值=32)

它允许将拒绝阈值设置为 1-2exp(-T)。T 的值越高,拒绝越多。

delta: float,可选 (默认值 = 0.1)

拒绝率上限以概率 1-delta 成立。

c_fp, c_fn, c_r: float (正值),

可选 (默认值 = [1,1, contamination]) 对应于误报预测 (c_fp)、漏报预测 (c_fn) 和拒绝 (c_r) 的成本。

verbose: bool,可选 (默认值 = False)

如果为 True,则打印预期拒绝率、拒绝率上限和成本上限。

返回值

expected_rejection_rate: float,预期拒绝率;upperbound_rejection_rate: float,拒绝率上限

概率 1-delta 满足;

upperbound_cost: float,成本上限;

decision_function(X)[source]

使用已拟合的检测器预测 X 的原始异常分数。

输入样本的异常分数是根据不同的检测器算法计算的。为了一致性,异常值被赋予较大的异常分数。

参数

X形状为 (n_samples, n_features) 的 numpy 数组

训练输入样本。仅当基础估计器支持时,才接受稀疏矩阵。

返回值

anomaly_scores形状为 (n_samples,) 的 numpy 数组

输入样本的异常分数。

fit(X, y=None)[source]

拟合检测器。y 在无监督方法中被忽略。

参数

X形状为 (n_samples, n_features) 的 numpy 数组

输入样本。

y已忽略

未使用,根据约定为了 API 一致性而存在。

返回值

self对象

已拟合的估计器。

fit_predict(X, y=None)

首先拟合检测器,然后预测特定样本是否为异常值。y 在无监督模型中被忽略。

参数

X形状为 (n_samples, n_features) 的 numpy 数组

输入样本。

y已忽略

未使用,根据约定为了 API 一致性而存在。

返回值

outlier_labels形状为 (n_samples,) 的 numpy 数组

对于每个观测值,根据已拟合的模型判断是否应将其视为异常值。0 表示正常值,1 表示异常值。

自 0.6.9 版本起已弃用: fit_predict 将在 pyod 0.8.0 中移除;为了保持一致性,将替换为先调用 fit 函数,然后访问 labels_ 属性。

fit_predict_score(X, y, scoring='roc_auc_score')

拟合检测器,对样本进行预测,并使用预定义指标(例如 ROC)评估模型。

参数

X形状为 (n_samples, n_features) 的 numpy 数组

输入样本。

y已忽略

未使用,根据约定为了 API 一致性而存在。

scoringstr,可选 (默认值=’roc_auc_score’)

评估指标

  • ‘roc_auc_score’: ROC 分数

  • ‘prc_n_score’: Precision @ rank n 分数

返回值

score : float

自 0.6.9 版本起已弃用: fit_predict_score 将在 pyod 0.8.0 中移除;为了保持一致性,将替换为先调用 fit 函数,然后访问 labels_ 属性。评分可以通过调用评估方法(例如 AUC ROC)来完成。

get_params(deep=True)

获取此估计器的参数。

详见 https://scikit-learn.cn/stable/modules/generated/sklearn.base.BaseEstimator.html 和 sklearn/base.py 获取更多信息。

参数

deepbool,可选 (默认值=True)

如果为 True,将返回此估计器以及其中包含的作为估计器的子对象的参数。

返回值

params从字符串到任意类型的映射

参数名称与其值的映射。

predict(X, return_confidence=False)

预测特定样本是否为异常值。

参数

X形状为 (n_samples, n_features) 的 numpy 数组

输入样本。

return_confidenceboolean,可选 (默认值=False)

如果为 True,则同时返回预测的置信度。

返回值

outlier_labels形状为 (n_samples,) 的 numpy 数组

对于每个观测值,根据已拟合的模型判断是否应将其视为异常值。0 表示正常值,1 表示异常值。

confidence形状为 (n_samples,) 的 numpy 数组。

仅当 return_confidence 设置为 True 时返回。

predict_confidence(X)

预测模型在稍微不同的训练集下做出相同预测的置信度。详细信息请参阅 [BPVD20]

参数

X形状为 (n_samples, n_features) 的 numpy 数组

输入样本。

返回值

confidence形状为 (n_samples,) 的 numpy 数组

对于每个观测值,表示如果在训练集受到扰动时模型会多么一致地做出相同的预测。返回一个概率,范围在 [0,1]。

predict_proba(X, method='linear', return_confidence=False)

预测样本为异常值的概率。有两种可能的方法

  1. 简单使用 Min-max 转换将异常值分数线性变换到 [0,1] 的范围。模型必须先拟合。

  2. 使用统一的分数,详细信息请参阅 [BKKSZ11]

参数

X形状为 (n_samples, n_features) 的 numpy 数组

输入样本。

methodstr,可选 (默认值=’linear’)

概率转换方法。必须是 ‘linear’ 或 ‘unify’ 之一。

return_confidenceboolean,可选 (默认值=False)

如果为 True,则同时返回预测的置信度。

返回值

outlier_probability形状为 (n_samples, n_classes) 的 numpy 数组

对于每个观测值,根据已拟合的模型判断是否应将其视为异常值。返回异常值概率,范围在 [0,1]。注意,这取决于类别数量,默认情况下为 2 个类别 ([正常概率, 异常概率])。

predict_with_rejection(X, T=32, return_stats=False, delta=0.1, c_fp=1, c_fn=1, c_r=-1)
预测特定样本是否为异常值,

允许检测器拒绝 (即输出 = -2) 低置信度的预测。

参数

X形状为 (n_samples, n_features) 的 numpy 数组

输入样本。

Tint,可选 (默认值=32)

它允许将拒绝阈值设置为 1-2exp(-T)。T 的值越高,拒绝越多。

return_stats: bool,可选 (默认值 = False)

如果为 True,则同时返回三个附加的浮点值:估计拒绝率、拒绝率上限和成本上限。

delta: float,可选 (默认值 = 0.1)

拒绝率上限以概率 1-delta 成立。

c_fp, c_fn, c_r: float (正值),可选 (默认值 = [1,1, contamination])

误报预测 (c_fp)、漏报预测 (c_fn) 和拒绝 (c_r) 的成本。

返回值

outlier_labels形状为 (n_samples,) 的 numpy 数组

对于每个观测值,根据已拟合的模型判断是否应将其视为异常值。0 表示正常值,1 表示异常值,-2 表示拒绝。

expected_rejection_rate: float,如果 return_stats 为 True;upperbound_rejection_rate: float,如果 return_stats 为 True;upperbound_cost: float,如果 return_stats 为 True;

set_params(**params)

设置此估计器的参数。此方法适用于简单估计器和嵌套对象(例如管道)。嵌套对象的参数形式为 <component>__<parameter>,以便可以更新嵌套对象的每个组件。

详见 https://scikit-learn.cn/stable/modules/generated/sklearn.base.BaseEstimator.html 和 sklearn/base.py 获取更多信息。

返回值

self : object

pyod.models.ecod module

使用经验累积分布函数 (ECOD) 进行无监督异常值检测

class pyod.models.ecod.ECOD(contamination=0.1, n_jobs=1)[source]

基础类: BaseDetector

ECOD 类,用于使用经验累积分布函数 (ECOD) 进行无监督异常值检测。ECOD 是一种基于经验 CDF 函数的无参数、高度可解释的异常值检测算法。详细信息请参阅 [BLZH+22]

参数

contaminationfloat,范围 (0., 0.5),可选 (默认值=0.1)

数据集的污染程度,即数据集中异常值的比例。在拟合时用于定义决策函数的阈值。

n_jobs可选 (默认=1)

用于 fitpredict 并行运行的作业数。如果为 -1,则作业数设置为核心数。

属性

decision_scores_形状为 (n_samples,) 的 numpy 数组

训练数据的异常值分数。分数越高表示越异常。异常值往往得分较高。此值在检测器拟合后可用。

threshold_float

阈值基于 contamination。它是 decision_scores_n_samples * contamination 个最异常样本的分数。计算此阈值是为了生成二元异常值标签。

labels_int, 0 或 1

训练数据的二元标签。0 表示正常值,1 表示异常值/异常。它是通过将 threshold_ 应用于 decision_scores_ 生成的。

compute_rejection_stats(T=32, delta=0.1, c_fp=1, c_fn=1, c_r=-1, verbose=False)
为无监督检测器添加拒绝选项。

这伴随着保证:预期拒绝率的估计值 (return_rejectrate=True),拒绝率的上限 (return_ub_rejectrate= True),以及成本的上限 (return_ub_cost=True)。

参数

T: int,可选 (默认值=32)

它允许将拒绝阈值设置为 1-2exp(-T)。T 的值越高,拒绝越多。

delta: float,可选 (默认值 = 0.1)

拒绝率上限以概率 1-delta 成立。

c_fp, c_fn, c_r: float (正值),

可选 (默认值 = [1,1, contamination]) 对应于误报预测 (c_fp)、漏报预测 (c_fn) 和拒绝 (c_r) 的成本。

verbose: bool,可选 (默认值 = False)

如果为 True,则打印预期拒绝率、拒绝率上限和成本上限。

返回值

expected_rejection_rate: float,预期拒绝率;upperbound_rejection_rate: float,拒绝率上限

概率 1-delta 满足;

upperbound_cost: float,成本上限;

decision_function(X)[source]
使用已拟合的检测器预测 X 的原始异常分数。

为了保持一致性,异常值被赋予更高的异常分数。

参数

X形状为 (n_samples, n_features) 的 numpy 数组

训练输入样本。仅当基础估计器支持时,才接受稀疏矩阵。

返回值

anomaly_scores形状为 (n_samples,) 的 numpy 数组

输入样本的异常分数。

explain_outlier(ind, columns=None, cutoffs=None, feature_names=None, file_name=None, file_type=None)[source]

绘制数据集中给定数据点的维度异常值图。

参数

indint

希望获得维度异常值图的数据点索引。

columnslist

指定要绘制的特征/维度列表。如果未指定,则使用所有特征。

cutoffslist of floats in (0., 1), 可选 (默认=[0.95, 0.99])

维度异常值图的显著性截止带。

feature_namesstring 列表

数据集所有列的显示名称,用于显示在图的 x 轴上。

file_namestring

保存图的文件名。

file_typestring

保存图的文件类型。

返回值

Plotmatplotlib plot

索引为 ind 的数据点的维度异常值图。

fit(X, y=None)[source]

拟合检测器。y 在无监督方法中被忽略。Parameters ———- X : numpy array of shape (n_samples, n_features)

输入样本。

y已忽略

未使用,根据约定为了 API 一致性而存在。

返回值

self对象

已拟合的估计器。

fit_predict(X, y=None)

首先拟合检测器,然后预测特定样本是否为异常值。y 在无监督模型中被忽略。

参数

X形状为 (n_samples, n_features) 的 numpy 数组

输入样本。

y已忽略

未使用,根据约定为了 API 一致性而存在。

返回值

outlier_labels形状为 (n_samples,) 的 numpy 数组

对于每个观测值,根据已拟合的模型判断是否应将其视为异常值。0 表示正常值,1 表示异常值。

自 0.6.9 版本起已弃用: fit_predict 将在 pyod 0.8.0 中移除;为了保持一致性,将替换为先调用 fit 函数,然后访问 labels_ 属性。

fit_predict_score(X, y, scoring='roc_auc_score')

拟合检测器,对样本进行预测,并使用预定义指标(例如 ROC)评估模型。

参数

X形状为 (n_samples, n_features) 的 numpy 数组

输入样本。

y已忽略

未使用,根据约定为了 API 一致性而存在。

scoringstr,可选 (默认值=’roc_auc_score’)

评估指标

  • ‘roc_auc_score’: ROC 分数

  • ‘prc_n_score’: Precision @ rank n 分数

返回值

score : float

自 0.6.9 版本起已弃用: fit_predict_score 将在 pyod 0.8.0 中移除;为了保持一致性,将替换为先调用 fit 函数,然后访问 labels_ 属性。评分可以通过调用评估方法(例如 AUC ROC)来完成。

get_params(deep=True)

获取此估计器的参数。

详见 https://scikit-learn.cn/stable/modules/generated/sklearn.base.BaseEstimator.html 和 sklearn/base.py 获取更多信息。

参数

deepbool,可选 (默认值=True)

如果为 True,将返回此估计器以及其中包含的作为估计器的子对象的参数。

返回值

params从字符串到任意类型的映射

参数名称与其值的映射。

predict(X, return_confidence=False)

预测特定样本是否为异常值。

参数

X形状为 (n_samples, n_features) 的 numpy 数组

输入样本。

return_confidenceboolean,可选 (默认值=False)

如果为 True,则同时返回预测的置信度。

返回值

outlier_labels形状为 (n_samples,) 的 numpy 数组

对于每个观测值,根据已拟合的模型判断是否应将其视为异常值。0 表示正常值,1 表示异常值。

confidence形状为 (n_samples,) 的 numpy 数组。

仅当 return_confidence 设置为 True 时返回。

predict_confidence(X)

预测模型在稍微不同的训练集下做出相同预测的置信度。详细信息请参阅 [BPVD20]

参数

X形状为 (n_samples, n_features) 的 numpy 数组

输入样本。

返回值

confidence形状为 (n_samples,) 的 numpy 数组

对于每个观测值,表示如果在训练集受到扰动时模型会多么一致地做出相同的预测。返回一个概率,范围在 [0,1]。

predict_proba(X, method='linear', return_confidence=False)

预测样本为异常值的概率。有两种可能的方法

  1. 简单使用 Min-max 转换将异常值分数线性变换到 [0,1] 的范围。模型必须先拟合。

  2. 使用统一的分数,详细信息请参阅 [BKKSZ11]

参数

X形状为 (n_samples, n_features) 的 numpy 数组

输入样本。

methodstr,可选 (默认值=’linear’)

概率转换方法。必须是 ‘linear’ 或 ‘unify’ 之一。

return_confidenceboolean,可选 (默认值=False)

如果为 True,则同时返回预测的置信度。

返回值

outlier_probability形状为 (n_samples, n_classes) 的 numpy 数组

对于每个观测值,根据已拟合的模型判断是否应将其视为异常值。返回异常值概率,范围在 [0,1]。注意,这取决于类别数量,默认情况下为 2 个类别 ([正常概率, 异常概率])。

predict_with_rejection(X, T=32, return_stats=False, delta=0.1, c_fp=1, c_fn=1, c_r=-1)
预测特定样本是否为异常值,

允许检测器拒绝 (即输出 = -2) 低置信度的预测。

参数

X形状为 (n_samples, n_features) 的 numpy 数组

输入样本。

Tint,可选 (默认值=32)

它允许将拒绝阈值设置为 1-2exp(-T)。T 的值越高,拒绝越多。

return_stats: bool,可选 (默认值 = False)

如果为 True,则同时返回三个附加的浮点值:估计拒绝率、拒绝率上限和成本上限。

delta: float,可选 (默认值 = 0.1)

拒绝率上限以概率 1-delta 成立。

c_fp, c_fn, c_r: float (正值),可选 (默认值 = [1,1, contamination])

误报预测 (c_fp)、漏报预测 (c_fn) 和拒绝 (c_r) 的成本。

返回值

outlier_labels形状为 (n_samples,) 的 numpy 数组

对于每个观测值,根据已拟合的模型判断是否应将其视为异常值。0 表示正常值,1 表示异常值,-2 表示拒绝。

expected_rejection_rate: float,如果 return_stats 为 True;upperbound_rejection_rate: float,如果 return_stats 为 True;upperbound_cost: float,如果 return_stats 为 True;

set_params(**params)

设置此估计器的参数。此方法适用于简单估计器和嵌套对象(例如管道)。嵌套对象的参数形式为 <component>__<parameter>,以便可以更新嵌套对象的每个组件。

详见 https://scikit-learn.cn/stable/modules/generated/sklearn.base.BaseEstimator.html 和 sklearn/base.py 获取更多信息。

返回值

self : object

pyod.models.ecod.skew(X, axis=0)[source]

pyod.models.feature_bagging module

特征 Bagging 检测器

class pyod.models.feature_bagging.FeatureBagging(base_estimator=None, n_estimators=10, contamination=0.1, max_features=1.0, bootstrap_features=False, check_detector=True, check_estimator=False, n_jobs=1, random_state=None, combination='average', verbose=0, estimator_params=None)[source]

基础类: BaseDetector

特征 Bagging 检测器是一种元估计器,它在数据集的各种子样本上拟合多个基础检测器,并使用平均或其他组合方法来提高预测精度并控制过拟合。

子样本大小始终与原始输入样本大小相同,但特征是随机采样,范围从一半特征到所有特征。

默认情况下,使用 LOF 作为基础估计器。但是,任何估计器都可以用作基础估计器,例如 kNN 和 ABOD。

特征 Bagging 首先通过随机选择特征子集来构建 n 个子样本,这增加了基础估计器的多样性。

最后,通过对所有基础检测器进行平均/取最大值来生成预测分数。详细信息请参阅 [BLK05]

参数

base_estimator对象或 None, 可选 (默认=None)

在数据集的随机子集上拟合的基础估计器。如果为 None,则基础估计器为 LOF 检测器。

n_estimatorsint, 可选 (默认=10)

集成中基础估计器的数量。

contaminationfloat,范围 (0., 0.5),可选 (默认值=0.1)

数据集的污染程度,即数据集中异常值的比例。在拟合时用于定义决策函数的阈值。

max_featuresint 或 float, 可选 (默认=1.0)

从 X 中抽取用于训练每个基础估计器的特征数量。

  • 如果是 int,则抽取 max_features 个特征。

  • 如果是 float,则抽取 max_features * X.shape[1] 个特征。

bootstrap_featuresbool, 可选 (默认=False)

特征是否进行有放回抽取。

check_detectorbool, 可选 (默认=True)

如果设置为 True,检查基础估计器是否符合 pyod 标准。

check_estimatorbool, 可选 (默认=False)

如果设置为 True,检查基础估计器是否符合 sklearn 标准。

自版本 0.6.9 起已弃用: check_estimator 将在 pyod 0.8.0 中移除;它将被 check_detector 替代。

n_jobs可选 (默认=1)

用于 fitpredict 并行运行的作业数。如果为 -1,则作业数设置为核心数。

random_stateint, RandomState 或 None, 可选 (默认=None)

如果是 int,random_state 是随机数生成器使用的种子;如果是 RandomState 实例,random_state 是随机数生成器;如果是 None,随机数生成器是 np.random 使用的 RandomState 实例。

combinationstr, 可选 (默认=’average’)

组合方法

  • 如果为 ‘average’:取所有检测器的平均值

  • 如果为 ‘max’:取所有检测器的最大分数

verboseint, 可选 (默认=0)

控制构建过程的详细程度。

estimator_paramsdict, 可选 (默认=None)

在实例化新的基础估计器时用作参数的属性列表。如果未给出,则使用默认参数。

属性

decision_scores_形状为 (n_samples,) 的 numpy 数组

训练数据的异常值分数。分数越高表示越异常。异常值往往得分较高。此值在检测器拟合后可用。

threshold_float

阈值基于 contamination。它是 decision_scores_n_samples * contamination 个最异常样本的分数。计算此阈值是为了生成二元异常值标签。

labels_int, 0 或 1

训练数据的二元标签。0 表示正常值,1 表示异常值/异常。它是通过将 threshold_ 应用于 decision_scores_ 生成的。

compute_rejection_stats(T=32, delta=0.1, c_fp=1, c_fn=1, c_r=-1, verbose=False)
为无监督检测器添加拒绝选项。

这伴随着保证:预期拒绝率的估计值 (return_rejectrate=True),拒绝率的上限 (return_ub_rejectrate= True),以及成本的上限 (return_ub_cost=True)。

参数

T: int,可选 (默认值=32)

它允许将拒绝阈值设置为 1-2exp(-T)。T 的值越高,拒绝越多。

delta: float,可选 (默认值 = 0.1)

拒绝率上限以概率 1-delta 成立。

c_fp, c_fn, c_r: float (正值),

可选 (默认值 = [1,1, contamination]) 对应于误报预测 (c_fp)、漏报预测 (c_fn) 和拒绝 (c_r) 的成本。

verbose: bool,可选 (默认值 = False)

如果为 True,则打印预期拒绝率、拒绝率上限和成本上限。

返回值

expected_rejection_rate: float,预期拒绝率;upperbound_rejection_rate: float,拒绝率上限

概率 1-delta 满足;

upperbound_cost: float,成本上限;

decision_function(X)[source]

使用已拟合的检测器预测 X 的原始异常分数。

输入样本的异常分数是根据不同的检测器算法计算的。为了一致性,异常值被赋予较大的异常分数。

参数

X形状为 (n_samples, n_features) 的 numpy 数组

训练输入样本。仅当基础估计器支持时,才接受稀疏矩阵。

返回值

anomaly_scores形状为 (n_samples,) 的 numpy 数组

输入样本的异常分数。

fit(X, y=None)[source]

拟合检测器。y 在无监督方法中被忽略。

参数

X形状为 (n_samples, n_features) 的 numpy 数组

输入样本。

y已忽略

未使用,根据约定为了 API 一致性而存在。

返回值

self对象

已拟合的估计器。

fit_predict(X, y=None)

首先拟合检测器,然后预测特定样本是否为异常值。y 在无监督模型中被忽略。

参数

X形状为 (n_samples, n_features) 的 numpy 数组

输入样本。

y已忽略

未使用,根据约定为了 API 一致性而存在。

返回值

outlier_labels形状为 (n_samples,) 的 numpy 数组

对于每个观测值,根据已拟合的模型判断是否应将其视为异常值。0 表示正常值,1 表示异常值。

自 0.6.9 版本起已弃用: fit_predict 将在 pyod 0.8.0 中移除;为了保持一致性,将替换为先调用 fit 函数,然后访问 labels_ 属性。

fit_predict_score(X, y, scoring='roc_auc_score')

拟合检测器,对样本进行预测,并使用预定义指标(例如 ROC)评估模型。

参数

X形状为 (n_samples, n_features) 的 numpy 数组

输入样本。

y已忽略

未使用,根据约定为了 API 一致性而存在。

scoringstr,可选 (默认值=’roc_auc_score’)

评估指标

  • ‘roc_auc_score’: ROC 分数

  • ‘prc_n_score’: Precision @ rank n 分数

返回值

score : float

自 0.6.9 版本起已弃用: fit_predict_score 将在 pyod 0.8.0 中移除;为了保持一致性,将替换为先调用 fit 函数,然后访问 labels_ 属性。评分可以通过调用评估方法(例如 AUC ROC)来完成。

get_params(deep=True)

获取此估计器的参数。

详见 https://scikit-learn.cn/stable/modules/generated/sklearn.base.BaseEstimator.html 和 sklearn/base.py 获取更多信息。

参数

deepbool,可选 (默认值=True)

如果为 True,将返回此估计器以及其中包含的作为估计器的子对象的参数。

返回值

params从字符串到任意类型的映射

参数名称与其值的映射。

predict(X, return_confidence=False)

预测特定样本是否为异常值。

参数

X形状为 (n_samples, n_features) 的 numpy 数组

输入样本。

return_confidenceboolean,可选 (默认值=False)

如果为 True,则同时返回预测的置信度。

返回值

outlier_labels形状为 (n_samples,) 的 numpy 数组

对于每个观测值,根据已拟合的模型判断是否应将其视为异常值。0 表示正常值,1 表示异常值。

confidence形状为 (n_samples,) 的 numpy 数组。

仅当 return_confidence 设置为 True 时返回。

predict_confidence(X)

预测模型在稍微不同的训练集下做出相同预测的置信度。详细信息请参阅 [BPVD20]

参数

X形状为 (n_samples, n_features) 的 numpy 数组

输入样本。

返回值

confidence形状为 (n_samples,) 的 numpy 数组

对于每个观测值,表示如果在训练集受到扰动时模型会多么一致地做出相同的预测。返回一个概率,范围在 [0,1]。

predict_proba(X, method='linear', return_confidence=False)

预测样本为异常值的概率。有两种可能的方法

  1. 简单使用 Min-max 转换将异常值分数线性变换到 [0,1] 的范围。模型必须先拟合。

  2. 使用统一的分数,详细信息请参阅 [BKKSZ11]

参数

X形状为 (n_samples, n_features) 的 numpy 数组

输入样本。

methodstr,可选 (默认值=’linear’)

概率转换方法。必须是 ‘linear’ 或 ‘unify’ 之一。

return_confidenceboolean,可选 (默认值=False)

如果为 True,则同时返回预测的置信度。

返回值

outlier_probability形状为 (n_samples, n_classes) 的 numpy 数组

对于每个观测值,根据已拟合的模型判断是否应将其视为异常值。返回异常值概率,范围在 [0,1]。注意,这取决于类别数量,默认情况下为 2 个类别 ([正常概率, 异常概率])。

predict_with_rejection(X, T=32, return_stats=False, delta=0.1, c_fp=1, c_fn=1, c_r=-1)
预测特定样本是否为异常值,

允许检测器拒绝 (即输出 = -2) 低置信度的预测。

参数

X形状为 (n_samples, n_features) 的 numpy 数组

输入样本。

Tint,可选 (默认值=32)

它允许将拒绝阈值设置为 1-2exp(-T)。T 的值越高,拒绝越多。

return_stats: bool,可选 (默认值 = False)

如果为 True,则同时返回三个附加的浮点值:估计拒绝率、拒绝率上限和成本上限。

delta: float,可选 (默认值 = 0.1)

拒绝率上限以概率 1-delta 成立。

c_fp, c_fn, c_r: float (正值),可选 (默认值 = [1,1, contamination])

误报预测 (c_fp)、漏报预测 (c_fn) 和拒绝 (c_r) 的成本。

返回值

outlier_labels形状为 (n_samples,) 的 numpy 数组

对于每个观测值,根据已拟合的模型判断是否应将其视为异常值。0 表示正常值,1 表示异常值,-2 表示拒绝。

expected_rejection_rate: float,如果 return_stats 为 True;upperbound_rejection_rate: float,如果 return_stats 为 True;upperbound_cost: float,如果 return_stats 为 True;

set_params(**params)

设置此估计器的参数。此方法适用于简单估计器和嵌套对象(例如管道)。嵌套对象的参数形式为 <component>__<parameter>,以便可以更新嵌套对象的每个组件。

详见 https://scikit-learn.cn/stable/modules/generated/sklearn.base.BaseEstimator.html 和 sklearn/base.py 获取更多信息。

返回值

self : object

pyod.models.gmm module

基于高斯混合模型 (GMM) 的异常值检测。

class pyod.models.gmm.GMM(n_components=1, covariance_type='full', tol=0.001, reg_covar=1e-06, max_iter=100, n_init=1, init_params='kmeans', weights_init=None, means_init=None, precisions_init=None, random_state=None, warm_start=False, contamination=0.1)[source]

基础类: BaseDetector

封装了 scikit-learn 高斯混合模型,具有更多功能。无监督异常值检测。

详细信息请参阅 [BAgg15] 第 2 章。

参数

n_componentsint, 默认=1

混合成分的数量。

covariance_type{‘full’, ‘tied’, ‘diag’, ‘spherical’}, 默认=’full’

描述要使用的协方差参数类型的字符串。

tolfloat, 默认=1e-3

收敛阈值。当下界平均增益低于此阈值时,EM 迭代将停止。

reg_covarfloat, 默认=1e-6

添加到协方差对角线的非负正则化。确保协方差矩阵都是正定的。

max_iterint, 默认=100

要执行的 EM 迭代次数。

n_initint, 默认=1

要执行的初始化次数。保留最佳结果。

init_params{‘kmeans’, ‘random’}, 默认=’kmeans’

用于初始化权重、均值和精度的方s。

weights_init形状为 (n_components, ) 的 array-like, 默认=None

用户提供的初始权重。如果为 None,则使用 init_params 方法初始化权重。

means_init形状为 (n_components, n_features) 的 array-like, 默认=None

用户提供的初始均值。如果为 None,则使用 init_params 方法初始化均值。

precisions_initarray-like, 默认=None

用户提供的初始精度(协方差矩阵的逆)。如果为 None,则使用 ‘init_params’ 方法初始化精度。

random_stateint, RandomState 实例或 None, 默认=None

控制用于初始化参数的方法的随机种子。

warm_start布尔型, 默认值为 False

如果‘warm_start’为 True,则上一次拟合的解决方案将用作下一次调用 fit() 的初始化。

verbose整型, 默认值为 0

启用详细输出。

verbose_interval整型, 默认值为 10

下一次打印之前的迭代次数。

contaminationfloat,范围 (0., 0.5),可选 (默认值=0.1)

数据集的污染比例。

属性

weights_数组类型, 形状为 (n_components,)

各混合成分的权重。

means_数组类型, 形状为 (n_components, n_features)

各混合成分的均值。

covariances_数组类型

各混合成分的协方差。

precisions_数组类型

混合中各成分的精度矩阵。

precisions_cholesky_数组类型

各混合成分的精度矩阵的 Cholesky 分解。

converged_布尔型

如果 fit() 达到收敛则为 True,否则为 False。

n_iter_整型

EM 最佳拟合达到收敛所使用的步数。

lower_bound_浮点型

EM 最佳拟合对数似然(训练数据相对于模型)的下界值。

decision_scores_numpy 数组, 形状为 (n_samples,)

训练数据的异常值分数。

threshold_浮点型

阈值基于 contamination。它是 decision_scores_n_samples * contamination 个最异常样本的分数。计算此阈值是为了生成二元异常值标签。

labels_整型, 0 或 1

训练数据的二元标签。0 表示正常值,1 表示异常值/异常。它是通过将 threshold_ 应用于 decision_scores_ 生成的。

compute_rejection_stats(T=32, delta=0.1, c_fp=1, c_fn=1, c_r=-1, verbose=False)
为无监督检测器添加拒绝选项。

这伴随着保证:预期拒绝率的估计值 (return_rejectrate=True),拒绝率的上限 (return_ub_rejectrate= True),以及成本的上限 (return_ub_cost=True)。

参数

T: int,可选 (默认值=32)

它允许将拒绝阈值设置为 1-2exp(-T)。T 的值越高,拒绝越多。

delta: float,可选 (默认值 = 0.1)

拒绝率上限以概率 1-delta 成立。

c_fp, c_fn, c_r: float (正值),

可选 (默认值 = [1,1, contamination]) 对应于误报预测 (c_fp)、漏报预测 (c_fn) 和拒绝 (c_r) 的成本。

verbose: bool,可选 (默认值 = False)

如果为 True,则打印预期拒绝率、拒绝率上限和成本上限。

返回值

expected_rejection_rate: float,预期拒绝率;upperbound_rejection_rate: float,拒绝率上限

概率 1-delta 满足;

upperbound_cost: float,成本上限;

decision_function(X)[source]

使用已拟合的检测器预测 X 的原始异常分数。

输入样本的异常分数是根据不同的检测器算法计算的。为了一致性,异常值被赋予较大的异常分数。

参数

X形状为 (n_samples, n_features) 的 numpy 数组

训练输入样本。仅当基础估计器支持时,才接受稀疏矩阵。

返回值

anomaly_scores形状为 (n_samples,) 的 numpy 数组

输入样本的异常分数。

fit(X, y=None)[source]

拟合检测器。y 在无监督方法中被忽略。

参数

X形状为 (n_samples, n_features) 的 numpy 数组

输入样本。

y已忽略

未使用,根据约定为了 API 一致性而存在。

sample_weight数组类型, 形状为 (n_samples,)

每个样本的权重。按每个样本重新调整 C。更高的权重迫使分类器更强调这些点。

返回值

self对象

已拟合的估计器。

fit_predict(X, y=None)

首先拟合检测器,然后预测特定样本是否为异常值。y 在无监督模型中被忽略。

参数

X形状为 (n_samples, n_features) 的 numpy 数组

输入样本。

y已忽略

未使用,根据约定为了 API 一致性而存在。

返回值

outlier_labels形状为 (n_samples,) 的 numpy 数组

对于每个观测值,根据已拟合的模型判断是否应将其视为异常值。0 表示正常值,1 表示异常值。

自 0.6.9 版本起已弃用: fit_predict 将在 pyod 0.8.0 中移除;为了保持一致性,将替换为先调用 fit 函数,然后访问 labels_ 属性。

fit_predict_score(X, y, scoring='roc_auc_score')

拟合检测器,对样本进行预测,并使用预定义指标(例如 ROC)评估模型。

参数

X形状为 (n_samples, n_features) 的 numpy 数组

输入样本。

y已忽略

未使用,根据约定为了 API 一致性而存在。

scoringstr,可选 (默认值=’roc_auc_score’)

评估指标

  • ‘roc_auc_score’: ROC 分数

  • ‘prc_n_score’: Precision @ rank n 分数

返回值

score : float

自 0.6.9 版本起已弃用: fit_predict_score 将在 pyod 0.8.0 中移除;为了保持一致性,将替换为先调用 fit 函数,然后访问 labels_ 属性。评分可以通过调用评估方法(例如 AUC ROC)来完成。

property precisions_

混合中各成分的精度矩阵。scikit-learn 高斯混合模型属性的装饰器。

property precisions_cholesky_
精度矩阵的 Cholesky 分解

各混合成分的。

scikit-learn 高斯混合模型属性的装饰器。

predict(X, return_confidence=False)

预测特定样本是否为异常值。

参数

X形状为 (n_samples, n_features) 的 numpy 数组

输入样本。

return_confidenceboolean,可选 (默认值=False)

如果为 True,则同时返回预测的置信度。

返回值

outlier_labels形状为 (n_samples,) 的 numpy 数组

对于每个观测值,根据已拟合的模型判断是否应将其视为异常值。0 表示正常值,1 表示异常值。

confidence形状为 (n_samples,) 的 numpy 数组。

仅当 return_confidence 设置为 True 时返回。

predict_confidence(X)

预测模型在略微不同的训练集下做出相同预测的置信度。参见 [BPVD20]

参数

X形状为 (n_samples, n_features) 的 numpy 数组

输入样本。

返回值

confidence形状为 (n_samples,) 的 numpy 数组

对于每个观测值,表示如果在训练集受到扰动时模型会多么一致地做出相同的预测。返回一个概率,范围在 [0,1]。

predict_proba(X, method='linear', return_confidence=False)

预测样本为异常值的概率。有两种可能的方法

  1. 简单使用 Min-max 转换将异常值分数线性变换到 [0,1] 的范围。模型必须先拟合。

  2. 使用统一分数,参见 [BKKSZ11]

参数

X形状为 (n_samples, n_features) 的 numpy 数组

输入样本。

methodstr,可选 (默认值=’linear’)

概率转换方法。必须是 ‘linear’ 或 ‘unify’ 之一。

return_confidenceboolean,可选 (默认值=False)

如果为 True,则同时返回预测的置信度。

返回值

outlier_probability形状为 (n_samples, n_classes) 的 numpy 数组

对于每个观测值,根据已拟合的模型判断是否应将其视为异常值。返回异常值概率,范围在 [0,1]。注意,这取决于类别数量,默认情况下为 2 个类别 ([正常概率, 异常概率])。

predict_with_rejection(X, T=32, return_stats=False, delta=0.1, c_fp=1, c_fn=1, c_r=-1)
预测特定样本是否为异常值,

允许检测器拒绝 (即输出 = -2) 低置信度的预测。

参数

X形状为 (n_samples, n_features) 的 numpy 数组

输入样本。

Tint,可选 (默认值=32)

它允许将拒绝阈值设置为 1-2exp(-T)。T 的值越高,拒绝越多。

return_stats: bool,可选 (默认值 = False)

如果为 True,则同时返回三个附加的浮点值:估计拒绝率、拒绝率上限和成本上限。

delta: float,可选 (默认值 = 0.1)

拒绝率上限以概率 1-delta 成立。

c_fp, c_fn, c_r: float (正值),可选 (默认值 = [1,1, contamination])

误报预测 (c_fp)、漏报预测 (c_fn) 和拒绝 (c_r) 的成本。

返回值

outlier_labels形状为 (n_samples,) 的 numpy 数组

对于每个观测值,根据已拟合的模型判断是否应将其视为异常值。0 表示正常值,1 表示异常值,-2 表示拒绝。

expected_rejection_rate: float,如果 return_stats 为 True;upperbound_rejection_rate: float,如果 return_stats 为 True;upperbound_cost: float,如果 return_stats 为 True;

pyod.models.hbos 模块

基于直方图的异常值检测 (HBOS)

class pyod.models.hbos.HBOS(n_bins=10, alpha=0.1, tol=0.5, contamination=0.1)[source]

基础类: BaseDetector

基于直方图的异常值检测 (HBOS) 是一种高效的无监督方法。它假设特征独立性,并通过构建直方图计算异常程度。有关详细信息,请参见 [BGD12]

支持两种版本的 HBOS:- 静态 bin 数量:对所有特征使用固定的 bin 数量。- 自动 bin 数量:每个特征使用根据 Birge-Rozenblac 方法被认为最佳的 bin 数量

[BBirgeR06])。

参数

n_bins整型 或 字符串, 可选 (默认值=10)

bin 的数量。“auto”使用 birge-rozenblac 方法自动选择每个特征的最佳 bin 数量。

alpha浮点型 在 (0, 1) 之间, 可选 (默认值=0.1)

防止溢出的正则化器。

tol浮点型 在 (0, 1) 之间, 可选 (默认值=0.5)

用于决定处理落到 bin 外部样本时的灵活性的参数。

contaminationfloat,范围 (0., 0.5),可选 (默认值=0.1)

数据集的污染程度,即数据集中异常值的比例。在拟合时用于定义决策函数的阈值。

属性

bin_edges_numpy 数组, 形状为 (n_bins + 1, n_features )

bin 的边缘。

hist_numpy 数组, 形状为 (n_bins, n_features)

每个直方图的密度。

decision_scores_numpy 数组, 形状为 (n_samples,)

训练数据的异常值分数。分数越高表示越异常。异常值往往得分较高。此值在检测器拟合后可用。

threshold_浮点型

阈值基于 contamination。它是 decision_scores_n_samples * contamination 个最异常样本的分数。计算此阈值是为了生成二元异常值标签。

labels_整型, 0 或 1

训练数据的二元标签。0 表示正常值,1 表示异常值/异常。它是通过将 threshold_ 应用于 decision_scores_ 生成的。

compute_rejection_stats(T=32, delta=0.1, c_fp=1, c_fn=1, c_r=-1, verbose=False)
为无监督检测器添加拒绝选项。

这伴随着保证:预期拒绝率的估计值 (return_rejectrate=True),拒绝率的上限 (return_ub_rejectrate= True),以及成本的上限 (return_ub_cost=True)。

参数

T: int,可选 (默认值=32)

它允许将拒绝阈值设置为 1-2exp(-T)。T 的值越高,拒绝越多。

delta: float,可选 (默认值 = 0.1)

拒绝率上限以概率 1-delta 成立。

c_fp, c_fn, c_r: float (正值),

可选 (默认值 = [1,1, contamination]) 对应于误报预测 (c_fp)、漏报预测 (c_fn) 和拒绝 (c_r) 的成本。

verbose: bool,可选 (默认值 = False)

如果为 True,则打印预期拒绝率、拒绝率上限和成本上限。

返回值

expected_rejection_rate: float,预期拒绝率;upperbound_rejection_rate: float,拒绝率上限

概率 1-delta 满足;

upperbound_cost: float,成本上限;

decision_function(X)[source]

使用已拟合的检测器预测 X 的原始异常分数。

输入样本的异常分数是根据不同的检测器算法计算的。为了一致性,异常值被赋予较大的异常分数。

参数

X形状为 (n_samples, n_features) 的 numpy 数组

训练输入样本。仅当基础估计器支持时,才接受稀疏矩阵。

返回值

anomaly_scores形状为 (n_samples,) 的 numpy 数组

输入样本的异常分数。

fit(X, y=None)[source]

拟合检测器。y 在无监督方法中被忽略。

参数

X形状为 (n_samples, n_features) 的 numpy 数组

输入样本。

y已忽略

未使用,根据约定为了 API 一致性而存在。

返回值

self对象

已拟合的估计器。

fit_predict(X, y=None)

首先拟合检测器,然后预测特定样本是否为异常值。y 在无监督模型中被忽略。

参数

X形状为 (n_samples, n_features) 的 numpy 数组

输入样本。

y已忽略

未使用,根据约定为了 API 一致性而存在。

返回值

outlier_labels形状为 (n_samples,) 的 numpy 数组

对于每个观测值,根据已拟合的模型判断是否应将其视为异常值。0 表示正常值,1 表示异常值。

自 0.6.9 版本起已弃用: fit_predict 将在 pyod 0.8.0 中移除;为了保持一致性,将替换为先调用 fit 函数,然后访问 labels_ 属性。

fit_predict_score(X, y, scoring=roc_auc_score')

拟合检测器,对样本进行预测,并使用预定义指标(例如 ROC)评估模型。

参数

X形状为 (n_samples, n_features) 的 numpy 数组

输入样本。

y已忽略

未使用,根据约定为了 API 一致性而存在。

scoringstr,可选 (默认值=’roc_auc_score’)

评估指标

  • ‘roc_auc_score’: ROC 分数

  • ‘prc_n_score’: Precision @ rank n 分数

返回值

score : float

自 0.6.9 版本起已弃用: fit_predict_score 将在 pyod 0.8.0 中移除;为了保持一致性,将替换为先调用 fit 函数,然后访问 labels_ 属性。评分可以通过调用评估方法(例如 AUC ROC)来完成。

get_params(deep=True)

获取此估计器的参数。

详见 https://scikit-learn.cn/stable/modules/generated/sklearn.base.BaseEstimator.html 和 sklearn/base.py 获取更多信息。

参数

deepbool,可选 (默认值=True)

如果为 True,将返回此估计器以及其中包含的作为估计器的子对象的参数。

返回值

params从字符串到任意类型的映射

参数名称与其值的映射。

predict(X, return_confidence=False)

预测特定样本是否为异常值。

参数

X形状为 (n_samples, n_features) 的 numpy 数组

输入样本。

return_confidenceboolean,可选 (默认值=False)

如果为 True,则同时返回预测的置信度。

返回值

outlier_labels形状为 (n_samples,) 的 numpy 数组

对于每个观测值,根据已拟合的模型判断是否应将其视为异常值。0 表示正常值,1 表示异常值。

confidence形状为 (n_samples,) 的 numpy 数组。

仅当 return_confidence 设置为 True 时返回。

predict_confidence(X)

预测模型在略微不同的训练集下做出相同预测的置信度。参见 [BPVD20]

参数

X形状为 (n_samples, n_features) 的 numpy 数组

输入样本。

返回值

confidence形状为 (n_samples,) 的 numpy 数组

对于每个观测值,表示如果在训练集受到扰动时模型会多么一致地做出相同的预测。返回一个概率,范围在 [0,1]。

predict_proba(X, method='linear', return_confidence=False)

预测样本为异常值的概率。有两种可能的方法

  1. 简单使用 Min-max 转换将异常值分数线性变换到 [0,1] 的范围。模型必须先拟合。

  2. 使用统一分数,参见 [BKKSZ11]

参数

X形状为 (n_samples, n_features) 的 numpy 数组

输入样本。

methodstr,可选 (默认值=’linear’)

概率转换方法。必须是 ‘linear’ 或 ‘unify’ 之一。

return_confidenceboolean,可选 (默认值=False)

如果为 True,则同时返回预测的置信度。

返回值

outlier_probability形状为 (n_samples, n_classes) 的 numpy 数组

对于每个观测值,根据已拟合的模型判断是否应将其视为异常值。返回异常值概率,范围在 [0,1]。注意,这取决于类别数量,默认情况下为 2 个类别 ([正常概率, 异常概率])。

predict_with_rejection(X, T=32, return_stats=False, delta=0.1, c_fp=1, c_fn=1, c_r=-1)
预测特定样本是否为异常值,

允许检测器拒绝 (即输出 = -2) 低置信度的预测。

参数

X形状为 (n_samples, n_features) 的 numpy 数组

输入样本。

Tint,可选 (默认值=32)

它允许将拒绝阈值设置为 1-2exp(-T)。T 的值越高,拒绝越多。

return_stats: bool,可选 (默认值 = False)

如果为 True,则同时返回三个附加的浮点值:估计拒绝率、拒绝率上限和成本上限。

delta: float,可选 (默认值 = 0.1)

拒绝率上限以概率 1-delta 成立。

c_fp, c_fn, c_r: float (正值),可选 (默认值 = [1,1, contamination])

误报预测 (c_fp)、漏报预测 (c_fn) 和拒绝 (c_r) 的成本。

返回值

outlier_labels形状为 (n_samples,) 的 numpy 数组

对于每个观测值,根据已拟合的模型判断是否应将其视为异常值。0 表示正常值,1 表示异常值,-2 表示拒绝。

expected_rejection_rate: float,如果 return_stats 为 True;upperbound_rejection_rate: float,如果 return_stats 为 True;upperbound_cost: float,如果 return_stats 为 True;

set_params(**params)

设置此估计器的参数。此方法适用于简单估计器和嵌套对象(例如管道)。嵌套对象的参数形式为 <component>__<parameter>,以便可以更新嵌套对象的每个组件。

详见 https://scikit-learn.cn/stable/modules/generated/sklearn.base.BaseEstimator.html 和 sklearn/base.py 获取更多信息。

返回值

self : object

pyod.models.iforest 模块

IsolationForest 异常值检测器。基于 scikit-learn 库实现。

class pyod.models.iforest.IForest(n_estimators=100, max_samples='auto', contamination=0.1, max_features=1.0, bootstrap=False, n_jobs=1, behaviour='old', random_state=None, verbose=0)[source]

基础类: BaseDetector

scikit-learn Isolation Forest 的包装器,具有更多功能。

IsolationForest 通过随机选择一个特征,然后在所选特征的最大值和最小值之间随机选择一个分割值来“隔离”观测值。有关详细信息,请参见 [BLTZ08, BLTZ12]

由于递归分区可以用树结构表示,隔离一个样本所需的分割次数等同于从根节点到终止节点的路径长度。

这种路径长度,在一组随机树上取平均,是衡量正常性的指标,也是我们的决策函数。

随机分区为异常值产生明显更短的路径。因此,当一组随机树共同为特定样本产生更短的路径长度时,它们极有可能是异常值。

参数

n_estimators整型, 可选 (默认值=100)

集成中基础估计器的数量。

max_samples整型 或 浮点型, 可选 (默认值=”auto”)

从 X 中抽取样本来训练每个基础估计器的数量。

  • 如果是整型,则抽取 max_samples 个样本。

  • 如果是浮点型,则抽取 max_samples * X.shape[0] 个样本。

  • 如果是“auto”,则 max_samples=min(256, n_samples)

如果 max_samples 大于提供的样本数量,则所有树将使用所有样本(不进行抽样)。

contaminationfloat,范围 (0., 0.5),可选 (默认值=0.1)

数据集的污染程度,即数据集中异常值的比例。在拟合时用于定义决策函数的阈值。

max_featuresint 或 float, 可选 (默认=1.0)

从 X 中抽取用于训练每个基础估计器的特征数量。

  • 如果是 int,则抽取 max_features 个特征。

  • 如果是 float,则抽取 max_features * X.shape[1] 个特征。

bootstrap布尔型, 可选 (默认值=False)

如果为 True,则在从训练数据中替换抽样得到的随机子集上拟合单个树。如果为 False,则进行不替换抽样。

n_jobs整型, 可选 (默认值=1)

用于 fitpredict 并行运行的作业数。如果为 -1,则作业数设置为核心数。

behaviour字符串, 默认值=’old’

decision_function 的行为,可以是“old”或“new”。将 behaviour='new' 传递给 decision_function 使其改变以匹配其他异常检测算法 API,这将是未来的默认行为。正如 offset_ 属性文档中详细解释的那样,decision_function 变得依赖于 contamination 参数,使得 0 成为检测异常值的自然阈值。

在 0.7.0 版中新增:behaviour 在 0.7.0 中添加,用于向后兼容。

自 0.20 版起已弃用:behaviour='old' 在 sklearn 0.20 中已弃用,在 0.22 中将不再可能使用。

自 0.22 版起已弃用:behaviour 参数将在 sklearn 0.22 中弃用,并在 0.24 中移除。

警告

仅适用于 sklearn 0.20 及更高版本。

random_stateint, RandomState 实例或 None, 可选 (默认=None)

如果是 int,random_state 是随机数生成器使用的种子;如果是 RandomState 实例,random_state 是随机数生成器;如果是 None,随机数生成器是 np.random 使用的 RandomState 实例。

verboseint, 可选 (默认=0)

控制树构建过程的详细程度。

属性

estimators_DecisionTreeClassifier 列表

拟合的子估计器的集合。

estimators_samples_数组列表

为每个基础估计器抽取的样本子集(即袋内样本)。

max_samples_整型

实际样本数量

decision_scores_numpy 数组, 形状为 (n_samples,)

训练数据的异常值分数。分数越高表示越异常。异常值往往得分较高。此值在检测器拟合后可用。

threshold_浮点型

阈值基于 contamination。它是 decision_scores_n_samples * contamination 个最异常样本的分数。计算此阈值是为了生成二元异常值标签。

labels_整型, 0 或 1

训练数据的二元标签。0 表示正常值,1 表示异常值/异常。它是通过将 threshold_ 应用于 decision_scores_ 生成的。

compute_rejection_stats(T=32, delta=0.1, c_fp=1, c_fn=1, c_r=-1, verbose=False)
为无监督检测器添加拒绝选项。

这伴随着保证:预期拒绝率的估计值 (return_rejectrate=True),拒绝率的上限 (return_ub_rejectrate= True),以及成本的上限 (return_ub_cost=True)。

参数

T: int,可选 (默认值=32)

它允许将拒绝阈值设置为 1-2exp(-T)。T 的值越高,拒绝越多。

delta: float,可选 (默认值 = 0.1)

拒绝率上限以概率 1-delta 成立。

c_fp, c_fn, c_r: float (正值),

可选 (默认值 = [1,1, contamination]) 对应于误报预测 (c_fp)、漏报预测 (c_fn) 和拒绝 (c_r) 的成本。

verbose: bool,可选 (默认值 = False)

如果为 True,则打印预期拒绝率、拒绝率上限和成本上限。

返回值

expected_rejection_rate: float,预期拒绝率;upperbound_rejection_rate: float,拒绝率上限

概率 1-delta 满足;

upperbound_cost: float,成本上限;

decision_function(X)[source]

使用已拟合的检测器预测 X 的原始异常分数。

输入样本的异常分数是根据不同的检测器算法计算的。为了一致性,异常值被赋予较大的异常分数。

参数

X形状为 (n_samples, n_features) 的 numpy 数组

训练输入样本。仅当基础估计器支持时,才接受稀疏矩阵。

返回值

anomaly_scores形状为 (n_samples,) 的 numpy 数组

输入样本的异常分数。

property feature_importances_

基于不纯度的特征重要性。值越高,特征越重要。特征的重要性计算为其带来的(归一化)准则总减少量。它也称为 Gini 重要性。

基于不纯度的特征重要性对于高基数特征(许多唯一值)可能具有误导性。作为替代方法,请参见 https://scikit-learn.cn/stable/modules/generated/sklearn.inspection.permutation_importance.html

返回值

feature_importances_ndarray, 形状为 (n_features,)

此数组值的总和为 1,除非所有树都是仅包含根节点的单节点树,在这种情况下它将是一个零数组。

fit(X, y=None)[source]

拟合检测器。y 在无监督方法中被忽略。

参数

X形状为 (n_samples, n_features) 的 numpy 数组

输入样本。

y已忽略

未使用,根据约定为了 API 一致性而存在。

返回值

self对象

已拟合的估计器。

fit_predict(X, y=None)

首先拟合检测器,然后预测特定样本是否为异常值。y 在无监督模型中被忽略。

参数

X形状为 (n_samples, n_features) 的 numpy 数组

输入样本。

y已忽略

未使用,根据约定为了 API 一致性而存在。

返回值

outlier_labels形状为 (n_samples,) 的 numpy 数组

对于每个观测值,根据已拟合的模型判断是否应将其视为异常值。0 表示正常值,1 表示异常值。

自 0.6.9 版本起已弃用: fit_predict 将在 pyod 0.8.0 中移除;为了保持一致性,将替换为先调用 fit 函数,然后访问 labels_ 属性。

fit_predict_score(X, y, scoring='roc_auc_score')

拟合检测器,对样本进行预测,并使用预定义指标(例如 ROC)评估模型。

参数

X形状为 (n_samples, n_features) 的 numpy 数组

输入样本。

y已忽略

未使用,根据约定为了 API 一致性而存在。

scoringstr,可选 (默认值=’roc_auc_score’)

评估指标

  • ‘roc_auc_score’: ROC 分数

  • ‘prc_n_score’: Precision @ rank n 分数

返回值

score : float

自 0.6.9 版本起已弃用: fit_predict_score 将在 pyod 0.8.0 中移除;为了保持一致性,将替换为先调用 fit 函数,然后访问 labels_ 属性。评分可以通过调用评估方法(例如 AUC ROC)来完成。

property max_samples_

实际样本数量。scikit-learn Isolation Forest 属性的装饰器。

property n_features_in_

拟合期间看到的特征数量。scikit-learn Isolation Forest 属性的装饰器。

property offset_

用于根据原始分数定义决策函数的偏移量。scikit-learn Isolation Forest 属性的装饰器。

predict(X, return_confidence=False)

预测特定样本是否为异常值。

参数

X形状为 (n_samples, n_features) 的 numpy 数组

输入样本。

return_confidenceboolean,可选 (默认值=False)

如果为 True,则同时返回预测的置信度。

返回值

outlier_labels形状为 (n_samples,) 的 numpy 数组

对于每个观测值,根据已拟合的模型判断是否应将其视为异常值。0 表示正常值,1 表示异常值。

confidence形状为 (n_samples,) 的 numpy 数组。

仅当 return_confidence 设置为 True 时返回。

predict_confidence(X)

预测模型在略微不同的训练集下做出相同预测的置信度。参见 [BPVD20]

参数

X形状为 (n_samples, n_features) 的 numpy 数组

输入样本。

返回值

confidence形状为 (n_samples,) 的 numpy 数组

对于每个观测值,表示如果在训练集受到扰动时模型会多么一致地做出相同的预测。返回一个概率,范围在 [0,1]。

predict_proba(X, method='linear', return_confidence=False)

预测样本为异常值的概率。有两种可能的方法

  1. 简单使用 Min-max 转换将异常值分数线性变换到 [0,1] 的范围。模型必须先拟合。

  2. 使用统一分数,参见 [BKKSZ11]

参数

X形状为 (n_samples, n_features) 的 numpy 数组

输入样本。

methodstr,可选 (默认值=’linear’)

概率转换方法。必须是 ‘linear’ 或 ‘unify’ 之一。

return_confidenceboolean,可选 (默认值=False)

如果为 True,则同时返回预测的置信度。

返回值

outlier_probability形状为 (n_samples, n_classes) 的 numpy 数组

对于每个观测值,根据已拟合的模型判断是否应将其视为异常值。返回异常值概率,范围在 [0,1]。注意,这取决于类别数量,默认情况下为 2 个类别 ([正常概率, 异常概率])。

predict_with_rejection(X, T=32, return_stats=False, delta=0.1, c_fp=1, c_fn=1, c_r=-1)
预测特定样本是否为异常值,

允许检测器拒绝 (即输出 = -2) 低置信度的预测。

参数

X形状为 (n_samples, n_features) 的 numpy 数组

输入样本。

Tint,可选 (默认值=32)

它允许将拒绝阈值设置为 1-2exp(-T)。T 的值越高,拒绝越多。

return_stats: bool,可选 (默认值 = False)

如果为 True,则同时返回三个附加的浮点值:估计拒绝率、拒绝率上限和成本上限。

delta: float,可选 (默认值 = 0.1)

拒绝率上限以概率 1-delta 成立。

c_fp, c_fn, c_r: float (正值),可选 (默认值 = [1,1, contamination])

误报预测 (c_fp)、漏报预测 (c_fn) 和拒绝 (c_r) 的成本。

返回值

outlier_labels形状为 (n_samples,) 的 numpy 数组

对于每个观测值,根据已拟合的模型判断是否应将其视为异常值。0 表示正常值,1 表示异常值,-2 表示拒绝。

expected_rejection_rate: float,如果 return_stats 为 True;upperbound_rejection_rate: float,如果 return_stats 为 True;upperbound_cost: float,如果 return_stats 为 True;

pyod.models.inne 模块

基于最近邻集成方法的隔离异常检测。部分代码改编自 https://github.com/xhan97/inne

class pyod.models.inne.INNE(n_estimators=200, max_samples='auto', contamination=0.1, random_state=None)[source]

基础类: BaseDetector

基于最近邻集成方法的隔离异常检测。

INNE 算法使用最近邻集成来隔离异常值。它使用子样本将数据空间划分为区域,并确定每个区域的隔离分数。由于每个区域都适应局部分布,计算出的隔离分数是相对于局部邻域的局部度量,使其能够检测全局和局部异常值。INNE 具有线性时间复杂度,可以高效处理具有复杂分布的大型高维数据集。

有关详细信息,请参见 [BBTA+18]

参数

n_estimators整型, 默认值=200

集成中基础估计器的数量。

max_samples整型 或 浮点型, 可选 (默认值=”auto”)

从 X 中抽取样本来训练每个基础估计器的数量。

  • 如果是整型,则抽取 max_samples 个样本。

  • 如果是浮点型,则抽取 max_samples * X.shape[0] 个样本。

  • 如果是“auto”,则 max_samples=min(8, n_samples)

contaminationfloat,范围 (0., 0.5),可选 (默认值=0.1)

数据集的污染程度,即数据集中异常值的比例。在拟合时用于定义决策函数的阈值。

random_stateint, RandomState 实例或 None, 可选 (默认=None)

如果是 int,random_state 是随机数生成器使用的种子;如果是 RandomState 实例,random_state 是随机数生成器;如果是 None,随机数生成器是 np.random 使用的 RandomState 实例。

属性

max_samples_整型

实际样本数量

decision_scores_numpy 数组, 形状为 (n_samples,)

训练数据的异常值分数。分数越高表示越异常。异常值往往得分较高。此值在检测器拟合后可用。

threshold_浮点型

阈值基于 contamination。它是 decision_scores_n_samples * contamination 个最异常样本的分数。计算此阈值是为了生成二元异常值标签。

labels_整型, 0 或 1

训练数据的二元标签。0 表示正常值,1 表示异常值/异常。它是通过将 threshold_ 应用于 decision_scores_ 生成的。

compute_rejection_stats(T=32, delta=0.1, c_fp=1, c_fn=1, c_r=-1, verbose=False)
为无监督检测器添加拒绝选项。

这伴随着保证:预期拒绝率的估计值 (return_rejectrate=True),拒绝率的上限 (return_ub_rejectrate= True),以及成本的上限 (return_ub_cost=True)。

参数

T: int,可选 (默认值=32)

它允许将拒绝阈值设置为 1-2exp(-T)。T 的值越高,拒绝越多。

delta: float,可选 (默认值 = 0.1)

拒绝率上限以概率 1-delta 成立。

c_fp, c_fn, c_r: float (正值),

可选 (默认值 = [1,1, contamination]) 对应于误报预测 (c_fp)、漏报预测 (c_fn) 和拒绝 (c_r) 的成本。

verbose: bool,可选 (默认值 = False)

如果为 True,则打印预期拒绝率、拒绝率上限和成本上限。

返回值

expected_rejection_rate: float,预期拒绝率;upperbound_rejection_rate: float,拒绝率上限

概率 1-delta 满足;

upperbound_cost: float,成本上限;

decision_function(X)[source]

使用已拟合的检测器预测 X 的原始异常分数。

输入样本的异常分数是根据不同的检测器算法计算的。为了一致性,异常值被赋予较大的异常分数。

参数

X形状为 (n_samples, n_features) 的 numpy 数组

训练输入样本。

返回值

anomaly_scores形状为 (n_samples,) 的 numpy 数组

输入样本的异常分数。

fit(X, y=None)[source]

拟合检测器。y 在无监督方法中被忽略。

参数

X形状为 (n_samples, n_features) 的 numpy 数组

输入样本。

y已忽略

未使用,根据约定为了 API 一致性而存在。

返回值

self对象

已拟合的估计器。

fit_predict(X, y=None)

首先拟合检测器,然后预测特定样本是否为异常值。y 在无监督模型中被忽略。

参数

X形状为 (n_samples, n_features) 的 numpy 数组

输入样本。

y已忽略

未使用,根据约定为了 API 一致性而存在。

返回值

outlier_labels形状为 (n_samples,) 的 numpy 数组

对于每个观测值,根据已拟合的模型判断是否应将其视为异常值。0 表示正常值,1 表示异常值。

自 0.6.9 版本起已弃用: fit_predict 将在 pyod 0.8.0 中移除;为了保持一致性,将替换为先调用 fit 函数,然后访问 labels_ 属性。

fit_predict_score(X, y, scoring='roc_auc_score')

拟合检测器,对样本进行预测,并使用预定义指标(例如 ROC)评估模型。

参数

X形状为 (n_samples, n_features) 的 numpy 数组

输入样本。

y已忽略

未使用,根据约定为了 API 一致性而存在。

scoringstr,可选 (默认值=’roc_auc_score’)

评估指标

  • ‘roc_auc_score’: ROC 分数

  • ‘prc_n_score’: Precision @ rank n 分数

返回值

score : float

自 0.6.9 版本起已弃用: fit_predict_score 将在 pyod 0.8.0 中移除;为了保持一致性,将替换为先调用 fit 函数,然后访问 labels_ 属性。评分可以通过调用评估方法(例如 AUC ROC)来完成。

get_params(deep=True)

获取此估计器的参数。

详见 https://scikit-learn.cn/stable/modules/generated/sklearn.base.BaseEstimator.html 和 sklearn/base.py 获取更多信息。

参数

deepbool,可选 (默认值=True)

如果为 True,将返回此估计器以及其中包含的作为估计器的子对象的参数。

返回值

params从字符串到任意类型的映射

参数名称与其值的映射。

predict(X, return_confidence=False)

预测特定样本是否为异常值。

参数

X形状为 (n_samples, n_features) 的 numpy 数组

输入样本。

return_confidenceboolean,可选 (默认值=False)

如果为 True,则同时返回预测的置信度。

返回值

outlier_labels形状为 (n_samples,) 的 numpy 数组

对于每个观测值,根据已拟合的模型判断是否应将其视为异常值。0 表示正常值,1 表示异常值。

confidence形状为 (n_samples,) 的 numpy 数组。

仅当 return_confidence 设置为 True 时返回。

predict_confidence(X)

预测模型在略微不同的训练集下做出相同预测的置信度。参见 [BPVD20]

参数

X形状为 (n_samples, n_features) 的 numpy 数组

输入样本。

返回值

confidence形状为 (n_samples,) 的 numpy 数组

对于每个观测值,表示如果在训练集受到扰动时模型会多么一致地做出相同的预测。返回一个概率,范围在 [0,1]。

predict_proba(X, method='linear', return_confidence=False)

预测样本为异常值的概率。有两种可能的方法

  1. 简单使用 Min-max 转换将异常值分数线性变换到 [0,1] 的范围。模型必须先拟合。

  2. 使用统一分数,参见 [BKKSZ11]

参数

X形状为 (n_samples, n_features) 的 numpy 数组

输入样本。

methodstr,可选 (默认值=’linear’)

概率转换方法。必须是 ‘linear’ 或 ‘unify’ 之一。

return_confidenceboolean,可选 (默认值=False)

如果为 True,则同时返回预测的置信度。

返回值

outlier_probability形状为 (n_samples, n_classes) 的 numpy 数组

对于每个观测值,根据已拟合的模型判断是否应将其视为异常值。返回异常值概率,范围在 [0,1]。注意,这取决于类别数量,默认情况下为 2 个类别 ([正常概率, 异常概率])。

predict_with_rejection(X, T=32, return_stats=False, delta=0.1, c_fp=1, c_fn=1, c_r=-1)
预测特定样本是否为异常值,

允许检测器拒绝 (即输出 = -2) 低置信度的预测。

参数

X形状为 (n_samples, n_features) 的 numpy 数组

输入样本。

Tint,可选 (默认值=32)

它允许将拒绝阈值设置为 1-2exp(-T)。T 的值越高,拒绝越多。

return_stats: bool,可选 (默认值 = False)

如果为 True,则同时返回三个附加的浮点值:估计拒绝率、拒绝率上限和成本上限。

delta: float,可选 (默认值 = 0.1)

拒绝率上限以概率 1-delta 成立。

c_fp, c_fn, c_r: float (正值),可选 (默认值 = [1,1, contamination])

误报预测 (c_fp)、漏报预测 (c_fn) 和拒绝 (c_r) 的成本。

返回值

outlier_labels形状为 (n_samples,) 的 numpy 数组

对于每个观测值,根据已拟合的模型判断是否应将其视为异常值。0 表示正常值,1 表示异常值,-2 表示拒绝。

expected_rejection_rate: float,如果 return_stats 为 True;upperbound_rejection_rate: float,如果 return_stats 为 True;upperbound_cost: float,如果 return_stats 为 True;

set_params(**params)

设置此估计器的参数。此方法适用于简单估计器和嵌套对象(例如管道)。嵌套对象的参数形式为 <component>__<parameter>,以便可以更新嵌套对象的每个组件。

详见 https://scikit-learn.cn/stable/modules/generated/sklearn.base.BaseEstimator.html 和 sklearn/base.py 获取更多信息。

返回值

self : object

pyod.models.kde 模块

用于无监督异常值检测的核密度估计 (KDE)。

class pyod.models.kde.KDE(contamination=0.1, bandwidth=1.0, algorithm='auto', leaf_size=30, metric='minkowski', metric_params=None)[source]

基础类: BaseDetector

用于异常值检测的 KDE 类。

对于一个观测值,其负对数概率密度可以看作异常值分数。

有关详细信息,请参见 [BLLP07]

参数

contaminationfloat,范围 (0., 0.5),可选 (默认值=0.1)

数据集的污染程度,即数据集中异常值的比例。在拟合时用于定义决策函数的阈值。

bandwidth浮点型, 可选 (默认值=1.0)

核的带宽。

algorithm{‘auto’, ‘ball_tree’, ‘kd_tree’}, 可选

用于计算核密度估计器的算法

  • ‘ball_tree’ 将使用 BallTree

  • ‘kd_tree’ 将使用 KDTree

  • ‘auto’ 将尝试根据传递给 fit() 方法的值来决定最合适的算法。

leaf_size整型, 可选 (默认值 = 30)

传递给 BallTree 的叶子大小。这会影响构建和查询的速度,以及存储树所需的内存。最佳值取决于问题的性质。

metric字符串 或 可调用对象, 默认值 ‘minkowski’

用于距离计算的度量。可以使用 scikit-learn 或 scipy.spatial.distance 中的任何度量。

如果 metric 是可调用函数,它将对每对实例(行)调用,并记录结果值。可调用函数应接受两个数组作为输入,并返回一个值表示它们之间的距离。这适用于 Scipy 的度量,但效率低于将度量名称作为字符串传递。

不支持距离矩阵。

有效的 method 值包括:

  • 来自 scikit-learn:[‘cityblock’, ‘cosine’, ‘euclidean’, ‘l1’, ‘l2’, ‘manhattan’]

  • 来自 scipy.spatial.distance:[‘braycurtis’, ‘canberra’, ‘chebyshev’, ‘correlation’, ‘dice’, ‘hamming’, ‘jaccard’, ‘kulsinski’, ‘mahalanobis’, ‘matching’, ‘minkowski’, ‘rogerstanimoto’, ‘russellrao’, ‘seuclidean’, ‘sokalmichener’, ‘sokalsneath’, ‘sqeuclidean’, ‘yule’]

有关这些度量的详细信息,请参见 https://scikit-learn.cn/stable/modules/generated/sklearn.metrics.pairwise.pairwise_distances 的文档。

metric_params字典, 可选 (默认值 = None)

度量函数的附加关键字参数。

属性

decision_scores_numpy 数组, 形状为 (n_samples,)

训练数据的异常值分数。分数越高表示越异常。异常值往往得分较高。此值在检测器拟合后可用。

threshold_浮点型

阈值基于 contamination。它是 decision_scores_n_samples * contamination 个最异常样本的分数。计算此阈值是为了生成二元异常值标签。

labels_整型, 0 或 1

训练数据的二元标签。0 表示正常值,1 表示异常值/异常。它是通过将 threshold_ 应用于 decision_scores_ 生成的。

compute_rejection_stats(T=32, delta=0.1, c_fp=1, c_fn=1, c_r=-1, verbose=False)
为无监督检测器添加拒绝选项。

这伴随着保证:预期拒绝率的估计值 (return_rejectrate=True),拒绝率的上限 (return_ub_rejectrate= True),以及成本的上限 (return_ub_cost=True)。

参数

T: int,可选 (默认值=32)

它允许将拒绝阈值设置为 1-2exp(-T)。T 的值越高,拒绝越多。

delta: float,可选 (默认值 = 0.1)

拒绝率上限以概率 1-delta 成立。

c_fp, c_fn, c_r: float (正值),

可选 (默认值 = [1,1, contamination]) 对应于误报预测 (c_fp)、漏报预测 (c_fn) 和拒绝 (c_r) 的成本。

verbose: bool,可选 (默认值 = False)

如果为 True,则打印预期拒绝率、拒绝率上限和成本上限。

返回值

expected_rejection_rate: float,预期拒绝率;upperbound_rejection_rate: float,拒绝率上限

概率 1-delta 满足;

upperbound_cost: float,成本上限;

decision_function(X)[source]

使用已拟合的检测器预测 X 的原始异常分数。

输入样本的异常分数是根据不同的检测器算法计算的。为了一致性,异常值被赋予较大的异常分数。

参数

X形状为 (n_samples, n_features) 的 numpy 数组

训练输入样本。仅当基础估计器支持时,才接受稀疏矩阵。

返回值

anomaly_scores形状为 (n_samples,) 的 numpy 数组

输入样本的异常分数。

fit(X, y=None)[source]

拟合检测器。y 在无监督方法中被忽略。

参数

X形状为 (n_samples, n_features) 的 numpy 数组

输入样本。

y已忽略

未使用,根据约定为了 API 一致性而存在。

返回值

self对象

已拟合的估计器。

fit_predict(X, y=None)

首先拟合检测器,然后预测特定样本是否为异常值。y 在无监督模型中被忽略。

参数

X形状为 (n_samples, n_features) 的 numpy 数组

输入样本。

y已忽略

未使用,根据约定为了 API 一致性而存在。

返回值

outlier_labels形状为 (n_samples,) 的 numpy 数组

对于每个观测值,根据已拟合的模型判断是否应将其视为异常值。0 表示正常值,1 表示异常值。

自 0.6.9 版本起已弃用: fit_predict 将在 pyod 0.8.0 中移除;为了保持一致性,将替换为先调用 fit 函数,然后访问 labels_ 属性。

fit_predict_score(X, y, scoring='roc_auc_score')

拟合检测器,对样本进行预测,并使用预定义指标(例如 ROC)评估模型。

参数

X形状为 (n_samples, n_features) 的 numpy 数组

输入样本。

y已忽略

未使用,根据约定为了 API 一致性而存在。

scoringstr,可选 (默认值=’roc_auc_score’)

评估指标

  • ‘roc_auc_score’: ROC 分数

  • ‘prc_n_score’: Precision @ rank n 分数

返回值

score : float

自 0.6.9 版本起已弃用: fit_predict_score 将在 pyod 0.8.0 中移除;为了保持一致性,将替换为先调用 fit 函数,然后访问 labels_ 属性。评分可以通过调用评估方法(例如 AUC ROC)来完成。

get_params(deep=True)

获取此估计器的参数。

详见 https://scikit-learn.cn/stable/modules/generated/sklearn.base.BaseEstimator.html 和 sklearn/base.py 获取更多信息。

参数

deepbool,可选 (默认值=True)

如果为 True,将返回此估计器以及其中包含的作为估计器的子对象的参数。

返回值

params从字符串到任意类型的映射

参数名称与其值的映射。

predict(X, return_confidence=False)

预测特定样本是否为异常值。

参数

X形状为 (n_samples, n_features) 的 numpy 数组

输入样本。

return_confidenceboolean,可选 (默认值=False)

如果为 True,则同时返回预测的置信度。

返回值

outlier_labels形状为 (n_samples,) 的 numpy 数组

对于每个观测值,根据已拟合的模型判断是否应将其视为异常值。0 表示正常值,1 表示异常值。

confidence形状为 (n_samples,) 的 numpy 数组。

仅当 return_confidence 设置为 True 时返回。

predict_confidence(X)

预测模型在略微不同的训练集下做出相同预测的置信度。参见 [BPVD20]

参数

X形状为 (n_samples, n_features) 的 numpy 数组

输入样本。

返回值

confidence形状为 (n_samples,) 的 numpy 数组

对于每个观测值,表示如果在训练集受到扰动时模型会多么一致地做出相同的预测。返回一个概率,范围在 [0,1]。

predict_proba(X, method='linear', return_confidence=False)

预测样本为异常值的概率。有两种可能的方法

  1. 简单使用 Min-max 转换将异常值分数线性变换到 [0,1] 的范围。模型必须先拟合。

  2. 使用统一分数,参见 [BKKSZ11]

参数

X形状为 (n_samples, n_features) 的 numpy 数组

输入样本。

methodstr,可选 (默认值=’linear’)

概率转换方法。必须是 ‘linear’ 或 ‘unify’ 之一。

return_confidenceboolean,可选 (默认值=False)

如果为 True,则同时返回预测的置信度。

返回值

outlier_probability形状为 (n_samples, n_classes) 的 numpy 数组

对于每个观测值,根据已拟合的模型判断是否应将其视为异常值。返回异常值概率,范围在 [0,1]。注意,这取决于类别数量,默认情况下为 2 个类别 ([正常概率, 异常概率])。

predict_with_rejection(X, T=32, return_stats=False, delta=0.1, c_fp=1, c_fn=1, c_r=-1)
预测特定样本是否为异常值,

允许检测器拒绝 (即输出 = -2) 低置信度的预测。

参数

X形状为 (n_samples, n_features) 的 numpy 数组

输入样本。

Tint,可选 (默认值=32)

它允许将拒绝阈值设置为 1-2exp(-T)。T 的值越高,拒绝越多。

return_stats: bool,可选 (默认值 = False)

如果为 True,则同时返回三个附加的浮点值:估计拒绝率、拒绝率上限和成本上限。

delta: float,可选 (默认值 = 0.1)

拒绝率上限以概率 1-delta 成立。

c_fp, c_fn, c_r: float (正值),可选 (默认值 = [1,1, contamination])

误报预测 (c_fp)、漏报预测 (c_fn) 和拒绝 (c_r) 的成本。

返回值

outlier_labels形状为 (n_samples,) 的 numpy 数组

对于每个观测值,根据已拟合的模型判断是否应将其视为异常值。0 表示正常值,1 表示异常值,-2 表示拒绝。

expected_rejection_rate: float,如果 return_stats 为 True;upperbound_rejection_rate: float,如果 return_stats 为 True;upperbound_cost: float,如果 return_stats 为 True;

set_params(**params)

设置此估计器的参数。此方法适用于简单估计器和嵌套对象(例如管道)。嵌套对象的参数形式为 <component>__<parameter>,以便可以更新嵌套对象的每个组件。

详见 https://scikit-learn.cn/stable/modules/generated/sklearn.base.BaseEstimator.html 和 sklearn/base.py 获取更多信息。

返回值

self : object

pyod.models.knn 模块

k-最近邻检测器 (kNN)

class pyod.models.knn.KNN(contamination=0.1, n_neighbors=5, method='largest', radius=1.0, algorithm='auto', leaf_size=30, metric='minkowski', p=2, metric_params=None, n_jobs=1, **kwargs)[source]

基础类: BaseDetector

用于异常值检测的 kNN 类。对于一个观测值,它到其第 k 个最近邻的距离可以看作异常值分数。这可以被看作是衡量密度的一种方法。有关详细信息,请参见 [BAP02, BRRS00]

支持三种 kNN 检测器: largest: 使用到第 k 个最近邻的距离作为异常值分数 mean: 使用到所有 k 个最近邻的距离的平均值作为异常值分数 median: 使用到 k 个最近邻的距离的中位数作为异常值分数

参数

contaminationfloat,范围 (0., 0.5),可选 (默认值=0.1)

数据集的污染程度,即数据集中异常值的比例。在拟合时用于定义决策函数的阈值。

n_neighbors整型, 可选 (默认值 = 5)

默认用于 k 近邻查询的邻居数量。

method字符串, 可选 (默认值=’largest’)

{‘largest’, ‘mean’, ‘median’}

  • ‘largest’: 使用到第 k 个最近邻的距离作为异常值分数

  • ‘mean’: 使用到所有 k 个最近邻的距离的平均值作为异常值分数

  • ‘median’: 使用到 k 个最近邻的距离的中位数作为异常值分数

radius浮点型, 可选 (默认值 = 1.0)

radius_neighbors 查询默认使用的参数空间范围。

algorithm{‘auto’, ‘ball_tree’, ‘kd_tree’, ‘brute’}, 可选

用于计算最近邻的算法

  • ‘ball_tree’ 将使用 BallTree

  • ‘kd_tree’ 将使用 KDTree

  • ‘brute’ 将使用暴力搜索。

  • ‘auto’ 将尝试根据传递给 fit() 方法的值来决定最合适的算法。

注意:对稀疏输入进行拟合将覆盖此参数的设置,使用暴力算法。

自 0.74 版起已弃用:algorithm 在 PyOD 0.7.4 中已弃用,在 0.7.6 中将不再可能使用。为了一致性,必须使用 BallTree。

leaf_size整型, 可选 (默认值 = 30)

传递给 BallTree 的叶子大小。这会影响构建和查询的速度,以及存储树所需的内存。最佳值取决于问题的性质。

metric字符串 或 可调用对象, 默认值 ‘minkowski’

用于距离计算的度量。可以使用 scikit-learn 或 scipy.spatial.distance 中的任何度量。

如果 metric 是可调用函数,它将对每对实例(行)调用,并记录结果值。可调用函数应接受两个数组作为输入,并返回一个值表示它们之间的距离。这适用于 Scipy 的度量,但效率低于将度量名称作为字符串传递。

不支持距离矩阵。

有效的 method 值包括:

  • 来自 scikit-learn:[‘cityblock’, ‘euclidean’, ‘l1’, ‘l2’, ‘manhattan’]

  • 来自 scipy.spatial.distance:[‘braycurtis’, ‘canberra’, ‘chebyshev’, ‘correlation’, ‘dice’, ‘hamming’, ‘jaccard’, ‘kulsinski’, ‘mahalanobis’, ‘matching’, ‘minkowski’, ‘rogerstanimoto’, ‘russellrao’, ‘seuclidean’, ‘sokalmichener’, ‘sokalsneath’, ‘sqeuclidean’, ‘yule’]

有关这些度量的详细信息,请参见 https://scikit-learn.cn/stable/modules/generated/sklearn.metrics.pairwise.pairwise_distances 的文档。

p整型, 可选 (默认值 = 2)

sklearn.metrics.pairwise.pairwise_distances 中 Minkowski 度量的参数。当 p = 1 时,这等同于使用 manhattan_distance (l1),p = 2 时则等同于 euclidean_distance (l2)。对于任意 p,使用 minkowski_distance (l_p)。参见 https://scikit-learn.cn/stable/modules/generated/sklearn.metrics.pairwise.pairwise_distances

metric_params字典, 可选 (默认值 = None)

度量函数的附加关键字参数。

n_jobs整型, 可选 (默认值 = 1)

用于最近邻搜索的并行作业数。如果为 -1,则作业数设置为 CPU 核心数。仅影响 kneighbors 和 kneighbors_graph 方法。

属性

decision_scores_numpy 数组, 形状为 (n_samples,)

训练数据的异常值分数。分数越高表示越异常。异常值往往得分较高。此值在检测器拟合后可用。

threshold_浮点型

阈值基于 contamination。它是 decision_scores_n_samples * contamination 个最异常样本的分数。计算此阈值是为了生成二元异常值标签。

labels_整型, 0 或 1

训练数据的二元标签。0 表示正常值,1 表示异常值/异常。它是通过将 threshold_ 应用于 decision_scores_ 生成的。

compute_rejection_stats(T=32, delta=0.1, c_fp=1, c_fn=1, c_r=-1, verbose=False)
为无监督检测器添加拒绝选项。

这伴随着保证:预期拒绝率的估计值 (return_rejectrate=True),拒绝率的上限 (return_ub_rejectrate= True),以及成本的上限 (return_ub_cost=True)。

参数

T: int,可选 (默认值=32)

它允许将拒绝阈值设置为 1-2exp(-T)。T 的值越高,拒绝越多。

delta: float,可选 (默认值 = 0.1)

拒绝率上限以概率 1-delta 成立。

c_fp, c_fn, c_r: float (正值),

可选 (默认值 = [1,1, contamination]) 对应于误报预测 (c_fp)、漏报预测 (c_fn) 和拒绝 (c_r) 的成本。

verbose: bool,可选 (默认值 = False)

如果为 True,则打印预期拒绝率、拒绝率上限和成本上限。

返回值

expected_rejection_rate: float,预期拒绝率;upperbound_rejection_rate: float,拒绝率上限

概率 1-delta 满足;

upperbound_cost: float,成本上限;

decision_function(X)[source]

使用已拟合的检测器预测 X 的原始异常分数。

输入样本的异常分数是根据不同的检测器算法计算的。为了一致性,异常值被赋予较大的异常分数。

参数

X形状为 (n_samples, n_features) 的 numpy 数组

训练输入样本。仅当基础估计器支持时,才接受稀疏矩阵。

返回值

anomaly_scores形状为 (n_samples,) 的 numpy 数组

输入样本的异常分数。

fit(X, y=None)[source]

拟合检测器。y 在无监督方法中被忽略。

参数

X形状为 (n_samples, n_features) 的 numpy 数组

输入样本。

y已忽略

未使用,根据约定为了 API 一致性而存在。

返回

self对象

已拟合的估计器。

fit_predict(X, y=None)

首先拟合检测器,然后预测特定样本是否为异常值。y 在无监督模型中被忽略。

参数

X形状为 (n_samples, n_features) 的 numpy 数组

输入样本。

y已忽略

未使用,根据约定为了 API 一致性而存在。

返回

outlier_labels形状为 (n_samples,) 的 numpy 数组

对于每个观测值,根据已拟合的模型判断是否应将其视为异常值。0 表示正常值,1 表示异常值。

自 0.6.9 版本起已弃用: fit_predict 将在 pyod 0.8.0 中移除;为了保持一致性,将替换为先调用 fit 函数,然后访问 labels_ 属性。

fit_predict_score(X, y, scoring='roc_auc_score')

拟合检测器,对样本进行预测,并使用预定义指标(例如 ROC)评估模型。

参数

X形状为 (n_samples, n_features) 的 numpy 数组

输入样本。

y已忽略

未使用,根据约定为了 API 一致性而存在。

scoringstr,可选 (默认值=’roc_auc_score’)

评估指标

  • ‘roc_auc_score’: ROC 分数

  • ‘prc_n_score’: Precision @ rank n 分数

返回

score : float

自 0.6.9 版本起已弃用: fit_predict_score 将在 pyod 0.8.0 中移除;为了保持一致性,将替换为先调用 fit 函数,然后访问 labels_ 属性。评分可以通过调用评估方法(例如 AUC ROC)来完成。

get_params(deep=True)

获取此估计器的参数。

详见 https://scikit-learn.cn/stable/modules/generated/sklearn.base.BaseEstimator.html 和 sklearn/base.py 获取更多信息。

参数

deepbool,可选 (默认值=True)

如果为 True,将返回此估计器以及其中包含的作为估计器的子对象的参数。

返回

params从字符串到任意类型的映射

参数名称与其值的映射。

predict(X, return_confidence=False)

预测特定样本是否为异常值。

参数

X形状为 (n_samples, n_features) 的 numpy 数组

输入样本。

return_confidenceboolean,可选 (默认值=False)

如果为 True,则同时返回预测的置信度。

返回

outlier_labels形状为 (n_samples,) 的 numpy 数组

对于每个观测值,根据已拟合的模型判断是否应将其视为异常值。0 表示正常值,1 表示异常值。

confidence形状为 (n_samples,) 的 numpy 数组。

仅当 return_confidence 设置为 True 时返回。

predict_confidence(X)

预测模型在略有不同的训练集下做出相同预测的置信度。参见 [BPVD20]

参数

X形状为 (n_samples, n_features) 的 numpy 数组

输入样本。

返回

confidence形状为 (n_samples,) 的 numpy 数组

对于每个观测值,表示如果在训练集受到扰动时模型会多么一致地做出相同的预测。返回一个概率,范围在 [0,1]。

predict_proba(X, method='linear', return_confidence=False)

预测样本为异常值的概率。有两种可能的方法

  1. 简单使用 Min-max 转换将异常值分数线性变换到 [0,1] 的范围。模型必须先拟合。

  2. 使用统一分数,参见 [BKKSZ11]

参数

X形状为 (n_samples, n_features) 的 numpy 数组

输入样本。

methodstr,可选 (默认值=’linear’)

概率转换方法。必须是 ‘linear’ 或 ‘unify’ 之一。

return_confidenceboolean,可选 (默认值=False)

如果为 True,则同时返回预测的置信度。

返回

outlier_probability形状为 (n_samples, n_classes) 的 numpy 数组

对于每个观测值,根据已拟合的模型判断是否应将其视为异常值。返回异常值概率,范围在 [0,1]。注意,这取决于类别数量,默认情况下为 2 个类别 ([正常概率, 异常概率])。

predict_with_rejection(X, T=32, return_stats=False, delta=0.1, c_fp=1, c_fn=1, c_r=-1)
预测特定样本是否为异常值,

允许检测器拒绝 (即输出 = -2) 低置信度的预测。

参数

X形状为 (n_samples, n_features) 的 numpy 数组

输入样本。

Tint,可选 (默认值=32)

它允许将拒绝阈值设置为 1-2exp(-T)。T 的值越高,拒绝越多。

return_stats: bool,可选 (默认值 = False)

如果为 True,则同时返回三个附加的浮点值:估计拒绝率、拒绝率上限和成本上限。

delta: float,可选 (默认值 = 0.1)

拒绝率上限以概率 1-delta 成立。

c_fp, c_fn, c_r: float (正值),可选 (默认值 = [1,1, contamination])

误报预测 (c_fp)、漏报预测 (c_fn) 和拒绝 (c_r) 的成本。

返回

outlier_labels形状为 (n_samples,) 的 numpy 数组

对于每个观测值,根据已拟合的模型判断是否应将其视为异常值。0 表示正常值,1 表示异常值,-2 表示拒绝。

expected_rejection_rate: float,如果 return_stats 为 True;upperbound_rejection_rate: float,如果 return_stats 为 True;upperbound_cost: float,如果 return_stats 为 True;

set_params(**params)

设置此估计器的参数。此方法适用于简单估计器和嵌套对象(例如管道)。嵌套对象的参数形式为 <component>__<parameter>,以便可以更新嵌套对象的每个组件。

详见 https://scikit-learn.cn/stable/modules/generated/sklearn.base.BaseEstimator.html 和 sklearn/base.py 获取更多信息。

返回

self : object

pyod.models.kpca 模块

核主成分分析 (KPCA) 异常检测器

class pyod.models.kpca.KPCA(contamination=0.1, n_components=None, n_selected_components=None, kernel='rbf', gamma=None, degree=3, coef0=1, kernel_params=None, alpha=1.0, eigen_solver='auto', tol=0, max_iter=None, remove_zero_eig=False, copy_X=True, n_jobs=None, sampling=False, subset_size=20, random_state=None)[源代码]

基础类: BaseDetector

用于异常检测的 KPCA 类。

在由核唯一确定的特征空间上执行 PCA,并将特征空间的重构误差用作异常分数。

参见 [BHof07] Heiko Hoffmann, “Kernel PCA for novelty detection,” Pattern Recognition, vol.40, no.3, pp. 863-874, 2007. https://www.sciencedirect.com/science/article/pii/S0031320306003414 获取详情。

参数

n_components整型, 可选的 (默认值=None)

组件数量。如果为 None,则保留所有非零组件。

n_selected_components整型, 可选的 (默认值=None)

用于计算异常分数的选定主成分数量。它不一定等于主成分的总数。如果未设置,则使用所有主成分。

kernel字符串 {‘linear’, ‘poly’, ‘rbf’, ‘sigmoid’,

‘cosine’, ‘precomputed’}, 可选的 (默认值=’rbf’)

用于 PCA 的核。

gamma浮点型, 可选的 (默认值=None)

rbf、poly 和 sigmoid 核的核系数。其他核忽略此参数。如果 gammaNone,则将其设置为 1/n_features

degree整型, 可选的 (默认值=3)

poly 核的次数。其他核忽略此参数。

coef0浮点型, 可选的 (默认值=1)

poly 和 sigmoid 核中的独立项。其他核忽略此参数。

kernel_params字典, 可选的 (默认值=None)

作为可调用对象传递的核的参数(关键字参数)和值。其他核忽略此参数。

alphafloat,可选 (默认值=1.0)

学习逆变换(当 inverse_transform=True 时)的岭回归超参数。

eigen_solver字符串, {‘auto’, ‘dense’, ‘arpack’, ‘randomized’}, 默认值=’auto’

选择要使用的特征求解器。如果 n_components 远小于训练样本数量,随机(或在较小程度上使用 arpack)可能比密集特征求解器更高效。随机 SVD 是根据 Halko 等人的方法执行的。

auto

求解器根据 n_samples(训练样本数量)和 n_components 的默认策略选择:如果提取的组件数量严格小于 10 且样本数量严格大于 200,则启用“arpack”方法。否则,计算精确的完整特征值分解,并在之后可选地进行截断(“dense”方法)。

dense

调用标准 LAPACK 求解器通过 scipy.linalg.eigh 运行精确的完整特征值分解,并通过后处理选择组件。

arpack

调用 ARPACK 求解器使用 scipy.sparse.linalg.eigsh 运行截断为 n_components 的 SVD。它要求严格 0 < n_components < n_samples

randomized

运行随机 SVD。实现根据特征值的模选择特征值;因此,如果核不是正半定,使用此方法可能会导致意外结果。

tol浮点型, 可选的 (默认值=0)

arpack 的收敛容差。如果为 0,arpack 将选择最优值。

max_iter整型, 可选的 (默认值=None)

arpack 的最大迭代次数。如果为 None,arpack 将选择最优值。

remove_zero_eig布尔型, 可选的 (默认值=False)

如果为 True,则移除所有特征值为零的组件,因此输出中的组件数量可能 < n_components(有时由于数值不稳定性甚至为零)。当 n_components 为 None 时,此参数将被忽略,无论如何都会移除特征值为零的组件。

copy_X布尔型, 可选的 (默认值=True)

如果为 True,则输入 X 将被模型复制并存储在 X_fit_ 属性中。如果不对 X 进行进一步更改,将 copy_X=False 设置为 False 可以通过存储引用来节省内存。

n_jobs整型, 可选的 (默认值=None)

并行运行的作业数量。None 表示 1,除非在 joblib.parallel_backend 上下文中使用。-1 表示使用所有处理器。

sampling布尔型, 可选的 (默认值=False)

如果为 True,则仅执行一次从数据集中抽样子集,以降低时间复杂度同时保持检测性能。

subset_size浮点型 在 (0., 1.0) 或 整型 在 (0, n_samples), 可选的 (默认值=20)

如果 sampling 为 True,则指定子集的大小。

random_stateint, RandomState 实例或 None, 可选 (默认=None)

如果是 int,random_state 是随机数生成器使用的种子;如果是 RandomState 实例,random_state 是随机数生成器;如果是 None,随机数生成器是 np.random 使用的 RandomState 实例。

属性

decision_scores_形状为 (n_samples,) 的 NumPy 数组

训练数据的异常值分数。分数越高表示越异常。异常值往往得分较高。此值在检测器拟合后可用。

threshold_浮点型

阈值基于 contamination。它是 decision_scores_n_samples * contamination 个最异常样本的分数。计算此阈值是为了生成二元异常值标签。

labels_整型, 0 或 1

训练数据的二元标签。0 表示正常值,1 表示异常值/异常。它是通过将 threshold_ 应用于 decision_scores_ 生成的。

compute_rejection_stats(T=32, delta=0.1, c_fp=1, c_fn=1, c_r=-1, verbose=False)
为无监督检测器添加拒绝选项。

这伴随着保证:预期拒绝率的估计值 (return_rejectrate=True),拒绝率的上限 (return_ub_rejectrate= True),以及成本的上限 (return_ub_cost=True)。

参数

T: int,可选 (默认值=32)

它允许将拒绝阈值设置为 1-2exp(-T)。T 的值越高,拒绝越多。

delta: float,可选 (默认值 = 0.1)

拒绝率上限以概率 1-delta 成立。

c_fp, c_fn, c_r: float (正值),

可选 (默认值 = [1,1, contamination]) 对应于误报预测 (c_fp)、漏报预测 (c_fn) 和拒绝 (c_r) 的成本。

verbose: bool,可选 (默认值 = False)

如果为 True,则打印预期拒绝率、拒绝率上限和成本上限。

返回

expected_rejection_rate: float,预期拒绝率;upperbound_rejection_rate: float,拒绝率上限

概率 1-delta 满足;

upperbound_cost: float,成本上限;

decision_function(X)[源代码]

使用已拟合的检测器预测 X 的原始异常分数。

输入样本的异常分数是根据不同的检测器算法计算的。为了一致性,异常值被赋予较大的异常分数。

参数

X形状为 (n_samples, n_features) 的 numpy 数组

训练输入样本。仅当基础估计器支持时,才接受稀疏矩阵。

返回

anomaly_scores形状为 (n_samples,) 的 numpy 数组

输入样本的异常分数。

fit(X, y=None)[源代码]

拟合检测器。y 在无监督方法中被忽略。

参数

X形状为 (n_samples, n_features) 的 numpy 数组

输入样本。

y已忽略

未使用,根据约定为了 API 一致性而存在。

返回

self对象

已拟合的估计器。

fit_predict(X, y=None)

首先拟合检测器,然后预测特定样本是否为异常值。y 在无监督模型中被忽略。

参数

X形状为 (n_samples, n_features) 的 numpy 数组

输入样本。

y已忽略

未使用,根据约定为了 API 一致性而存在。

返回

outlier_labels形状为 (n_samples,) 的 numpy 数组

对于每个观测值,根据已拟合的模型判断是否应将其视为异常值。0 表示正常值,1 表示异常值。

自 0.6.9 版本起已弃用: fit_predict 将在 pyod 0.8.0 中移除;为了保持一致性,将替换为先调用 fit 函数,然后访问 labels_ 属性。

fit_predict_score(X, y, scoring='roc_auc_score')

拟合检测器,对样本进行预测,并使用预定义指标(例如 ROC)评估模型。

参数

X形状为 (n_samples, n_features) 的 numpy 数组

输入样本。

y已忽略

未使用,根据约定为了 API 一致性而存在。

scoringstr,可选 (默认值=’roc_auc_score’)

评估指标

  • ‘roc_auc_score’: ROC 分数

  • ‘prc_n_score’: Precision @ rank n 分数

返回

score : float

自 0.6.9 版本起已弃用: fit_predict_score 将在 pyod 0.8.0 中移除;为了保持一致性,将替换为先调用 fit 函数,然后访问 labels_ 属性。评分可以通过调用评估方法(例如 AUC ROC)来完成。

get_params(deep=True)

获取此估计器的参数。

详见 https://scikit-learn.cn/stable/modules/generated/sklearn.base.BaseEstimator.html 和 sklearn/base.py 获取更多信息。

参数

deepbool,可选 (默认值=True)

如果为 True,将返回此估计器以及其中包含的作为估计器的子对象的参数。

返回

params从字符串到任意类型的映射

参数名称与其值的映射。

predict(X, return_confidence=False)

预测特定样本是否为异常值。

参数

X形状为 (n_samples, n_features) 的 numpy 数组

输入样本。

return_confidenceboolean,可选 (默认值=False)

如果为 True,则同时返回预测的置信度。

返回

outlier_labels形状为 (n_samples,) 的 numpy 数组

对于每个观测值,根据已拟合的模型判断是否应将其视为异常值。0 表示正常值,1 表示异常值。

confidence形状为 (n_samples,) 的 numpy 数组。

仅当 return_confidence 设置为 True 时返回。

predict_confidence(X)

预测模型在略有不同的训练集下做出相同预测的置信度。参见 [BPVD20]

参数

X形状为 (n_samples, n_features) 的 numpy 数组

输入样本。

返回

confidence形状为 (n_samples,) 的 numpy 数组

对于每个观测值,表示如果在训练集受到扰动时模型会多么一致地做出相同的预测。返回一个概率,范围在 [0,1]。

predict_proba(X, method='linear', return_confidence=False)

预测样本为异常值的概率。有两种可能的方法

  1. 简单使用 Min-max 转换将异常值分数线性变换到 [0,1] 的范围。模型必须先拟合。

  2. 使用统一分数,参见 [BKKSZ11]

参数

X形状为 (n_samples, n_features) 的 numpy 数组

输入样本。

methodstr,可选 (默认值=’linear’)

概率转换方法。必须是 ‘linear’ 或 ‘unify’ 之一。

return_confidenceboolean,可选 (默认值=False)

如果为 True,则同时返回预测的置信度。

返回

outlier_probability形状为 (n_samples, n_classes) 的 numpy 数组

对于每个观测值,根据已拟合的模型判断是否应将其视为异常值。返回异常值概率,范围在 [0,1]。注意,这取决于类别数量,默认情况下为 2 个类别 ([正常概率, 异常概率])。

predict_with_rejection(X, T=32, return_stats=False, delta=0.1, c_fp=1, c_fn=1, c_r=-1)
预测特定样本是否为异常值,

允许检测器拒绝 (即输出 = -2) 低置信度的预测。

参数

X形状为 (n_samples, n_features) 的 numpy 数组

输入样本。

Tint,可选 (默认值=32)

它允许将拒绝阈值设置为 1-2exp(-T)。T 的值越高,拒绝越多。

return_stats: bool,可选 (默认值 = False)

如果为 True,则同时返回三个附加的浮点值:估计拒绝率、拒绝率上限和成本上限。

delta: float,可选 (默认值 = 0.1)

拒绝率上限以概率 1-delta 成立。

c_fp, c_fn, c_r: float (正值),可选 (默认值 = [1,1, contamination])

误报预测 (c_fp)、漏报预测 (c_fn) 和拒绝 (c_r) 的成本。

返回

outlier_labels形状为 (n_samples,) 的 numpy 数组

对于每个观测值,根据已拟合的模型判断是否应将其视为异常值。0 表示正常值,1 表示异常值,-2 表示拒绝。

expected_rejection_rate: float,如果 return_stats 为 True;upperbound_rejection_rate: float,如果 return_stats 为 True;upperbound_cost: float,如果 return_stats 为 True;

set_params(**params)

设置此估计器的参数。此方法适用于简单估计器和嵌套对象(例如管道)。嵌套对象的参数形式为 <component>__<parameter>,以便可以更新嵌套对象的每个组件。

详见 https://scikit-learn.cn/stable/modules/generated/sklearn.base.BaseEstimator.html 和 sklearn/base.py 获取更多信息。

返回

self : object

pyod.models.lmdd 模块

基于线性模型偏差的异常检测 (LMDD)。

class pyod.models.lmdd.LMDD(contamination=0.1, n_iter=50, dis_measure='aad', random_state=None)[源代码]

基础类: BaseDetector

基于偏差的异常检测的线性方法。

LMDD 采用平滑因子的概念,该因子表示通过从数据集中移除子集元素可以减少多少相异度。更多信息请阅读 [BAAR96]

注意:此实现进行了少量修改,使其输出分数而非标签。

参数

contaminationfloat,范围 (0., 0.5),可选 (默认值=0.1)

数据集的污染程度,即数据集中异常值的比例。在拟合时用于定义决策函数的阈值。

n_iter整型, 可选的 (默认值=50)

迭代次数,每次迭代中,在随机化输入顺序后重复该过程。请注意,n_iter 是影响准确性的非常重要因素。值越高,准确性越好,执行时间越长。

dis_measure: 字符串, 可选的 (默认值=’aad’)

用于计算点的平滑因子的相异度度量,可用选项有

  • ‘aad’: 平均绝对偏差

  • ‘var’: 方差

  • ‘iqr’: 四分位数范围

random_stateint, RandomState 实例或 None, 可选 (默认=None)

如果是 int,random_state 是随机数生成器使用的种子;如果是 RandomState 实例,random_state 是随机数生成器;如果是 None,随机数生成器是 np.random 使用的 RandomState 实例。

属性

decision_scores_形状为 (n_samples,) 的 NumPy 数组

训练数据的异常值分数。分数越高表示越异常。异常值往往得分较高。此值在检测器拟合后可用。

threshold_浮点型

阈值基于 contamination。它是 decision_scores_n_samples * contamination 个最异常样本的分数。计算此阈值是为了生成二元异常值标签。

labels_整型, 0 或 1

训练数据的二元标签。0 表示正常值,1 表示异常值/异常。它是通过将 threshold_ 应用于 decision_scores_ 生成的。

compute_rejection_stats(T=32, delta=0.1, c_fp=1, c_fn=1, c_r=-1, verbose=False)
为无监督检测器添加拒绝选项。

这伴随着保证:预期拒绝率的估计值 (return_rejectrate=True),拒绝率的上限 (return_ub_rejectrate= True),以及成本的上限 (return_ub_cost=True)。

参数

T: int,可选 (默认值=32)

它允许将拒绝阈值设置为 1-2exp(-T)。T 的值越高,拒绝越多。

delta: float,可选 (默认值 = 0.1)

拒绝率上限以概率 1-delta 成立。

c_fp, c_fn, c_r: float (正值),

可选 (默认值 = [1,1, contamination]) 对应于误报预测 (c_fp)、漏报预测 (c_fn) 和拒绝 (c_r) 的成本。

verbose: bool,可选 (默认值 = False)

如果为 True,则打印预期拒绝率、拒绝率上限和成本上限。

返回

expected_rejection_rate: float,预期拒绝率;upperbound_rejection_rate: float,拒绝率上限

概率 1-delta 满足;

upperbound_cost: float,成本上限;

decision_function(X)[源代码]

使用已拟合的检测器预测 X 的原始异常分数。

输入样本的异常分数是根据不同的检测器算法计算的。为了一致性,异常值被赋予较大的异常分数。

参数

X形状为 (n_samples, n_features) 的 numpy 数组

训练输入样本。仅当基础估计器支持时,才接受稀疏矩阵。

返回

anomaly_scores形状为 (n_samples,) 的 numpy 数组

输入样本的异常分数。

fit(X, y=None)[源代码]

拟合检测器。y 在无监督方法中被忽略。

参数

X形状为 (n_samples, n_features) 的 numpy 数组

输入样本。

y已忽略

未使用,根据约定为了 API 一致性而存在。

返回

self对象

已拟合的估计器。

fit_predict(X, y=None)

首先拟合检测器,然后预测特定样本是否为异常值。y 在无监督模型中被忽略。

参数

X形状为 (n_samples, n_features) 的 numpy 数组

输入样本。

y已忽略

未使用,根据约定为了 API 一致性而存在。

返回

outlier_labels形状为 (n_samples,) 的 numpy 数组

对于每个观测值,根据已拟合的模型判断是否应将其视为异常值。0 表示正常值,1 表示异常值。

自 0.6.9 版本起已弃用: fit_predict 将在 pyod 0.8.0 中移除;为了保持一致性,将替换为先调用 fit 函数,然后访问 labels_ 属性。

fit_predict_score(X, y, scoring='roc_auc_score')

拟合检测器,对样本进行预测,并使用预定义指标(例如 ROC)评估模型。

参数

X形状为 (n_samples, n_features) 的 numpy 数组

输入样本。

y已忽略

未使用,根据约定为了 API 一致性而存在。

scoringstr,可选 (默认值=’roc_auc_score’)

评估指标

  • ‘roc_auc_score’: ROC 分数

  • ‘prc_n_score’: Precision @ rank n 分数

返回

score : float

自 0.6.9 版本起已弃用: fit_predict_score 将在 pyod 0.8.0 中移除;为了保持一致性,将替换为先调用 fit 函数,然后访问 labels_ 属性。评分可以通过调用评估方法(例如 AUC ROC)来完成。

get_params(deep=True)

获取此估计器的参数。

详见 https://scikit-learn.cn/stable/modules/generated/sklearn.base.BaseEstimator.html 和 sklearn/base.py 获取更多信息。

参数

deepbool,可选 (默认值=True)

如果为 True,将返回此估计器以及其中包含的作为估计器的子对象的参数。

返回

params从字符串到任意类型的映射

参数名称与其值的映射。

predict(X, return_confidence=False)

预测特定样本是否为异常值。

参数

X形状为 (n_samples, n_features) 的 numpy 数组

输入样本。

return_confidenceboolean,可选 (默认值=False)

如果为 True,则同时返回预测的置信度。

返回

outlier_labels形状为 (n_samples,) 的 numpy 数组

对于每个观测值,根据已拟合的模型判断是否应将其视为异常值。0 表示正常值,1 表示异常值。

confidence形状为 (n_samples,) 的 numpy 数组。

仅当 return_confidence 设置为 True 时返回。

predict_confidence(X)

预测模型在略有不同的训练集下做出相同预测的置信度。参见 [BPVD20]

参数

X形状为 (n_samples, n_features) 的 numpy 数组

输入样本。

返回

confidence形状为 (n_samples,) 的 numpy 数组

对于每个观测值,表示如果在训练集受到扰动时模型会多么一致地做出相同的预测。返回一个概率,范围在 [0,1]。

predict_proba(X, method='linear', return_confidence=False)

预测样本为异常值的概率。有两种可能的方法

  1. 简单使用 Min-max 转换将异常值分数线性变换到 [0,1] 的范围。模型必须先拟合。

  2. 使用统一分数,参见 [BKKSZ11]

参数

X形状为 (n_samples, n_features) 的 numpy 数组

输入样本。

methodstr,可选 (默认值=’linear’)

概率转换方法。必须是 ‘linear’ 或 ‘unify’ 之一。

return_confidenceboolean,可选 (默认值=False)

如果为 True,则同时返回预测的置信度。

返回

outlier_probability形状为 (n_samples, n_classes) 的 numpy 数组

对于每个观测值,根据已拟合的模型判断是否应将其视为异常值。返回异常值概率,范围在 [0,1]。注意,这取决于类别数量,默认情况下为 2 个类别 ([正常概率, 异常概率])。

predict_with_rejection(X, T=32, return_stats=False, delta=0.1, c_fp=1, c_fn=1, c_r=-1)
预测特定样本是否为异常值,

允许检测器拒绝 (即输出 = -2) 低置信度的预测。

参数

X形状为 (n_samples, n_features) 的 numpy 数组

输入样本。

Tint,可选 (默认值=32)

它允许将拒绝阈值设置为 1-2exp(-T)。T 的值越高,拒绝越多。

return_stats: bool,可选 (默认值 = False)

如果为 True,则同时返回三个附加的浮点值:估计拒绝率、拒绝率上限和成本上限。

delta: float,可选 (默认值 = 0.1)

拒绝率上限以概率 1-delta 成立。

c_fp, c_fn, c_r: float (正值),可选 (默认值 = [1,1, contamination])

误报预测 (c_fp)、漏报预测 (c_fn) 和拒绝 (c_r) 的成本。

返回

outlier_labels形状为 (n_samples,) 的 numpy 数组

对于每个观测值,根据已拟合的模型判断是否应将其视为异常值。0 表示正常值,1 表示异常值,-2 表示拒绝。

expected_rejection_rate: float,如果 return_stats 为 True;upperbound_rejection_rate: float,如果 return_stats 为 True;upperbound_cost: float,如果 return_stats 为 True;

set_params(**params)

设置此估计器的参数。此方法适用于简单估计器和嵌套对象(例如管道)。嵌套对象的参数形式为 <component>__<parameter>,以便可以更新嵌套对象的每个组件。

详见 https://scikit-learn.cn/stable/modules/generated/sklearn.base.BaseEstimator.html 和 sklearn/base.py 获取更多信息。

返回

self : object

pyod.models.loda 模块

Loda: 轻量级在线异常检测器,改编自 tilitools (https://github.com/nicococo/tilitools),作者:

class pyod.models.loda.LODA(contamination=0.1, n_bins=10, n_random_cuts=100)[源代码]

基础类: BaseDetector

Loda: 轻量级在线异常检测器。更多信息请参见 [BPevny16]

支持两种版本的 LODA: - 静态箱数:对所有随机切割使用静态数量的箱。 - 自动箱数:每个随机切割使用根据 Birge-Rozenblac 方法

([BBirgeR06]) 认为最优的箱数。

参数

contaminationfloat,范围 (0., 0.5),可选 (默认值=0.1)

数据集的污染程度,即数据集中异常值的比例。在拟合时用于定义决策函数的阈值。

n_bins整型 或 字符串, 可选的 (默认值 = 10)

直方图的箱数。如果设置为“auto”,将使用 Birge-Rozenblac 方法自动确定最优箱数。

n_random_cuts整型, 可选的 (默认值 = 100)

随机切割的次数。

属性

decision_scores_形状为 (n_samples,) 的 NumPy 数组

训练数据的异常值分数。分数越高表示越异常。异常值往往得分较高。此值在检测器拟合后可用。

threshold_浮点型

阈值基于 contamination。它是 decision_scores_n_samples * contamination 个最异常样本的分数。计算此阈值是为了生成二元异常值标签。

labels_整型, 0 或 1

训练数据的二元标签。0 表示正常值,1 表示异常值/异常。它是通过将 threshold_ 应用于 decision_scores_ 生成的。

compute_rejection_stats(T=32, delta=0.1, c_fp=1, c_fn=1, c_r=-1, verbose=False)
为无监督检测器添加拒绝选项。

这伴随着保证:预期拒绝率的估计值 (return_rejectrate=True),拒绝率的上限 (return_ub_rejectrate= True),以及成本的上限 (return_ub_cost=True)。

参数

T: int,可选 (默认值=32)

它允许将拒绝阈值设置为 1-2exp(-T)。T 的值越高,拒绝越多。

delta: float,可选 (默认值 = 0.1)

拒绝率上限以概率 1-delta 成立。

c_fp, c_fn, c_r: float (正值),

可选 (默认值 = [1,1, contamination]) 对应于误报预测 (c_fp)、漏报预测 (c_fn) 和拒绝 (c_r) 的成本。

verbose: bool,可选 (默认值 = False)

如果为 True,则打印预期拒绝率、拒绝率上限和成本上限。

返回

expected_rejection_rate: float,预期拒绝率;upperbound_rejection_rate: float,拒绝率上限

概率 1-delta 满足;

upperbound_cost: float,成本上限;

decision_function(X)[源代码]

使用已拟合的检测器预测 X 的原始异常分数。

输入样本的异常分数是根据不同的检测器算法计算的。为了一致性,异常值被赋予较大的异常分数。

参数

X形状为 (n_samples, n_features) 的 numpy 数组

训练输入样本。仅当基础估计器支持时,才接受稀疏矩阵。

返回

anomaly_scores形状为 (n_samples,) 的 numpy 数组

输入样本的异常分数。

fit(X, y=None)[源代码]

拟合检测器。y 在无监督方法中被忽略。

参数

X形状为 (n_samples, n_features) 的 numpy 数组

输入样本。

y已忽略

未使用,根据约定为了 API 一致性而存在。

返回

self对象

已拟合的估计器。

fit_predict(X, y=None)

首先拟合检测器,然后预测特定样本是否为异常值。y 在无监督模型中被忽略。

参数

X形状为 (n_samples, n_features) 的 numpy 数组

输入样本。

y已忽略

未使用,根据约定为了 API 一致性而存在。

返回

outlier_labels形状为 (n_samples,) 的 numpy 数组

对于每个观测值,根据已拟合的模型判断是否应将其视为异常值。0 表示正常值,1 表示异常值。

自 0.6.9 版本起已弃用: fit_predict 将在 pyod 0.8.0 中移除;为了保持一致性,将替换为先调用 fit 函数,然后访问 labels_ 属性。

fit_predict_score(X, y, scoring='roc_auc_score')

拟合检测器,对样本进行预测,并使用预定义指标(例如 ROC)评估模型。

参数

X形状为 (n_samples, n_features) 的 numpy 数组

输入样本。

y已忽略

未使用,根据约定为了 API 一致性而存在。

scoringstr,可选 (默认值=’roc_auc_score’)

评估指标

  • ‘roc_auc_score’: ROC 分数

  • ‘prc_n_score’: Precision @ rank n 分数

返回

score : float

自 0.6.9 版本起已弃用: fit_predict_score 将在 pyod 0.8.0 中移除;为了保持一致性,将替换为先调用 fit 函数,然后访问 labels_ 属性。评分可以通过调用评估方法(例如 AUC ROC)来完成。

get_params(deep=True)

获取此估计器的参数。

详见 https://scikit-learn.cn/stable/modules/generated/sklearn.base.BaseEstimator.html 和 sklearn/base.py 获取更多信息。

参数

deepbool,可选 (默认值=True)

如果为 True,将返回此估计器以及其中包含的作为估计器的子对象的参数。

返回

params从字符串到任意类型的映射

参数名称与其值的映射。

predict(X, return_confidence=False)

预测特定样本是否为异常值。

参数

X形状为 (n_samples, n_features) 的 numpy 数组

输入样本。

return_confidenceboolean,可选 (默认值=False)

如果为 True,则同时返回预测的置信度。

返回

outlier_labels形状为 (n_samples,) 的 numpy 数组

对于每个观测值,根据已拟合的模型判断是否应将其视为异常值。0 表示正常值,1 表示异常值。

confidence形状为 (n_samples,) 的 numpy 数组。

仅当 return_confidence 设置为 True 时返回。

predict_confidence(X)

预测模型在略有不同的训练集下做出相同预测的置信度。参见 [BPVD20]

参数

X形状为 (n_samples, n_features) 的 numpy 数组

输入样本。

返回

confidence形状为 (n_samples,) 的 numpy 数组

对于每个观测值,表示如果在训练集受到扰动时模型会多么一致地做出相同的预测。返回一个概率,范围在 [0,1]。

predict_proba(X, method='linear', return_confidence=False)

预测样本为异常值的概率。有两种可能的方法

  1. 简单使用 Min-max 转换将异常值分数线性变换到 [0,1] 的范围。模型必须先拟合。

  2. 使用统一分数,参见 [BKKSZ11]

参数

X形状为 (n_samples, n_features) 的 numpy 数组

输入样本。

methodstr,可选 (默认值=’linear’)

概率转换方法。必须是 ‘linear’ 或 ‘unify’ 之一。

return_confidenceboolean,可选 (默认值=False)

如果为 True,则同时返回预测的置信度。

返回

outlier_probability形状为 (n_samples, n_classes) 的 numpy 数组

对于每个观测值,根据已拟合的模型判断是否应将其视为异常值。返回异常值概率,范围在 [0,1]。注意,这取决于类别数量,默认情况下为 2 个类别 ([正常概率, 异常概率])。

predict_with_rejection(X, T=32, return_stats=False, delta=0.1, c_fp=1, c_fn=1, c_r=-1)
预测特定样本是否为异常值,

允许检测器拒绝 (即输出 = -2) 低置信度的预测。

参数

X形状为 (n_samples, n_features) 的 numpy 数组

输入样本。

Tint,可选 (默认值=32)

它允许将拒绝阈值设置为 1-2exp(-T)。T 的值越高,拒绝越多。

return_stats: bool,可选 (默认值 = False)

如果为 True,则同时返回三个附加的浮点值:估计拒绝率、拒绝率上限和成本上限。

delta: float,可选 (默认值 = 0.1)

拒绝率上限以概率 1-delta 成立。

c_fp, c_fn, c_r: float (正值),可选 (默认值 = [1,1, contamination])

误报预测 (c_fp)、漏报预测 (c_fn) 和拒绝 (c_r) 的成本。

返回

outlier_labels形状为 (n_samples,) 的 numpy 数组

对于每个观测值,根据已拟合的模型判断是否应将其视为异常值。0 表示正常值,1 表示异常值,-2 表示拒绝。

expected_rejection_rate: float,如果 return_stats 为 True;upperbound_rejection_rate: float,如果 return_stats 为 True;upperbound_cost: float,如果 return_stats 为 True;

set_params(**params)

设置此估计器的参数。此方法适用于简单估计器和嵌套对象(例如管道)。嵌套对象的参数形式为 <component>__<parameter>,以便可以更新嵌套对象的每个组件。

详见 https://scikit-learn.cn/stable/modules/generated/sklearn.base.BaseEstimator.html 和 sklearn/base.py 获取更多信息。

返回

self : object

pyod.models.lof 模块

局部异常因子 (LOF)。在 scikit-learn 库中实现。

class pyod.models.lof.LOF(n_neighbors=20, algorithm='auto', leaf_size=30, metric='minkowski', p=2, metric_params=None, contamination=0.1, n_jobs=1, novelty=True)[源代码]

基础类: BaseDetector

具有更多功能的 scikit-learn LOF 类包装器。使用局部异常因子 (LOF) 进行无监督异常检测。

每个样本的异常分数称为局部异常因子。它衡量给定样本相对于其邻居的密度的局部偏差。它是局部的,因为异常分数取决于对象相对于周围邻域的隔离程度。更精确地说,局部性由 k 最近邻给出,它们的距离用于估计局部密度。通过将样本的局部密度与其邻居的局部密度进行比较,可以识别出密度显著低于其邻居的样本。这些样本被认为是异常值。更多信息请参见 [BBKNS00]

参数

n_neighborsint, 可选 (默认=20)

默认用于 kneighbors 查询的邻居数量。如果 n_neighbors 大于提供的样本数量,则将使用所有样本。

algorithm{‘auto’, ‘ball_tree’, ‘kd_tree’, ‘brute’}, 可选

用于计算最近邻的算法

  • ‘ball_tree’ 将使用 BallTree

  • ‘kd_tree’ 将使用 KDTree

  • ‘brute’ 将使用暴力搜索。

  • ‘auto’ 将尝试根据传递给 fit() 方法的值决定最适合的算法。

注意:对稀疏输入进行拟合将覆盖此参数的设置,使用暴力算法。

leaf_size整型, 可选的 (默认值=30)

传递给 BallTreeKDTree 的叶大小。这会影响构建和查询的速度,以及存储树所需的内存。最优值取决于问题的性质。

metric字符串 或 可调用对象, 默认值 ‘minkowski’

metric用于距离计算的度量。可以使用 scikit-learn 或 scipy.spatial.distance 中的任何度量。

如果为 ‘precomputed’,则训练输入 X 应为距离矩阵。

如果 metric 是可调用函数,它将对每对实例(行)调用,并记录结果值。可调用函数应接受两个数组作为输入,并返回一个值表示它们之间的距离。这适用于 Scipy 的度量,但效率低于将度量名称作为字符串传递。

有效的 method 值包括:

  • 来自 scikit-learn:[‘cityblock’, ‘cosine’, ‘euclidean’, ‘l1’, ‘l2’, ‘manhattan’]

  • 来自 scipy.spatial.distance:[‘braycurtis’, ‘canberra’, ‘chebyshev’, ‘correlation’, ‘dice’, ‘hamming’, ‘jaccard’, ‘kulsinski’, ‘mahalanobis’, ‘matching’, ‘minkowski’, ‘rogerstanimoto’, ‘russellrao’, ‘seuclidean’, ‘sokalmichener’, ‘sokalsneath’, ‘sqeuclidean’, ‘yule’]

参见 scipy.spatial.distance 的文档了解这些度量的详细信息: https://docs.scipy.org.cn/doc/scipy/reference/spatial.distance.html

p整型, 可选 (默认值 = 2)

sklearn.metrics.pairwise.pairwise_distances 中 Minkowski 度量的参数。当 p = 1 时,这等同于使用 manhattan_distance (l1),p = 2 时则等同于 euclidean_distance (l2)。对于任意 p,使用 minkowski_distance (l_p)。参见 https://scikit-learn.cn/stable/modules/generated/sklearn.metrics.pairwise.pairwise_distances

metric_params字典, 可选 (默认值 = None)

度量函数的附加关键字参数。

contaminationfloat,范围 (0., 0.5),可选 (默认值=0.1)

数据集的污染程度,即数据集中异常值的比例。拟合时用于定义决策函数的阈值。

n_jobs整型, 可选 (默认值 = 1)

用于最近邻搜索的并行作业数。如果为 -1,则作业数设置为 CPU 核心数。仅影响 kneighbors 和 kneighbors_graph 方法。

novelty布尔型 (默认值=False)

默认情况下,LocalOutlierFactor 仅用于异常值检测 (novelty=False)。如果您想将 LocalOutlierFactor 用于新颖性检测,请将 novelty 设置为 True。在这种情况下,请注意,您只能在新数据上使用 predict、decision_function 和 score_samples,而不能在训练集上使用。

属性

n_neighbors_整型

用于 kneighbors 查询的实际邻居数量。

decision_scores_形状为 (n_samples,) 的 NumPy 数组

训练数据的异常值分数。分数越高表示越异常。异常值往往得分较高。此值在检测器拟合后可用。

threshold_浮点型

阈值基于 contamination。它是 decision_scores_n_samples * contamination 个最异常样本的分数。计算此阈值是为了生成二元异常值标签。

labels_整型, 0 或 1

训练数据的二元标签。0 表示正常值,1 表示异常值/异常。它是通过将 threshold_ 应用于 decision_scores_ 生成的。

compute_rejection_stats(T=32, delta=0.1, c_fp=1, c_fn=1, c_r=-1, verbose=False)
为无监督检测器添加拒绝选项。

这伴随着保证:预期拒绝率的估计值 (return_rejectrate=True),拒绝率的上限 (return_ub_rejectrate= True),以及成本的上限 (return_ub_cost=True)。

参数

T: int,可选 (默认值=32)

它允许将拒绝阈值设置为 1-2exp(-T)。T 的值越高,拒绝越多。

delta: float,可选 (默认值 = 0.1)

拒绝率上限以概率 1-delta 成立。

c_fp, c_fn, c_r: float (正值),

可选 (默认值 = [1,1, contamination]) 对应于误报预测 (c_fp)、漏报预测 (c_fn) 和拒绝 (c_r) 的成本。

verbose: bool,可选 (默认值 = False)

如果为 True,则打印预期拒绝率、拒绝率上限和成本上限。

返回

expected_rejection_rate: float,预期拒绝率;upperbound_rejection_rate: float,拒绝率上限

概率 1-delta 满足;

upperbound_cost: float,成本上限;

decision_function(X)[源代码]

使用已拟合的检测器预测 X 的原始异常分数。

输入样本的异常分数是根据不同的检测器算法计算的。为了一致性,异常值被赋予较大的异常分数。

参数

X形状为 (n_samples, n_features) 的 numpy 数组

训练输入样本。仅当基础估计器支持时,才接受稀疏矩阵。

返回

anomaly_scores形状为 (n_samples,) 的 numpy 数组

输入样本的异常分数。

fit(X, y=None)[源代码]

拟合检测器。y 在无监督方法中被忽略。

参数

X形状为 (n_samples, n_features) 的 numpy 数组

输入样本。

y已忽略

未使用,根据约定为了 API 一致性而存在。

返回

self对象

已拟合的估计器。

fit_predict(X, y=None)

首先拟合检测器,然后预测特定样本是否为异常值。y 在无监督模型中被忽略。

参数

X形状为 (n_samples, n_features) 的 numpy 数组

输入样本。

y已忽略

未使用,根据约定为了 API 一致性而存在。

返回

outlier_labels形状为 (n_samples,) 的 numpy 数组

对于每个观测值,根据已拟合的模型判断是否应将其视为异常值。0 表示正常值,1 表示异常值。

自 0.6.9 版本起已弃用: fit_predict 将在 pyod 0.8.0 中移除;为了保持一致性,将替换为先调用 fit 函数,然后访问 labels_ 属性。

fit_predict_score(X, y, scoring='roc_auc_score')

拟合检测器,对样本进行预测,并使用预定义指标(例如 ROC)评估模型。

参数

X形状为 (n_samples, n_features) 的 numpy 数组

输入样本。

y已忽略

未使用,根据约定为了 API 一致性而存在。

scoringstr,可选 (默认值=’roc_auc_score’)

评估指标

  • ‘roc_auc_score’: ROC 分数

  • ‘prc_n_score’: Precision @ rank n 分数

返回

score : float

自 0.6.9 版本起已弃用: fit_predict_score 将在 pyod 0.8.0 中移除;为了保持一致性,将替换为先调用 fit 函数,然后访问 labels_ 属性。评分可以通过调用评估方法(例如 AUC ROC)来完成。

get_params(deep=True)

获取此估计器的参数。

详见 https://scikit-learn.cn/stable/modules/generated/sklearn.base.BaseEstimator.html 和 sklearn/base.py 获取更多信息。

参数

deepbool,可选 (默认值=True)

如果为 True,将返回此估计器以及其中包含的作为估计器的子对象的参数。

返回

params从字符串到任意类型的映射

参数名称与其值的映射。

predict(X, return_confidence=False)

预测特定样本是否为异常值。

参数

X形状为 (n_samples, n_features) 的 numpy 数组

输入样本。

return_confidenceboolean,可选 (默认值=False)

如果为 True,则同时返回预测的置信度。

返回

outlier_labels形状为 (n_samples,) 的 numpy 数组

对于每个观测值,根据已拟合的模型判断是否应将其视为异常值。0 表示正常值,1 表示异常值。

confidence形状为 (n_samples,) 的 numpy 数组。

仅当 return_confidence 设置为 True 时返回。

predict_confidence(X)

预测模型在略有不同的训练集下做出相同预测的置信度。参见 [BPVD20]

参数

X形状为 (n_samples, n_features) 的 numpy 数组

输入样本。

返回

confidence形状为 (n_samples,) 的 numpy 数组

对于每个观测值,表示如果在训练集受到扰动时模型会多么一致地做出相同的预测。返回一个概率,范围在 [0,1]。

predict_proba(X, method='linear', return_confidence=False)

预测样本为异常值的概率。有两种可能的方法

  1. 简单使用 Min-max 转换将异常值分数线性变换到 [0,1] 的范围。模型必须先拟合。

  2. 使用统一分数,参见 [BKKSZ11]

参数

X形状为 (n_samples, n_features) 的 numpy 数组

输入样本。

methodstr,可选 (默认值=’linear’)

概率转换方法。必须是 ‘linear’ 或 ‘unify’ 之一。

return_confidenceboolean,可选 (默认值=False)

如果为 True,则同时返回预测的置信度。

返回

outlier_probability形状为 (n_samples, n_classes) 的 numpy 数组

对于每个观测值,根据已拟合的模型判断是否应将其视为异常值。返回异常值概率,范围在 [0,1]。注意,这取决于类别数量,默认情况下为 2 个类别 ([正常概率, 异常概率])。

predict_with_rejection(X, T=32, return_stats=False, delta=0.1, c_fp=1, c_fn=1, c_r=-1)
预测特定样本是否为异常值,

允许检测器拒绝 (即输出 = -2) 低置信度的预测。

参数

X形状为 (n_samples, n_features) 的 numpy 数组

输入样本。

Tint,可选 (默认值=32)

它允许将拒绝阈值设置为 1-2exp(-T)。T 的值越高,拒绝越多。

return_stats: bool,可选 (默认值 = False)

如果为 True,则同时返回三个附加的浮点值:估计拒绝率、拒绝率上限和成本上限。

delta: float,可选 (默认值 = 0.1)

拒绝率上限以概率 1-delta 成立。

c_fp, c_fn, c_r: float (正值),可选 (默认值 = [1,1, contamination])

误报预测 (c_fp)、漏报预测 (c_fn) 和拒绝 (c_r) 的成本。

返回

outlier_labels形状为 (n_samples,) 的 numpy 数组

对于每个观测值,根据已拟合的模型判断是否应将其视为异常值。0 表示正常值,1 表示异常值,-2 表示拒绝。

expected_rejection_rate: float,如果 return_stats 为 True;upperbound_rejection_rate: float,如果 return_stats 为 True;upperbound_cost: float,如果 return_stats 为 True;

set_params(**params)

设置此估计器的参数。此方法适用于简单估计器和嵌套对象(例如管道)。嵌套对象的参数形式为 <component>__<parameter>,以便可以更新嵌套对象的每个组件。

详见 https://scikit-learn.cn/stable/modules/generated/sklearn.base.BaseEstimator.html 和 sklearn/base.py 获取更多信息。

返回

self : object

pyod.models.loci 模块

局部相关积分 (LOCI)。部分代码改编自 https://github.com/Cloudy10/loci

class pyod.models.loci.LOCI(contamination=0.1, alpha=0.5, k=3)[源代码]

基础类: BaseDetector

局部相关积分。

LOCI 对于检测异常值和异常值组(又称微簇)非常有效,具有以下优点和新颖性:(a) 它提供了一个自动的、由数据决定的截止值来确定一个点是否是异常值——相比之下,之前的方法强制用户选择截止值,而没有任何关于给定数据集的最佳截止值的提示。(b) 它可以为每个点提供一个 LOCI 图;该图总结了点附近数据的丰富信息,确定了簇、微簇、它们的直径以及它们之间的簇间距离。现有的异常检测方法都无法匹敌这一特性,因为它们仅为每个点输出一个数字:其异常值分数。(c) 它的计算速度与之前最好的方法一样快。更多信息请阅读 [BPKGF03]

参数

contamination(0., 0.5) 范围内的浮点型, 可选的 (默认值=0.1)

数据集的污染程度,即数据集中异常值的比例。在拟合时用于定义决策函数的阈值。

alpha整型, 默认值 = 0.5

邻域参数衡量应将多大的邻域视为“局部”。

k: 整型, 默认值 = 3

用于确定一个点是否应被视为异常值的异常值截止阈值。

属性

decision_scores_形状为 (n_samples,) 的 NumPy 数组

训练数据的异常值分数。分数越高表示越异常。异常值往往得分较高。此值在检测器拟合后可用。

threshold_浮点型

阈值基于 contamination。它是 decision_scores_n_samples * contamination 个最异常样本的分数。计算此阈值是为了生成二元异常值标签。

labels_整型, 0 或 1

训练数据的二元标签。0 表示正常值,1 表示异常值/异常。它是通过将 threshold_ 应用于 decision_scores_ 生成的。

示例

>>> from pyod.models.loci import LOCI
>>> from pyod.utils.data import generate_data
>>> n_train = 50
>>> n_test = 50
>>> contamination = 0.1
>>> X_train, y_train, X_test, y_test = generate_data(
...     n_train=n_train, n_test=n_test,
...     contamination=contamination, random_state=42)
>>> clf = LOCI()
>>> clf.fit(X_train)
LOCI(alpha=0.5, contamination=0.1, k=None)
compute_rejection_stats(T=32, delta=0.1, c_fp=1, c_fn=1, c_r=-1, verbose=False)
为无监督检测器添加拒绝选项。

这伴随着保证:预期拒绝率的估计值 (return_rejectrate=True),拒绝率的上限 (return_ub_rejectrate= True),以及成本的上限 (return_ub_cost=True)。

参数

T: int,可选 (默认值=32)

它允许将拒绝阈值设置为 1-2exp(-T)。T 的值越高,拒绝越多。

delta: float,可选 (默认值 = 0.1)

拒绝率上限以概率 1-delta 成立。

c_fp, c_fn, c_r: float (正值),

可选 (默认值 = [1,1, contamination]) 对应于误报预测 (c_fp)、漏报预测 (c_fn) 和拒绝 (c_r) 的成本。

verbose: bool,可选 (默认值 = False)

如果为 True,则打印预期拒绝率、拒绝率上限和成本上限。

返回

expected_rejection_rate: float,预期拒绝率;upperbound_rejection_rate: float,拒绝率上限

概率 1-delta 满足;

upperbound_cost: float,成本上限;

decision_function(X)[源代码]

使用已拟合的检测器预测 X 的原始异常分数。

输入样本的异常分数基于已拟合的检测器计算。为了一致性,异常值被赋予更高的异常分数。

参数

X形状为 (n_samples, n_features) 的 numpy 数组

输入样本。只有当基础估计器支持稀疏矩阵时,才接受稀疏矩阵。

返回

anomaly_scores形状为 (n_samples,) 的 numpy 数组

输入样本的异常分数。

fit(X, y=None)[源代码]

使用 X 作为训练数据拟合模型。

参数

X数组, 形状为 (n_samples, n_features)

训练数据。

y已忽略

未使用,根据约定为了 API 一致性而存在。

返回

self : object

fit_predict(X, y=None)

首先拟合检测器,然后预测特定样本是否为异常值。y 在无监督模型中被忽略。

参数

X形状为 (n_samples, n_features) 的 numpy 数组

输入样本。

y已忽略

未使用,根据约定为了 API 一致性而存在。

返回

outlier_labels形状为 (n_samples,) 的 numpy 数组

对于每个观测值,根据已拟合的模型判断是否应将其视为异常值。0 表示正常值,1 表示异常值。

自 0.6.9 版本起已弃用: fit_predict 将在 pyod 0.8.0 中移除;为了保持一致性,将替换为先调用 fit 函数,然后访问 labels_ 属性。

fit_predict_score(X, y, scoring='roc_auc_score')

拟合检测器,对样本进行预测,并使用预定义指标(例如 ROC)评估模型。

参数

X形状为 (n_samples, n_features) 的 numpy 数组

输入样本。

y已忽略

未使用,根据约定为了 API 一致性而存在。

scoringstr,可选 (默认值=’roc_auc_score’)

评估指标

  • ‘roc_auc_score’: ROC 分数

  • ‘prc_n_score’: Precision @ rank n 分数

返回

score : float

自 0.6.9 版本起已弃用: fit_predict_score 将在 pyod 0.8.0 中移除;为了保持一致性,将替换为先调用 fit 函数,然后访问 labels_ 属性。评分可以通过调用评估方法(例如 AUC ROC)来完成。

get_params(deep=True)

获取此估计器的参数。

详见 https://scikit-learn.cn/stable/modules/generated/sklearn.base.BaseEstimator.html 和 sklearn/base.py 获取更多信息。

参数

deepbool,可选 (默认值=True)

如果为 True,将返回此估计器以及其中包含的作为估计器的子对象的参数。

返回

params从字符串到任意类型的映射

参数名称与其值的映射。

predict(X, return_confidence=False)

预测特定样本是否为异常值。

参数

X形状为 (n_samples, n_features) 的 numpy 数组

输入样本。

return_confidenceboolean,可选 (默认值=False)

如果为 True,则同时返回预测的置信度。

返回

outlier_labels形状为 (n_samples,) 的 numpy 数组

对于每个观测值,根据已拟合的模型判断是否应将其视为异常值。0 表示正常值,1 表示异常值。

confidence形状为 (n_samples,) 的 numpy 数组。

仅当 return_confidence 设置为 True 时返回。

predict_confidence(X)

预测模型在略微不同的训练集下做出相同预测的置信度。参见 [BPVD20]

参数

X形状为 (n_samples, n_features) 的 numpy 数组

输入样本。

返回

confidence形状为 (n_samples,) 的 numpy 数组

对于每个观测值,表示如果在训练集受到扰动时模型会多么一致地做出相同的预测。返回一个概率,范围在 [0,1]。

predict_proba(X, method='linear', return_confidence=False)

预测样本为异常值的概率。有两种可能的方法

  1. 简单使用 Min-max 转换将异常值分数线性变换到 [0,1] 的范围。模型必须先拟合。

  2. 使用统一分数,参见 [BKKSZ11]

参数

X形状为 (n_samples, n_features) 的 numpy 数组

输入样本。

methodstr,可选 (默认值=’linear’)

概率转换方法。必须是 ‘linear’ 或 ‘unify’ 之一。

return_confidenceboolean,可选 (默认值=False)

如果为 True,则同时返回预测的置信度。

返回

outlier_probability形状为 (n_samples, n_classes) 的 numpy 数组

对于每个观测值,根据已拟合的模型判断是否应将其视为异常值。返回异常值概率,范围在 [0,1]。注意,这取决于类别数量,默认情况下为 2 个类别 ([正常概率, 异常概率])。

predict_with_rejection(X, T=32, return_stats=False, delta=0.1, c_fp=1, c_fn=1, c_r=-1)
预测特定样本是否为异常值,

允许检测器拒绝 (即输出 = -2) 低置信度的预测。

参数

X形状为 (n_samples, n_features) 的 numpy 数组

输入样本。

Tint,可选 (默认值=32)

它允许将拒绝阈值设置为 1-2exp(-T)。T 的值越高,拒绝越多。

return_stats: bool,可选 (默认值 = False)

如果为 True,则同时返回三个附加的浮点值:估计拒绝率、拒绝率上限和成本上限。

delta: float,可选 (默认值 = 0.1)

拒绝率上限以概率 1-delta 成立。

c_fp, c_fn, c_r: float (正值),可选 (默认值 = [1,1, contamination])

误报预测 (c_fp)、漏报预测 (c_fn) 和拒绝 (c_r) 的成本。

返回

outlier_labels形状为 (n_samples,) 的 numpy 数组

对于每个观测值,根据已拟合的模型判断是否应将其视为异常值。0 表示正常值,1 表示异常值,-2 表示拒绝。

expected_rejection_rate: float,如果 return_stats 为 True;upperbound_rejection_rate: float,如果 return_stats 为 True;upperbound_cost: float,如果 return_stats 为 True;

set_params(**params)

设置此估计器的参数。此方法适用于简单估计器和嵌套对象(例如管道)。嵌套对象的参数形式为 <component>__<parameter>,以便可以更新嵌套对象的每个组件。

详见 https://scikit-learn.cn/stable/modules/generated/sklearn.base.BaseEstimator.html 和 sklearn/base.py 获取更多信息。

返回

self : object

pyod.models.lunar 模块

LUNAR:通过图神经网络统一局部异常检测方法

class pyod.models.lunar.LUNAR(model_type='WEIGHT', n_neighbours=5, negative_sampling='MIXED', val_size=0.1, scaler=MinMaxScaler(), epsilon=0.1, proportion=1.0, n_epochs=200, lr=0.001, wd=0.1, verbose=0, contamination=0.1)[source]

基础类: BaseDetector

LUNAR 类用于异常检测。详情请参见 https://www.aaai.org/AAAI22Papers/AAAI-51.GoodgeA.pdf。对于一个观测值,其到其 k 个最近邻距离的有序列表被输入到神经网络中,输出为以下之一:

  1. SCORE_MODEL:网络直接输出异常分数。

  2. WEIGHT_MODEL:网络输出 k 个距离的权重集合,异常分数是加权距离的

    总和。

详情请参见 [BGHNN22]

参数

model_type: 字符串,取值范围 ['WEIGHT', 'SCORE'],可选(默认为 'WEIGHT')

选择使用 WEIGHT_MODEL 还是 SCORE_MODEL 进行异常评分。

n_neighbors: 整数,可选(默认为 5)

默认用于 k 近邻查询的邻居数量。

negative_sampling: 字符串,取值范围 ['UNIFORM', 'SUBSPACE', MIXED'],可选(默认为 'MIXED')

使用的负样本类型:

  • 'UNIFORM': 均匀分布的样本

  • 'SUBSPACE': 子空间扰动(在特征子集中添加随机噪声)

  • 'MIXED': 两种类型样本的组合

val_size: 浮点数,取值范围 [0,1],可选(默认为 0.1)

用于模型验证的样本比例

scaler: 对象,取值范围 {StandardScaler(), MinMaxScaler()},可选(默认为 MinMaxScaler())

数据归一化方法

epsilon: 浮点数,可选(默认为 0.1)

用于生成负样本的超参数。epsilon 越小,负样本越与正常样本相似。

proportion: 浮点数,可选(默认为 1.0)

负样本数量相对于正常训练样本数量的比例超参数。

n_epochs: 整数,可选(默认为 200)

训练神经网络的轮数。

lr: 浮点数,可选(默认为 0.001)

学习率。

wd: 浮点数,可选(默认为 0.1)

权重衰减。

verbose: 整数,取值范围 {0,1},可选(默认为 0)

显示或隐藏训练进度

属性

compute_rejection_stats(T=32, delta=0.1, c_fp=1, c_fn=1, c_r=-1, verbose=False)
为无监督检测器添加拒绝选项。

这伴随着保证:预期拒绝率的估计值 (return_rejectrate=True),拒绝率的上限 (return_ub_rejectrate= True),以及成本的上限 (return_ub_cost=True)。

参数

T: int,可选 (默认值=32)

它允许将拒绝阈值设置为 1-2exp(-T)。T 的值越高,拒绝越多。

delta: float,可选 (默认值 = 0.1)

拒绝率上限以概率 1-delta 成立。

c_fp, c_fn, c_r: float (正值),

可选 (默认值 = [1,1, contamination]) 对应于误报预测 (c_fp)、漏报预测 (c_fn) 和拒绝 (c_r) 的成本。

verbose: bool,可选 (默认值 = False)

如果为 True,则打印预期拒绝率、拒绝率上限和成本上限。

返回

expected_rejection_rate: float,预期拒绝率;upperbound_rejection_rate: float,拒绝率上限

概率 1-delta 满足;

upperbound_cost: float,成本上限;

decision_function(X)[source]

使用已拟合的检测器预测 X 的原始异常分数。为保持一致性,异常点被赋予较大的异常分数。 参数 ———- X : 形状为 (n_samples, n_features) 的 numpy 数组

训练输入样本。

返回

anomaly_scores形状为 (n_samples,) 的 numpy 数组

输入样本的异常分数。

fit(X, y=None)[source]

拟合检测器。y 对于所有训练样本假定为 0。 参数 ———- X : 形状为 (n_samples, n_features) 的 numpy 数组

输入样本。

y已忽略

对所有训练样本(假定为正常)覆盖为 0。

返回

self对象

已拟合的估计器。

fit_predict(X, y=None)

首先拟合检测器,然后预测特定样本是否为异常值。y 在无监督模型中被忽略。

参数

X形状为 (n_samples, n_features) 的 numpy 数组

输入样本。

y已忽略

未使用,根据约定为了 API 一致性而存在。

返回

outlier_labels形状为 (n_samples,) 的 numpy 数组

对于每个观测值,根据已拟合的模型判断是否应将其视为异常值。0 表示正常值,1 表示异常值。

自 0.6.9 版本起已弃用: fit_predict 将在 pyod 0.8.0 中移除;为了保持一致性,将替换为先调用 fit 函数,然后访问 labels_ 属性。

fit_predict_score(X, y, scoring='roc_auc_score')

拟合检测器,对样本进行预测,并使用预定义指标(例如 ROC)评估模型。

参数

X形状为 (n_samples, n_features) 的 numpy 数组

输入样本。

y已忽略

未使用,根据约定为了 API 一致性而存在。

scoringstr,可选 (默认值=’roc_auc_score’)

评估指标

  • ‘roc_auc_score’: ROC 分数

  • ‘prc_n_score’: Precision @ rank n 分数

返回

score : float

自 0.6.9 版本起已弃用: fit_predict_score 将在 pyod 0.8.0 中移除;为了保持一致性,将替换为先调用 fit 函数,然后访问 labels_ 属性。评分可以通过调用评估方法(例如 AUC ROC)来完成。

get_params(deep=True)

获取此估计器的参数。

详见 https://scikit-learn.cn/stable/modules/generated/sklearn.base.BaseEstimator.html 和 sklearn/base.py 获取更多信息。

参数

deepbool,可选 (默认值=True)

如果为 True,将返回此估计器以及其中包含的作为估计器的子对象的参数。

返回

params从字符串到任意类型的映射

参数名称与其值的映射。

predict(X, return_confidence=False)

预测特定样本是否为异常值。

参数

X形状为 (n_samples, n_features) 的 numpy 数组

输入样本。

return_confidenceboolean,可选 (默认值=False)

如果为 True,则同时返回预测的置信度。

返回

outlier_labels形状为 (n_samples,) 的 numpy 数组

对于每个观测值,根据已拟合的模型判断是否应将其视为异常值。0 表示正常值,1 表示异常值。

confidence形状为 (n_samples,) 的 numpy 数组。

仅当 return_confidence 设置为 True 时返回。

predict_confidence(X)

预测模型在略微不同的训练集下做出相同预测的置信度。参见 [BPVD20]

参数

X形状为 (n_samples, n_features) 的 numpy 数组

输入样本。

返回

confidence形状为 (n_samples,) 的 numpy 数组

对于每个观测值,表示如果在训练集受到扰动时模型会多么一致地做出相同的预测。返回一个概率,范围在 [0,1]。

predict_proba(X, method='linear', return_confidence=False)

预测样本为异常值的概率。有两种可能的方法

  1. 简单使用 Min-max 转换将异常值分数线性变换到 [0,1] 的范围。模型必须先拟合。

  2. 使用统一分数,参见 [BKKSZ11]

参数

X形状为 (n_samples, n_features) 的 numpy 数组

输入样本。

methodstr,可选 (默认值=’linear’)

概率转换方法。必须是 ‘linear’ 或 ‘unify’ 之一。

return_confidenceboolean,可选 (默认值=False)

如果为 True,则同时返回预测的置信度。

返回

outlier_probability形状为 (n_samples, n_classes) 的 numpy 数组

对于每个观测值,根据已拟合的模型判断是否应将其视为异常值。返回异常值概率,范围在 [0,1]。注意,这取决于类别数量,默认情况下为 2 个类别 ([正常概率, 异常概率])。

predict_with_rejection(X, T=32, return_stats=False, delta=0.1, c_fp=1, c_fn=1, c_r=-1)
预测特定样本是否为异常值,

允许检测器拒绝 (即输出 = -2) 低置信度的预测。

参数

X形状为 (n_samples, n_features) 的 numpy 数组

输入样本。

Tint,可选 (默认值=32)

它允许将拒绝阈值设置为 1-2exp(-T)。T 的值越高,拒绝越多。

return_stats: bool,可选 (默认值 = False)

如果为 True,则同时返回三个附加的浮点值:估计拒绝率、拒绝率上限和成本上限。

delta: float,可选 (默认值 = 0.1)

拒绝率上限以概率 1-delta 成立。

c_fp, c_fn, c_r: float (正值),可选 (默认值 = [1,1, contamination])

误报预测 (c_fp)、漏报预测 (c_fn) 和拒绝 (c_r) 的成本。

返回

outlier_labels形状为 (n_samples,) 的 numpy 数组

对于每个观测值,根据已拟合的模型判断是否应将其视为异常值。0 表示正常值,1 表示异常值,-2 表示拒绝。

expected_rejection_rate: float,如果 return_stats 为 True;upperbound_rejection_rate: float,如果 return_stats 为 True;upperbound_cost: float,如果 return_stats 为 True;

set_params(**params)

设置此估计器的参数。此方法适用于简单估计器和嵌套对象(例如管道)。嵌套对象的参数形式为 <component>__<parameter>,以便可以更新嵌套对象的每个组件。

详见 https://scikit-learn.cn/stable/modules/generated/sklearn.base.BaseEstimator.html 和 sklearn/base.py 获取更多信息。

返回

self : object

pyod.models.lscp 模块

并行异常点集成模型的局部选择组合 (LSCP)。改编自原始实现。

class pyod.models.lscp.LSCP(detector_list, local_region_size=30, local_max_features=1.0, n_bins=10, random_state=None, contamination=0.1)[source]

基础类: BaseDetector

并行异常点集成的局部选择组合

LSCP 是一种无监督的并行异常检测集成方法,它在测试实例的局部区域选择有能力的检测器。此实现使用平均最大策略。首先,一个异构的基础检测器列表被拟合到训练数据,然后通过取最大异常分数生成每个训练实例的伪地面真实。

对于每个测试实例:1)局部区域定义为在随机采样的特征子空间中比定义阈值更频繁出现的最近训练点集合,经过多次迭代。

2)使用局部区域定义局部伪地面真实,并计算每个基础检测器的训练异常分数与伪地面真实之间的 Pearson 相关系数。

3)基于 Pearson 相关系数构建直方图;最大 bin 中的检测器被选为给定测试实例的有能力的基础检测器。

4)选定的有能力检测器的平均异常分数被作为最终分数。

详情请参见 [BZNHL19]

参数

detector_list列表,长度必须大于 1

PyOD 中的基础无监督异常检测器。(注意:需要 fit 和 decision_function 方法)

local_region_size整数,可选(默认为 30)

在局部区域生成过程的每次迭代中考虑的训练点数量(默认为 30)。

local_max_features浮点数,取值范围 (0.5, 1.),可选(默认为 1.0)

定义局部区域时考虑的特征数量的最大比例(默认为 1.0)。

n_bins整数,可选(默认为 10)

选择局部区域时使用的 bin 数量

random_stateRandomState 对象,可选(默认为 None)

用于定义随机排列生成器状态的随机数生成器实例。

contaminationfloat,范围 (0., 0.5),可选 (默认值=0.1)

数据集的污染量,即数据集中异常点的比例。拟合时用于定义决策函数的阈值(默认为 0.1)。

属性

decision_scores_numpy array of shape (n_samples,)

训练数据的异常值分数。分数越高表示越异常。异常值往往得分较高。此值在检测器拟合后可用。

threshold_float

阈值基于 contamination。它是 decision_scores_n_samples * contamination 个最异常样本的分数。计算此阈值是为了生成二元异常值标签。

labels_int, either 0 or 1

训练数据的二元标签。0 表示正常值,1 表示异常值/异常。它是通过将 threshold_ 应用于 decision_scores_ 生成的。

示例

>>> from pyod.utils.data import generate_data
>>> from pyod.utils.utility import standardizer
>>> from pyod.models.lscp import LSCP
>>> from pyod.models.lof import LOF
>>> X_train, y_train, X_test, y_test = generate_data(
...     n_train=50, n_test=50,
...     contamination=0.1, random_state=42)
>>> X_train, X_test = standardizer(X_train, X_test)
>>> detector_list = [LOF(), LOF()]
>>> clf = LSCP(detector_list)
>>> clf.fit(X_train)
LSCP(...)
compute_rejection_stats(T=32, delta=0.1, c_fp=1, c_fn=1, c_r=-1, verbose=False)
为无监督检测器添加拒绝选项。

这伴随着保证:预期拒绝率的估计值 (return_rejectrate=True),拒绝率的上限 (return_ub_rejectrate= True),以及成本的上限 (return_ub_cost=True)。

参数

T: int,可选 (默认值=32)

它允许将拒绝阈值设置为 1-2exp(-T)。T 的值越高,拒绝越多。

delta: float,可选 (默认值 = 0.1)

拒绝率上限以概率 1-delta 成立。

c_fp, c_fn, c_r: float (正值),

可选 (默认值 = [1,1, contamination]) 对应于误报预测 (c_fp)、漏报预测 (c_fn) 和拒绝 (c_r) 的成本。

verbose: bool,可选 (默认值 = False)

如果为 True,则打印预期拒绝率、拒绝率上限和成本上限。

返回

expected_rejection_rate: float,预期拒绝率;upperbound_rejection_rate: float,拒绝率上限

概率 1-delta 满足;

upperbound_cost: float,成本上限;

decision_function(X)[source]

使用已拟合的检测器预测 X 的原始异常分数。

输入样本的异常分数是根据不同的检测器算法计算的。为了一致性,异常值被赋予较大的异常分数。

参数

X形状为 (n_samples, n_features) 的 numpy 数组

训练输入样本。仅当基础估计器支持时,才接受稀疏矩阵。

返回

anomaly_scores形状为 (n_samples,) 的 numpy 数组

输入样本的异常分数。

fit(X, y=None)[source]

拟合检测器。y 在无监督方法中被忽略。

参数

X形状为 (n_samples, n_features) 的 numpy 数组

输入样本。

y已忽略

未使用,根据约定为了 API 一致性而存在。

返回

self对象

已拟合的估计器。

fit_predict(X, y=None)

首先拟合检测器,然后预测特定样本是否为异常值。y 在无监督模型中被忽略。

参数

X形状为 (n_samples, n_features) 的 numpy 数组

输入样本。

y已忽略

未使用,根据约定为了 API 一致性而存在。

返回

outlier_labels形状为 (n_samples,) 的 numpy 数组

对于每个观测值,根据已拟合的模型判断是否应将其视为异常值。0 表示正常值,1 表示异常值。

自 0.6.9 版本起已弃用: fit_predict 将在 pyod 0.8.0 中移除;为了保持一致性,将替换为先调用 fit 函数,然后访问 labels_ 属性。

fit_predict_score(X, y, scoring='roc_auc_score')

拟合检测器,对样本进行预测,并使用预定义指标(例如 ROC)评估模型。

参数

X形状为 (n_samples, n_features) 的 numpy 数组

输入样本。

y已忽略

未使用,根据约定为了 API 一致性而存在。

scoringstr,可选 (默认值=’roc_auc_score’)

评估指标

  • ‘roc_auc_score’: ROC 分数

  • ‘prc_n_score’: Precision @ rank n 分数

返回

score : float

自 0.6.9 版本起已弃用: fit_predict_score 将在 pyod 0.8.0 中移除;为了保持一致性,将替换为先调用 fit 函数,然后访问 labels_ 属性。评分可以通过调用评估方法(例如 AUC ROC)来完成。

get_params(deep=True)

获取此估计器的参数。

详见 https://scikit-learn.cn/stable/modules/generated/sklearn.base.BaseEstimator.html 和 sklearn/base.py 获取更多信息。

参数

deepbool,可选 (默认值=True)

如果为 True,将返回此估计器以及其中包含的作为估计器的子对象的参数。

返回

params从字符串到任意类型的映射

参数名称与其值的映射。

predict(X, return_confidence=False)

预测特定样本是否为异常值。

参数

X形状为 (n_samples, n_features) 的 numpy 数组

输入样本。

return_confidenceboolean,可选 (默认值=False)

如果为 True,则同时返回预测的置信度。

返回

outlier_labels形状为 (n_samples,) 的 numpy 数组

对于每个观测值,根据已拟合的模型判断是否应将其视为异常值。0 表示正常值,1 表示异常值。

confidence形状为 (n_samples,) 的 numpy 数组。

仅当 return_confidence 设置为 True 时返回。

predict_confidence(X)

预测模型在略微不同的训练集下做出相同预测的置信度。参见 [BPVD20]

参数

X形状为 (n_samples, n_features) 的 numpy 数组

输入样本。

返回

confidence形状为 (n_samples,) 的 numpy 数组

对于每个观测值,表示如果在训练集受到扰动时模型会多么一致地做出相同的预测。返回一个概率,范围在 [0,1]。

predict_proba(X, method='linear', return_confidence=False)

预测样本为异常值的概率。有两种可能的方法

  1. 简单使用 Min-max 转换将异常值分数线性变换到 [0,1] 的范围。模型必须先拟合。

  2. 使用统一分数,参见 [BKKSZ11]

参数

X形状为 (n_samples, n_features) 的 numpy 数组

输入样本。

methodstr,可选 (默认值=’linear’)

概率转换方法。必须是 ‘linear’ 或 ‘unify’ 之一。

return_confidenceboolean,可选 (默认值=False)

如果为 True,则同时返回预测的置信度。

返回

outlier_probability形状为 (n_samples, n_classes) 的 numpy 数组

对于每个观测值,根据已拟合的模型判断是否应将其视为异常值。返回异常值概率,范围在 [0,1]。注意,这取决于类别数量,默认情况下为 2 个类别 ([正常概率, 异常概率])。

predict_with_rejection(X, T=32, return_stats=False, delta=0.1, c_fp=1, c_fn=1, c_r=-1)
预测特定样本是否为异常值,

允许检测器拒绝 (即输出 = -2) 低置信度的预测。

参数

X形状为 (n_samples, n_features) 的 numpy 数组

输入样本。

Tint,可选 (默认值=32)

它允许将拒绝阈值设置为 1-2exp(-T)。T 的值越高,拒绝越多。

return_stats: bool,可选 (默认值 = False)

如果为 True,则同时返回三个附加的浮点值:估计拒绝率、拒绝率上限和成本上限。

delta: float,可选 (默认值 = 0.1)

拒绝率上限以概率 1-delta 成立。

c_fp, c_fn, c_r: float (正值),可选 (默认值 = [1,1, contamination])

误报预测 (c_fp)、漏报预测 (c_fn) 和拒绝 (c_r) 的成本。

返回

outlier_labels形状为 (n_samples,) 的 numpy 数组

对于每个观测值,根据已拟合的模型判断是否应将其视为异常值。0 表示正常值,1 表示异常值,-2 表示拒绝。

expected_rejection_rate: float,如果 return_stats 为 True;upperbound_rejection_rate: float,如果 return_stats 为 True;upperbound_cost: float,如果 return_stats 为 True;

set_params(**params)

设置此估计器的参数。此方法适用于简单估计器和嵌套对象(例如管道)。嵌套对象的参数形式为 <component>__<parameter>,以便可以更新嵌套对象的每个组件。

详见 https://scikit-learn.cn/stable/modules/generated/sklearn.base.BaseEstimator.html 和 sklearn/base.py 获取更多信息。

返回

self : object

pyod.models.mad 模块

中位数绝对偏差 (MAD) 算法。严格用于单变量数据。

class pyod.models.mad.MAD(threshold=3.5, contamination=0.1)[source]

基础类: BaseDetector

中位数绝对偏差:用于测量数据点与中位数之间以中位数距离为单位的距离。详情请参见 [BIH93]

参数

threshold浮点数,可选(默认为 3.5)

用作阈值的修正 z 分数。修正 z 分数(基于中位数绝对偏差)大于此值的观测值将被归类为异常值。

属性

decision_scores_numpy array of shape (n_samples,)

训练数据的异常值分数。分数越高表示越异常。异常值往往得分较高。此值在检测器拟合后可用。

threshold_float

用作阈值的修正 z 分数。修正 z 分数(基于中位数绝对偏差)大于此值的观测值将被归类为异常值。

labels_int, either 0 or 1

训练数据的二元标签。0 表示正常值,1 表示异常值/异常。它是通过将 threshold_ 应用于 decision_scores_ 生成的。

compute_rejection_stats(T=32, delta=0.1, c_fp=1, c_fn=1, c_r=-1, verbose=False)
为无监督检测器添加拒绝选项。

这伴随着保证:预期拒绝率的估计值 (return_rejectrate=True),拒绝率的上限 (return_ub_rejectrate= True),以及成本的上限 (return_ub_cost=True)。

参数

T: int,可选 (默认值=32)

它允许将拒绝阈值设置为 1-2exp(-T)。T 的值越高,拒绝越多。

delta: float,可选 (默认值 = 0.1)

拒绝率上限以概率 1-delta 成立。

c_fp, c_fn, c_r: float (正值),

可选 (默认值 = [1,1, contamination]) 对应于误报预测 (c_fp)、漏报预测 (c_fn) 和拒绝 (c_r) 的成本。

verbose: bool,可选 (默认值 = False)

如果为 True,则打印预期拒绝率、拒绝率上限和成本上限。

返回

expected_rejection_rate: float,预期拒绝率;upperbound_rejection_rate: float,拒绝率上限

概率 1-delta 满足;

upperbound_cost: float,成本上限;

decision_function(X)[source]

使用拟合的检测器预测 X 的原始异常分数。输入样本的异常分数是基于不同的检测器算法计算的。为了保持一致性,异常值被赋予更高的异常分数。

参数

X形状为 (n_samples, n_features) 的 numpy 数组

训练输入样本。仅当基础估计器支持时才接受稀疏矩阵。注意 n_features 必须等于 1。

返回

anomaly_scores形状为 (n_samples,) 的 numpy 数组

输入样本的异常分数。

fit(X, y=None)[source]

拟合检测器。y 在无监督方法中被忽略。

参数

X形状为 (n_samples, n_features) 的 numpy 数组

输入样本。注意 n_features 必须等于 1。

y已忽略

未使用,根据约定为了 API 一致性而存在。

返回

self对象

已拟合的估计器。

fit_predict(X, y=None)

首先拟合检测器,然后预测特定样本是否为异常值。y 在无监督模型中被忽略。

参数

X形状为 (n_samples, n_features) 的 numpy 数组

输入样本。

y已忽略

未使用,根据约定为了 API 一致性而存在。

返回

outlier_labels形状为 (n_samples,) 的 numpy 数组

对于每个观测值,根据已拟合的模型判断是否应将其视为异常值。0 表示正常值,1 表示异常值。

自 0.6.9 版本起已弃用: fit_predict 将在 pyod 0.8.0 中移除;为了保持一致性,将替换为先调用 fit 函数,然后访问 labels_ 属性。

fit_predict_score(X, y, scoring='roc_auc_score')

拟合检测器,对样本进行预测,并使用预定义指标(例如 ROC)评估模型。

参数

X形状为 (n_samples, n_features) 的 numpy 数组

输入样本。

y已忽略

未使用,根据约定为了 API 一致性而存在。

scoringstr,可选 (默认值=’roc_auc_score’)

评估指标

  • ‘roc_auc_score’: ROC 分数

  • ‘prc_n_score’: Precision @ rank n 分数

返回

score : float

自 0.6.9 版本起已弃用: fit_predict_score 将在 pyod 0.8.0 中移除;为了保持一致性,将替换为先调用 fit 函数,然后访问 labels_ 属性。评分可以通过调用评估方法(例如 AUC ROC)来完成。

get_params(deep=True)

获取此估计器的参数。

详见 https://scikit-learn.cn/stable/modules/generated/sklearn.base.BaseEstimator.html 和 sklearn/base.py 获取更多信息。

参数

deepbool,可选 (默认值=True)

如果为 True,将返回此估计器以及其中包含的作为估计器的子对象的参数。

返回

params从字符串到任意类型的映射

参数名称与其值的映射。

predict(X, return_confidence=False)

预测特定样本是否为异常值。

参数

X形状为 (n_samples, n_features) 的 numpy 数组

输入样本。

return_confidenceboolean,可选 (默认值=False)

如果为 True,则同时返回预测的置信度。

返回

outlier_labels形状为 (n_samples,) 的 numpy 数组

对于每个观测值,根据已拟合的模型判断是否应将其视为异常值。0 表示正常值,1 表示异常值。

confidence形状为 (n_samples,) 的 numpy 数组。

仅当 return_confidence 设置为 True 时返回。

predict_confidence(X)

预测模型在略微不同的训练集下做出相同预测的置信度。参见 [BPVD20]

参数

X形状为 (n_samples, n_features) 的 numpy 数组

输入样本。

返回

confidence形状为 (n_samples,) 的 numpy 数组

对于每个观测值,表示如果在训练集受到扰动时模型会多么一致地做出相同的预测。返回一个概率,范围在 [0,1]。

predict_proba(X, method='linear', return_confidence=False)

预测样本为异常值的概率。有两种可能的方法

  1. 简单使用 Min-max 转换将异常值分数线性变换到 [0,1] 的范围。模型必须先拟合。

  2. 使用统一分数,参见 [BKKSZ11]

参数

X形状为 (n_samples, n_features) 的 numpy 数组

输入样本。

methodstr,可选 (默认值=’linear’)

概率转换方法。必须是 ‘linear’ 或 ‘unify’ 之一。

return_confidenceboolean,可选 (默认值=False)

如果为 True,则同时返回预测的置信度。

返回

outlier_probability形状为 (n_samples, n_classes) 的 numpy 数组

对于每个观测值,根据已拟合的模型判断是否应将其视为异常值。返回异常值概率,范围在 [0,1]。注意,这取决于类别数量,默认情况下为 2 个类别 ([正常概率, 异常概率])。

predict_with_rejection(X, T=32, return_stats=False, delta=0.1, c_fp=1, c_fn=1, c_r=-1)
预测特定样本是否为异常值,

允许检测器拒绝 (即输出 = -2) 低置信度的预测。

参数

X形状为 (n_samples, n_features) 的 numpy 数组

输入样本。

Tint,可选 (默认值=32)

它允许将拒绝阈值设置为 1-2exp(-T)。T 的值越高,拒绝越多。

return_stats: bool,可选 (默认值 = False)

如果为 True,则同时返回三个附加的浮点值:估计拒绝率、拒绝率上限和成本上限。

delta: float,可选 (默认值 = 0.1)

拒绝率上限以概率 1-delta 成立。

c_fp, c_fn, c_r: float (正值),可选 (默认值 = [1,1, contamination])

误报预测 (c_fp)、漏报预测 (c_fn) 和拒绝 (c_r) 的成本。

返回

outlier_labels形状为 (n_samples,) 的 numpy 数组

对于每个观测值,根据已拟合的模型判断是否应将其视为异常值。0 表示正常值,1 表示异常值,-2 表示拒绝。

expected_rejection_rate: float,如果 return_stats 为 True;upperbound_rejection_rate: float,如果 return_stats 为 True;upperbound_cost: float,如果 return_stats 为 True;

set_params(**params)

设置此估计器的参数。此方法适用于简单估计器和嵌套对象(例如管道)。嵌套对象的参数形式为 <component>__<parameter>,以便可以更新嵌套对象的每个组件。

详见 https://scikit-learn.cn/stable/modules/generated/sklearn.base.BaseEstimator.html 和 sklearn/base.py 获取更多信息。

返回

self : object

pyod.models.mcd 模块

使用最小协方差行列式 (MCD) 进行异常检测

class pyod.models.mcd.MCD(contamination=0.1, store_precision=True, assume_centered=False, support_fraction=None, random_state=None)[source]

基础类: BaseDetector

使用最小协方差行列式 (MCD) 在高斯分布数据集内检测异常点:一种鲁棒的协方差估计器。

最小协方差行列式协方差估计器适用于高斯分布数据,但也可用于单峰、对称分布的数据。它不适用于多峰数据(用于拟合 MinCovDet 对象的算法在这种情况下可能会失败)。对于多峰数据集,应考虑投影追踪方法。

首先拟合最小协方差行列式模型,然后计算马氏距离作为数据的异常程度。

详情请参见 [BHR04, BRD99]

参数

contaminationfloat,范围 (0., 0.5),可选 (默认值=0.1)

数据集的污染程度,即数据集中异常值的比例。在拟合时用于定义决策函数的阈值。

store_precision布尔值

指定是否存储估计的精度矩阵。

assume_centered布尔值

如果设置为 True,则计算鲁棒位置和协方差估计的支持,并从中重新计算协方差估计,而不对数据进行中心化。对于均值显著等于零但不完全为零的数据很有用。如果设置为 False,则直接使用 FastMCD 算法计算鲁棒位置和协方差,不进行额外处理。

support_fraction浮点数,0 < support_fraction < 1

包含在原始 MCD 估计支持中的点比例。默认为 None,这意味着将使用算法中的支持比例最小值:[n_sample + n_features + 1] / 2

random_stateint, RandomState 实例或 None, 可选 (默认=None)

如果是 int,random_state 是随机数生成器使用的种子;如果是 RandomState 实例,random_state 是随机数生成器;如果是 None,随机数生成器是 np.random 使用的 RandomState 实例。

属性

raw_location_array-like, shape (n_features,)

校正和重新加权之前的原始鲁棒估计位置。

raw_covariance_array-like, shape (n_features, n_features)

校正和重新加权之前的原始鲁棒估计协方差矩阵。

raw_support_array-like, shape (n_samples,)

在校正和重新加权之前,用于计算原始鲁棒位置和形状估计的观测数据的掩码。

location_array-like, shape (n_features,)

估计的鲁棒位置

covariance_array-like, shape (n_features, n_features)

估计的鲁棒协方差矩阵

precision_array-like, shape (n_features, n_features)

估计的伪逆矩阵。(仅当 store_precision 为 True 时存储)

support_array-like, shape (n_samples,)

用于计算鲁棒位置和形状估计的观测数据的掩码。

decision_scores_numpy array of shape (n_samples,)

训练数据的异常分数。分数越高,越异常。异常点倾向于获得更高的分数。该值在检测器拟合后可用。这是对训练集(在 :meth:`fit 上调用)观测值的马氏距离。

threshold_float

阈值基于 contamination。它是 decision_scores_n_samples * contamination 个最异常样本的分数。计算此阈值是为了生成二元异常值标签。

labels_int, either 0 or 1

训练数据的二元标签。0 表示正常值,1 表示异常值/异常。它是通过将 threshold_ 应用于 decision_scores_ 生成的。

compute_rejection_stats(T=32, delta=0.1, c_fp=1, c_fn=1, c_r=-1, verbose=False)
为无监督检测器添加拒绝选项。

这伴随着保证:预期拒绝率的估计值 (return_rejectrate=True),拒绝率的上限 (return_ub_rejectrate= True),以及成本的上限 (return_ub_cost=True)。

参数

T: int,可选 (默认值=32)

它允许将拒绝阈值设置为 1-2exp(-T)。T 的值越高,拒绝越多。

delta: float,可选 (默认值 = 0.1)

拒绝率上限以概率 1-delta 成立。

c_fp, c_fn, c_r: float (正值),

可选 (默认值 = [1,1, contamination]) 对应于误报预测 (c_fp)、漏报预测 (c_fn) 和拒绝 (c_r) 的成本。

verbose: bool,可选 (默认值 = False)

如果为 True,则打印预期拒绝率、拒绝率上限和成本上限。

返回

expected_rejection_rate: float,预期拒绝率;upperbound_rejection_rate: float,拒绝率上限

概率 1-delta 满足;

upperbound_cost: float,成本上限;

decision_function(X)[source]

使用已拟合的检测器预测 X 的原始异常分数。

输入样本的异常分数是根据不同的检测器算法计算的。为了一致性,异常值被赋予较大的异常分数。

参数

X形状为 (n_samples, n_features) 的 numpy 数组

训练输入样本。仅当基础估计器支持时,才接受稀疏矩阵。

返回

anomaly_scores形状为 (n_samples,) 的 numpy 数组

输入样本的异常分数。

fit(X, y=None)[source]

拟合检测器。y 在无监督方法中被忽略。

参数

X形状为 (n_samples, n_features) 的 numpy 数组

输入样本。

y已忽略

未使用,根据约定为了 API 一致性而存在。

返回

self对象

已拟合的估计器。

fit_predict(X, y=None)

首先拟合检测器,然后预测特定样本是否为异常值。y 在无监督模型中被忽略。

参数

X形状为 (n_samples, n_features) 的 numpy 数组

输入样本。

y已忽略

未使用,根据约定为了 API 一致性而存在。

返回

outlier_labels形状为 (n_samples,) 的 numpy 数组

对于每个观测值,根据已拟合的模型判断是否应将其视为异常值。0 表示正常值,1 表示异常值。

自 0.6.9 版本起已弃用: fit_predict 将在 pyod 0.8.0 中移除;为了保持一致性,将替换为先调用 fit 函数,然后访问 labels_ 属性。

fit_predict_score(X, y, scoring='roc_auc_score')

拟合检测器,对样本进行预测,并使用预定义指标(例如 ROC)评估模型。

参数

X形状为 (n_samples, n_features) 的 numpy 数组

输入样本。

y已忽略

未使用,根据约定为了 API 一致性而存在。

scoringstr,可选 (默认值=’roc_auc_score’)

评估指标

  • ‘roc_auc_score’: ROC 分数

  • ‘prc_n_score’: Precision @ rank n 分数

返回

score : float

自 0.6.9 版本起已弃用: fit_predict_score 将在 pyod 0.8.0 中移除;为了保持一致性,将替换为先调用 fit 函数,然后访问 labels_ 属性。评分可以通过调用评估方法(例如 AUC ROC)来完成。

get_params(deep=True)

获取此估计器的参数。

详见 https://scikit-learn.cn/stable/modules/generated/sklearn.base.BaseEstimator.html 和 sklearn/base.py 获取更多信息。

参数

deepbool,可选 (默认值=True)

如果为 True,将返回此估计器以及其中包含的作为估计器的子对象的参数。

返回

params从字符串到任意类型的映射

参数名称与其值的映射。

predict(X, return_confidence=False)

预测特定样本是否为异常值。

参数

X形状为 (n_samples, n_features) 的 numpy 数组

输入样本。

return_confidenceboolean,可选 (默认值=False)

如果为 True,则同时返回预测的置信度。

返回

outlier_labels形状为 (n_samples,) 的 numpy 数组

对于每个观测值,根据已拟合的模型判断是否应将其视为异常值。0 表示正常值,1 表示异常值。

confidence形状为 (n_samples,) 的 numpy 数组。

仅当 return_confidence 设置为 True 时返回。

predict_confidence(X)

预测模型在略微不同的训练集下做出相同预测的置信度。参见 [BPVD20]

参数

X形状为 (n_samples, n_features) 的 numpy 数组

输入样本。

返回

confidence形状为 (n_samples,) 的 numpy 数组

对于每个观测值,表示如果在训练集受到扰动时模型会多么一致地做出相同的预测。返回一个概率,范围在 [0,1]。

predict_proba(X, method='linear', return_confidence=False)

预测样本为异常值的概率。有两种可能的方法

  1. 简单使用 Min-max 转换将异常值分数线性变换到 [0,1] 的范围。模型必须先拟合。

  2. 使用统一分数,参见 [BKKSZ11]

参数

X形状为 (n_samples, n_features) 的 numpy 数组

输入样本。

methodstr,可选 (默认值=’linear’)

概率转换方法。必须是 ‘linear’ 或 ‘unify’ 之一。

return_confidenceboolean,可选 (默认值=False)

如果为 True,则同时返回预测的置信度。

返回

outlier_probability形状为 (n_samples, n_classes) 的 numpy 数组

对于每个观测值,根据已拟合的模型判断是否应将其视为异常值。返回异常值概率,范围在 [0,1]。注意,这取决于类别数量,默认情况下为 2 个类别 ([正常概率, 异常概率])。

predict_with_rejection(X, T=32, return_stats=False, delta=0.1, c_fp=1, c_fn=1, c_r=-1)
预测特定样本是否为异常值,

允许检测器拒绝 (即输出 = -2) 低置信度的预测。

参数

X形状为 (n_samples, n_features) 的 numpy 数组

输入样本。

Tint,可选 (默认值=32)

它允许将拒绝阈值设置为 1-2exp(-T)。T 的值越高,拒绝越多。

return_stats: bool,可选 (默认值 = False)

如果为 True,则同时返回三个附加的浮点值:估计拒绝率、拒绝率上限和成本上限。

delta: float,可选 (默认值 = 0.1)

拒绝率上限以概率 1-delta 成立。

c_fp, c_fn, c_r: float (正值),可选 (默认值 = [1,1, contamination])

误报预测 (c_fp)、漏报预测 (c_fn) 和拒绝 (c_r) 的成本。

返回

outlier_labels形状为 (n_samples,) 的 numpy 数组

对于每个观测值,根据已拟合的模型判断是否应将其视为异常值。0 表示正常值,1 表示异常值,-2 表示拒绝。

expected_rejection_rate: float,如果 return_stats 为 True;upperbound_rejection_rate: float,如果 return_stats 为 True;upperbound_cost: float,如果 return_stats 为 True;

set_params(**params)

设置此估计器的参数。此方法适用于简单估计器和嵌套对象(例如管道)。嵌套对象的参数形式为 <component>__<parameter>,以便可以更新嵌套对象的每个组件。

详见 https://scikit-learn.cn/stable/modules/generated/sklearn.base.BaseEstimator.html 和 sklearn/base.py 获取更多信息。

返回

self : object

pyod.models.mo_gaal 模块

多目标生成对抗主动学习。部分代码改编自 https://github.com/leibinghe/GAAL-based-outlier-detection

class pyod.models.mo_gaal.MO_GAAL(k=10, stop_epochs=20, lr_d=0.01, lr_g=0.0001, momentum=0.9, contamination=0.1)[source]

基础类: BaseDetector

多目标生成对抗主动学习。

MO_GAAL 直接生成信息丰富的潜在异常点,以帮助分类器描述能够有效分离异常点和正常数据的边界。此外,为了防止生成器陷入模式崩溃问题,SO-GAAL 的网络结构从单个生成器 (SO-GAAL) 扩展到具有不同目标的多生成器 (MO-GAAL),为整个数据集生成合理的参考分布。更多详情请参阅 [BLLZ+19]

参数

contaminationfloat,范围 (0., 0.5),可选 (默认值=0.1)

数据集的污染程度,即数据集中异常值的比例。在拟合时用于定义决策函数的阈值。

k整数,可选(默认为 10)

子生成器的数量。

stop_epochs整数,可选(默认为 20)

训练的轮数。总轮数等于 stop_epochs 的三倍。

lr_d浮点数,可选(默认为 0.01)

判别器的学习率。

lr_g浮点数,可选(默认为 0.0001)

生成器的学习率。

momentum浮点数,可选(默认为 0.9)

SGD 的动量参数。

属性

decision_scores_numpy array of shape (n_samples,)

训练数据的异常值分数。分数越高表示越异常。异常值往往得分较高。此值在检测器拟合后可用。

threshold_float

阈值基于 contamination。它是 decision_scores_n_samples * contamination 个最异常样本的分数。计算此阈值是为了生成二元异常值标签。

labels_int, either 0 or 1

训练数据的二元标签。0 表示正常值,1 表示异常值/异常。它是通过将 threshold_ 应用于 decision_scores_ 生成的。

compute_rejection_stats(T=32, delta=0.1, c_fp=1, c_fn=1, c_r=-1, verbose=False)
为无监督检测器添加拒绝选项。

这伴随着保证:预期拒绝率的估计值 (return_rejectrate=True),拒绝率的上限 (return_ub_rejectrate= True),以及成本的上限 (return_ub_cost=True)。

参数

T: int,可选 (默认值=32)

它允许将拒绝阈值设置为 1-2exp(-T)。T 的值越高,拒绝越多。

delta: float,可选 (默认值 = 0.1)

拒绝率上限以概率 1-delta 成立。

c_fp, c_fn, c_r: float (正值),

可选 (默认值 = [1,1, contamination]) 对应于误报预测 (c_fp)、漏报预测 (c_fn) 和拒绝 (c_r) 的成本。

verbose: bool,可选 (默认值 = False)

如果为 True,则打印预期拒绝率、拒绝率上限和成本上限。

返回

expected_rejection_rate: float,预期拒绝率;upperbound_rejection_rate: float,拒绝率上限

概率 1-delta 满足;

upperbound_cost: float,成本上限;

decision_function(X)[source]

使用已拟合的检测器预测 X 的原始异常分数。

输入样本的异常分数是根据不同的检测器算法计算的。为了一致性,异常值被赋予较大的异常分数。

参数

X形状为 (n_samples, n_features) 的 numpy 数组

训练输入样本。仅当基础估计器支持时,才接受稀疏矩阵。

返回

anomaly_scores形状为 (n_samples,) 的 numpy 数组

输入样本的异常分数。

fit(X, y=None)[source]

拟合检测器。y 在无监督方法中被忽略。

参数

X形状为 (n_samples, n_features) 的 numpy 数组

输入样本。

y已忽略

未使用,根据约定为了 API 一致性而存在。

返回

self对象

已拟合的估计器。

fit_predict(X, y=None)

首先拟合检测器,然后预测特定样本是否为异常值。y 在无监督模型中被忽略。

参数

X形状为 (n_samples, n_features) 的 numpy 数组

输入样本。

y已忽略

未使用,根据约定为了 API 一致性而存在。

返回

outlier_labels形状为 (n_samples,) 的 numpy 数组

对于每个观测值,根据已拟合的模型判断是否应将其视为异常值。0 表示正常值,1 表示异常值。

自 0.6.9 版本起已弃用: fit_predict 将在 pyod 0.8.0 中移除;为了保持一致性,将替换为先调用 fit 函数,然后访问 labels_ 属性。

fit_predict_score(X, y, scoring='roc_auc_score')

拟合检测器,对样本进行预测,并使用预定义指标(例如 ROC)评估模型。

参数

X形状为 (n_samples, n_features) 的 numpy 数组

输入样本。

y已忽略

未使用,根据约定为了 API 一致性而存在。

scoringstr,可选 (默认值=’roc_auc_score’)

评估指标

  • ‘roc_auc_score’: ROC 分数

  • ‘prc_n_score’: Precision @ rank n 分数

返回

score : float

自 0.6.9 版本起已弃用: fit_predict_score 将在 pyod 0.8.0 中移除;为了保持一致性,将替换为先调用 fit 函数,然后访问 labels_ 属性。评分可以通过调用评估方法(例如 AUC ROC)来完成。

get_params(deep=True)

获取此估计器的参数。

详见 https://scikit-learn.cn/stable/modules/generated/sklearn.base.BaseEstimator.html 和 sklearn/base.py 获取更多信息。

参数

deepbool,可选 (默认值=True)

如果为 True,将返回此估计器以及其中包含的作为估计器的子对象的参数。

返回

params从字符串到任意类型的映射

参数名称与其值的映射。

predict(X, return_confidence=False)

预测特定样本是否为异常值。

参数

X形状为 (n_samples, n_features) 的 numpy 数组

输入样本。

return_confidenceboolean,可选 (默认值=False)

如果为 True,则同时返回预测的置信度。

返回

outlier_labels形状为 (n_samples,) 的 numpy 数组

对于每个观测值,根据已拟合的模型判断是否应将其视为异常值。0 表示正常值,1 表示异常值。

confidence形状为 (n_samples,) 的 numpy 数组。

仅当 return_confidence 设置为 True 时返回。

predict_confidence(X)

预测模型在略微不同的训练集下做出相同预测的置信度。参见 [BPVD20]

参数

X形状为 (n_samples, n_features) 的 numpy 数组

输入样本。

返回

confidence形状为 (n_samples,) 的 numpy 数组

对于每个观测值,表示如果在训练集受到扰动时模型会多么一致地做出相同的预测。返回一个概率,范围在 [0,1]。

predict_proba(X, method='linear', return_confidence=False)

预测样本为异常值的概率。有两种可能的方法

  1. 简单使用 Min-max 转换将异常值分数线性变换到 [0,1] 的范围。模型必须先拟合。

  2. 使用统一分数,参见 [BKKSZ11]

参数

X形状为 (n_samples, n_features) 的 numpy 数组

输入样本。

methodstr,可选 (默认值=’linear’)

概率转换方法。必须是 ‘linear’ 或 ‘unify’ 之一。

return_confidenceboolean,可选 (默认值=False)

如果为 True,则同时返回预测的置信度。

返回

outlier_probability形状为 (n_samples, n_classes) 的 numpy 数组

对于每个观测值,根据已拟合的模型判断是否应将其视为异常值。返回异常值概率,范围在 [0,1]。注意,这取决于类别数量,默认情况下为 2 个类别 ([正常概率, 异常概率])。

predict_with_rejection(X, T=32, return_stats=False, delta=0.1, c_fp=1, c_fn=1, c_r=-1)
预测特定样本是否为异常值,

允许检测器拒绝 (即输出 = -2) 低置信度的预测。

参数

X形状为 (n_samples, n_features) 的 numpy 数组

输入样本。

Tint,可选 (默认值=32)

它允许将拒绝阈值设置为 1-2exp(-T)。T 的值越高,拒绝越多。

return_stats: bool,可选 (默认值 = False)

如果为 True,则同时返回三个附加的浮点值:估计拒绝率、拒绝率上限和成本上限。

delta: float,可选 (默认值 = 0.1)

拒绝率上限以概率 1-delta 成立。

c_fp, c_fn, c_r: float (正值),可选 (默认值 = [1,1, contamination])

误报预测 (c_fp)、漏报预测 (c_fn) 和拒绝 (c_r) 的成本。

返回

outlier_labels形状为 (n_samples,) 的 numpy 数组

对于每个观测值,根据已拟合的模型判断是否应将其视为异常值。0 表示正常值,1 表示异常值,-2 表示拒绝。

expected_rejection_rate: float,如果 return_stats 为 True;upperbound_rejection_rate: float,如果 return_stats 为 True;upperbound_cost: float,如果 return_stats 为 True;

set_params(**params)

设置此估计器的参数。此方法适用于简单估计器和嵌套对象(例如管道)。嵌套对象的参数形式为 <component>__<parameter>,以便可以更新嵌套对象的每个组件。

详见 https://scikit-learn.cn/stable/modules/generated/sklearn.base.BaseEstimator.html 和 sklearn/base.py 获取更多信息。

返回

self : object

pyod.models.ocsvm 模块

一类支持向量机检测器。基于 scikit-learn 库实现。

class pyod.models.ocsvm.OCSVM(kernel='rbf', degree=3, gamma='auto', coef0=0.0, tol=0.001, nu=0.5, shrinking=True, cache_size=200, verbose=False, max_iter=-1, contamination=0.1)[source]

基础类: BaseDetector

具有更多功能的 scikit-learn 一类支持向量机类的封装。无监督异常点检测。

估计高维分布的支持区域。

实现基于 libsvm。参见 https://scikit-learn.cn/stable/modules/svm.html#svm-outlier-detection[BScholkopfPST+01]

参数

kernel字符串,可选(默认为 'rbf')

指定算法中使用的核函数类型。必须是 'linear'、'poly'、'rbf'、'sigmoid'、'precomputed' 之一或可调用对象。如果未给出,将使用 'rbf'。如果给出可调用对象,则用于预计算核矩阵。

nu浮点数,可选

训练误差分数的上限和支持向量分数的下限。应在区间 (0, 1] 内。默认为 0.5。

degree整型, 可选的 (默认值=3)

多项式核函数 ('poly') 的次数。所有其他核函数忽略此参数。

gamma浮点数,可选(默认为 'auto')

'rbf'、'poly' 和 'sigmoid' 的核系数。如果 gamma 为 'auto',则使用 1/n_features。

coef0浮点数,可选(默认为 0.0)

核函数中的独立项。仅在 'poly' 和 'sigmoid' 中有效。

tol浮点数,可选

停止准则的容差。

shrinking布尔值,可选

是否使用 shrinking 启发式算法。

cache_size浮点数,可选

指定核缓存的大小(单位为 MB)。

verbose布尔值,默认为 False

启用详细输出。注意此设置利用了 libsvm 中每个进程的运行时设置,如果启用,在多线程环境下可能无法正常工作。

max_iter整数,可选(默认为 -1)

求解器内迭代次数的硬性限制,或 -1 表示无限制。

contaminationfloat,范围 (0., 0.5),可选 (默认值=0.1)

数据集的污染程度,即数据集中异常值的比例。在拟合时用于定义决策函数的阈值。

属性

support_array-like, shape = [n_SV]

支持向量的索引。

support_vectors_array-like, shape = [nSV, n_features]

支持向量。

dual_coef_array, shape = [1, n_SV]

决策函数中支持向量的系数。

coef_array, shape = [1, n_features]

分配给特征的权重(原始问题中的系数)。仅在线性核函数情况下可用。

coef_ 是一个只读属性,从 dual_coef_support_vectors_ 派生而来。

intercept_array, shape = [1,]

决策函数中的常数项。

decision_scores_numpy array of shape (n_samples,)

训练数据的异常值分数。分数越高表示越异常。异常值往往得分较高。此值在检测器拟合后可用。

threshold_float

阈值基于 contamination。它是 decision_scores_n_samples * contamination 个最异常样本的分数。计算此阈值是为了生成二元异常值标签。

labels_int, either 0 or 1

训练数据的二元标签。0 表示正常值,1 表示异常值/异常。它是通过将 threshold_ 应用于 decision_scores_ 生成的。

compute_rejection_stats(T=32, delta=0.1, c_fp=1, c_fn=1, c_r=-1, verbose=False)
为无监督检测器添加拒绝选项。

这伴随着保证:预期拒绝率的估计值 (return_rejectrate=True),拒绝率的上限 (return_ub_rejectrate= True),以及成本的上限 (return_ub_cost=True)。

参数

T: int,可选 (默认值=32)

它允许将拒绝阈值设置为 1-2exp(-T)。T 的值越高,拒绝越多。

delta: float,可选 (默认值 = 0.1)

拒绝率上限以概率 1-delta 成立。

c_fp, c_fn, c_r: float (正值),

可选 (默认值 = [1,1, contamination]) 对应于误报预测 (c_fp)、漏报预测 (c_fn) 和拒绝 (c_r) 的成本。

verbose: bool,可选 (默认值 = False)

如果为 True,则打印预期拒绝率、拒绝率上限和成本上限。

返回

expected_rejection_rate: float,预期拒绝率;upperbound_rejection_rate: float,拒绝率上限

概率 1-delta 满足;

upperbound_cost: float,成本上限;

decision_function(X)[source]

使用已拟合的检测器预测 X 的原始异常分数。

输入样本的异常分数是根据不同的检测器算法计算的。为了一致性,异常值被赋予较大的异常分数。

参数

X形状为 (n_samples, n_features) 的 numpy 数组

训练输入样本。仅当基础估计器支持时,才接受稀疏矩阵。

返回

anomaly_scores形状为 (n_samples,) 的 numpy 数组

输入样本的异常分数。

fit(X, y=None, sample_weight=None, **params)[source]

拟合检测器。y 在无监督方法中被忽略。

参数

X形状为 (n_samples, n_features) 的 numpy 数组

输入样本。

y已忽略

未使用,根据约定为了 API 一致性而存在。

sample_weight数组类型, 形状为 (n_samples,)

每个样本的权重。按每个样本重新调整 C。更高的权重迫使分类器更强调这些点。

返回

self对象

已拟合的估计器。

fit_predict(X, y=None)

首先拟合检测器,然后预测特定样本是否为异常值。y 在无监督模型中被忽略。

Parameters

X形状为 (n_samples, n_features) 的 numpy 数组

输入样本。

y已忽略

未使用,根据约定为了 API 一致性而存在。

Returns

outlier_labels形状为 (n_samples,) 的 numpy 数组

对于每个观测值,根据已拟合的模型判断是否应将其视为异常值。0 表示正常值,1 表示异常值。

自 0.6.9 版本起已弃用: fit_predict 将在 pyod 0.8.0 中移除;为了保持一致性,将替换为先调用 fit 函数,然后访问 labels_ 属性。

fit_predict_score(X, y, scoring='roc_auc_score')

拟合检测器,对样本进行预测,并使用预定义指标(例如 ROC)评估模型。

Parameters

X形状为 (n_samples, n_features) 的 numpy 数组

输入样本。

y已忽略

未使用,根据约定为了 API 一致性而存在。

scoringstr,可选 (默认值=’roc_auc_score’)

评估指标

  • ‘roc_auc_score’: ROC 分数

  • ‘prc_n_score’: Precision @ rank n 分数

Returns

score : float

自 0.6.9 版本起已弃用: fit_predict_score 将在 pyod 0.8.0 中移除;为了保持一致性,将替换为先调用 fit 函数,然后访问 labels_ 属性。评分可以通过调用评估方法(例如 AUC ROC)来完成。

get_params(deep=True)

获取此估计器的参数。

详见 https://scikit-learn.cn/stable/modules/generated/sklearn.base.BaseEstimator.html 和 sklearn/base.py 获取更多信息。

Parameters

deepbool,可选 (默认值=True)

如果为 True,将返回此估计器以及其中包含的作为估计器的子对象的参数。

Returns

params从字符串到任意类型的映射

参数名称与其值的映射。

predict(X, return_confidence=False)

预测特定样本是否为异常值。

Parameters

X形状为 (n_samples, n_features) 的 numpy 数组

输入样本。

return_confidenceboolean,可选 (默认值=False)

如果为 True,则同时返回预测的置信度。

Returns

outlier_labels形状为 (n_samples,) 的 numpy 数组

对于每个观测值,根据已拟合的模型判断是否应将其视为异常值。0 表示正常值,1 表示异常值。

confidence形状为 (n_samples,) 的 numpy 数组。

仅当 return_confidence 设置为 True 时返回。

predict_confidence(X)

Predict the model’s confidence in making the same prediction under slightly different training sets. See [BPVD20].

Parameters

X形状为 (n_samples, n_features) 的 numpy 数组

输入样本。

Returns

confidence形状为 (n_samples,) 的 numpy 数组

对于每个观测值,表示如果在训练集受到扰动时模型会多么一致地做出相同的预测。返回一个概率,范围在 [0,1]。

predict_proba(X, method='linear', return_confidence=False)

预测样本为异常值的概率。有两种可能的方法

  1. 简单使用 Min-max 转换将异常值分数线性变换到 [0,1] 的范围。模型必须先拟合。

  2. use unifying scores, see [BKKSZ11].

Parameters

X形状为 (n_samples, n_features) 的 numpy 数组

输入样本。

methodstr,可选 (默认值=’linear’)

概率转换方法。必须是 ‘linear’ 或 ‘unify’ 之一。

return_confidenceboolean,可选 (默认值=False)

如果为 True,则同时返回预测的置信度。

Returns

outlier_probability形状为 (n_samples, n_classes) 的 numpy 数组

对于每个观测值,根据已拟合的模型判断是否应将其视为异常值。返回异常值概率,范围在 [0,1]。注意,这取决于类别数量,默认情况下为 2 个类别 ([正常概率, 异常概率])。

predict_with_rejection(X, T=32, return_stats=False, delta=0.1, c_fp=1, c_fn=1, c_r=-1)
预测特定样本是否为异常值,

允许检测器拒绝 (即输出 = -2) 低置信度的预测。

Parameters

X形状为 (n_samples, n_features) 的 numpy 数组

输入样本。

Tint,可选 (默认值=32)

它允许将拒绝阈值设置为 1-2exp(-T)。T 的值越高,拒绝越多。

return_stats: bool,可选 (默认值 = False)

如果为 True,则同时返回三个附加的浮点值:估计拒绝率、拒绝率上限和成本上限。

delta: float,可选 (默认值 = 0.1)

拒绝率上限以概率 1-delta 成立。

c_fp, c_fn, c_r: float (正值),可选 (默认值 = [1,1, contamination])

误报预测 (c_fp)、漏报预测 (c_fn) 和拒绝 (c_r) 的成本。

Returns

outlier_labels形状为 (n_samples,) 的 numpy 数组

对于每个观测值,根据已拟合的模型判断是否应将其视为异常值。0 表示正常值,1 表示异常值,-2 表示拒绝。

expected_rejection_rate: float,如果 return_stats 为 True;upperbound_rejection_rate: float,如果 return_stats 为 True;upperbound_cost: float,如果 return_stats 为 True;

set_params(**params)

设置此估计器的参数。此方法适用于简单估计器和嵌套对象(例如管道)。嵌套对象的参数形式为 <component>__<parameter>,以便可以更新嵌套对象的每个组件。

详见 https://scikit-learn.cn/stable/modules/generated/sklearn.base.BaseEstimator.html 和 sklearn/base.py 获取更多信息。

Returns

self : object

pyod.models.pca module

Principal Component Analysis (PCA) Outlier Detector

class pyod.models.pca.PCA(n_components=None, n_selected_components=None, contamination=0.1, copy=True, whiten=False, svd_solver='auto', tol=0.0, iterated_power='auto', random_state=None, weighted=True, standardization=True)[source]

基础类: BaseDetector

Principal component analysis (PCA) can be used in detecting outliers. PCA is a linear dimensionality reduction using Singular Value Decomposition of the data to project it to a lower dimensional space.

In this procedure, covariance matrix of the data can be decomposed to orthogonal vectors, called eigenvectors, associated with eigenvalues. The eigenvectors with high eigenvalues capture most of the variance in the data.

Therefore, a low dimensional hyperplane constructed by k eigenvectors can capture most of the variance in the data. However, outliers are different from normal data points, which is more obvious on the hyperplane constructed by the eigenvectors with small eigenvalues.

Therefore, outlier scores can be obtained as the sum of the projected distance of a sample on all eigenvectors. See [BAgg15, BSCSC03] for details.

Score(X) = Sum of weighted euclidean distance between each sample to the hyperplane constructed by the selected eigenvectors

Parameters

n_componentsint, float, None or string

Number of components to keep. if n_components is not set all components are kept

n_components == min(n_samples, n_features)

if n_components == ‘mle’ and svd_solver == ‘full’, Minka’s MLE is used to guess the dimension if 0 < n_components < 1 and svd_solver == ‘full’, select the number of components such that the amount of variance that needs to be explained is greater than the percentage specified by n_components n_components cannot be equal to n_features for svd_solver == ‘arpack’.

n_selected_components整型, 可选的 (默认值=None)

用于计算异常分数的选定主成分数量。它不一定等于主成分的总数。如果未设置,则使用所有主成分。

contaminationfloat,范围 (0., 0.5),可选 (默认值=0.1)

数据集的污染程度,即数据集中异常值的比例。在拟合时用于定义决策函数的阈值。

copybool (default True)

If False, data passed to fit are overwritten and running fit(X).transform(X) will not yield the expected results, use fit_transform(X) instead.

whitenbool, optional (default False)

When True (False by default) the components_ vectors are multiplied by the square root of n_samples and then divided by the singular values to ensure uncorrelated outputs with unit component-wise variances.

Whitening will remove some information from the transformed signal (the relative variance scales of the components) but can sometime improve the predictive accuracy of the downstream estimators by making their data respect some hard-wired assumptions.

svd_solverstring {‘auto’, ‘full’, ‘arpack’, ‘randomized’}
auto

the solver is selected by a default policy based on X.shape and n_components: if the input data is larger than 500x500 and the number of components to extract is lower than 80% of the smallest dimension of the data, then the more efficient ‘randomized’ method is enabled. Otherwise the exact full SVD is computed and optionally truncated afterwards.

full

run exact full SVD calling the standard LAPACK solver via scipy.linalg.svd and select the components by postprocessing

arpack

run SVD truncated to n_components calling ARPACK solver via scipy.sparse.linalg.svds. It requires strictly 0 < n_components < X.shape[1]

randomized

run randomized SVD by the method of Halko et al.

tolfloat >= 0, optional (default .0)

Tolerance for singular values computed by svd_solver == ‘arpack’.

iterated_powerint >= 0, or ‘auto’, (default ‘auto’)

Number of iterations for the power method computed by svd_solver == ‘randomized’.

random_stateint, RandomState instance or None, optional (default None)

If int, random_state is the seed used by the random number generator; If RandomState instance, random_state is the random number generator; If None, the random number generator is the RandomState instance used by np.random. Used when svd_solver == ‘arpack’ or ‘randomized’.

weightedbool, optional (default=True)

If True, the eigenvalues are used in score computation. The eigenvectors with small eigenvalues comes with more importance in outlier score calculation.

standardizationbool, optional (default=True)

If True, perform standardization first to convert data to zero mean and unit variance. See https://scikit-learn.cn/stable/auto_examples/preprocessing/plot_scaling_importance.html

Attributes

components_array, shape (n_components, n_features)

Principal axes in feature space, representing the directions of maximum variance in the data. The components are sorted by explained_variance_.

explained_variance_array, shape (n_components,)

The amount of variance explained by each of the selected components.

Equal to n_components largest eigenvalues of the covariance matrix of X.

explained_variance_ratio_array, shape (n_components,)

Percentage of variance explained by each of the selected components.

If n_components is not set then all components are stored and the sum of explained variances is equal to 1.0.

singular_values_array, shape (n_components,)

The singular values corresponding to each of the selected components. The singular values are equal to the 2-norms of the n_components variables in the lower-dimensional space.

mean_array, shape (n_features,)

Per-feature empirical mean, estimated from the training set.

Equal to X.mean(axis=0).

n_components_int

The estimated number of components. When n_components is set to ‘mle’ or a number between 0 and 1 (with svd_solver == ‘full’) this number is estimated from input data. Otherwise it equals the parameter n_components, or n_features if n_components is None.

noise_variance_float

The estimated noise covariance following the Probabilistic PCA model from Tipping and Bishop 1999. See “Pattern Recognition and Machine Learning” by C. Bishop, 12.2.1 p. 574 or http://www.miketipping.com/papers/met-mppca.pdf. It is required to computed the estimated data covariance and score samples.

Equal to the average of (min(n_features, n_samples) - n_components) smallest eigenvalues of the covariance matrix of X.

decision_scores_numpy array of shape (n_samples,)

训练数据的异常值分数。分数越高表示越异常。异常值往往得分较高。此值在检测器拟合后可用。

threshold_float

阈值基于 contamination。它是 decision_scores_n_samples * contamination 个最异常样本的分数。计算此阈值是为了生成二元异常值标签。

labels_int, either 0 or 1

训练数据的二元标签。0 表示正常值,1 表示异常值/异常。它是通过将 threshold_ 应用于 decision_scores_ 生成的。

compute_rejection_stats(T=32, delta=0.1, c_fp=1, c_fn=1, c_r=-1, verbose=False)
为无监督检测器添加拒绝选项。

这伴随着保证:预期拒绝率的估计值 (return_rejectrate=True),拒绝率的上限 (return_ub_rejectrate= True),以及成本的上限 (return_ub_cost=True)。

Parameters

T: int,可选 (默认值=32)

它允许将拒绝阈值设置为 1-2exp(-T)。T 的值越高,拒绝越多。

delta: float,可选 (默认值 = 0.1)

拒绝率上限以概率 1-delta 成立。

c_fp, c_fn, c_r: float (正值),

可选 (默认值 = [1,1, contamination]) 对应于误报预测 (c_fp)、漏报预测 (c_fn) 和拒绝 (c_r) 的成本。

verbose: bool,可选 (默认值 = False)

如果为 True,则打印预期拒绝率、拒绝率上限和成本上限。

Returns

expected_rejection_rate: float,预期拒绝率;upperbound_rejection_rate: float,拒绝率上限

概率 1-delta 满足;

upperbound_cost: float,成本上限;

decision_function(X)[source]

使用已拟合的检测器预测 X 的原始异常分数。

输入样本的异常分数是根据不同的检测器算法计算的。为了一致性,异常值被赋予较大的异常分数。

Parameters

X形状为 (n_samples, n_features) 的 numpy 数组

训练输入样本。仅当基础估计器支持时,才接受稀疏矩阵。

Returns

anomaly_scores形状为 (n_samples,) 的 numpy 数组

输入样本的异常分数。

property explained_variance_

The amount of variance explained by each of the selected components.

Equal to n_components largest eigenvalues of the covariance matrix of X.

Decorator for scikit-learn PCA attributes.

fit(X, y=None)[source]

拟合检测器。y 在无监督方法中被忽略。

Parameters

X形状为 (n_samples, n_features) 的 numpy 数组

输入样本。

y已忽略

未使用,根据约定为了 API 一致性而存在。

Returns

self对象

已拟合的估计器。

fit_predict(X, y=None)

首先拟合检测器,然后预测特定样本是否为异常值。y 在无监督模型中被忽略。

Parameters

X形状为 (n_samples, n_features) 的 numpy 数组

输入样本。

y已忽略

未使用,根据约定为了 API 一致性而存在。

Returns

outlier_labels形状为 (n_samples,) 的 numpy 数组

对于每个观测值,根据已拟合的模型判断是否应将其视为异常值。0 表示正常值,1 表示异常值。

自 0.6.9 版本起已弃用: fit_predict 将在 pyod 0.8.0 中移除;为了保持一致性,将替换为先调用 fit 函数,然后访问 labels_ 属性。

fit_predict_score(X, y, scoring='roc_auc_score')

拟合检测器,对样本进行预测,并使用预定义指标(例如 ROC)评估模型。

Parameters

X形状为 (n_samples, n_features) 的 numpy 数组

输入样本。

y已忽略

未使用,根据约定为了 API 一致性而存在。

scoringstr,可选 (默认值=’roc_auc_score’)

评估指标

  • ‘roc_auc_score’: ROC 分数

  • ‘prc_n_score’: Precision @ rank n 分数

Returns

score : float

自 0.6.9 版本起已弃用: fit_predict_score 将在 pyod 0.8.0 中移除;为了保持一致性,将替换为先调用 fit 函数,然后访问 labels_ 属性。评分可以通过调用评估方法(例如 AUC ROC)来完成。

get_params(deep=True)

获取此估计器的参数。

详见 https://scikit-learn.cn/stable/modules/generated/sklearn.base.BaseEstimator.html 和 sklearn/base.py 获取更多信息。

Parameters

deepbool,可选 (默认值=True)

如果为 True,将返回此估计器以及其中包含的作为估计器的子对象的参数。

Returns

params从字符串到任意类型的映射

参数名称与其值的映射。

property noise_variance_

The estimated noise covariance following the Probabilistic PCA model from Tipping and Bishop 1999. See “Pattern Recognition and Machine Learning” by C. Bishop, 12.2.1 p. 574 or http://www.miketipping.com/papers/met-mppca.pdf. It is required to computed the estimated data covariance and score samples.

Equal to the average of (min(n_features, n_samples) - n_components) smallest eigenvalues of the covariance matrix of X.

Decorator for scikit-learn PCA attributes.

predict(X, return_confidence=False)

预测特定样本是否为异常值。

Parameters

X形状为 (n_samples, n_features) 的 numpy 数组

输入样本。

return_confidenceboolean,可选 (默认值=False)

如果为 True,则同时返回预测的置信度。

Returns

outlier_labels形状为 (n_samples,) 的 numpy 数组

对于每个观测值,根据已拟合的模型判断是否应将其视为异常值。0 表示正常值,1 表示异常值。

confidence形状为 (n_samples,) 的 numpy 数组。

仅当 return_confidence 设置为 True 时返回。

predict_confidence(X)

Predict the model’s confidence in making the same prediction under slightly different training sets. See [BPVD20].

Parameters

X形状为 (n_samples, n_features) 的 numpy 数组

输入样本。

Returns

confidence形状为 (n_samples,) 的 numpy 数组

对于每个观测值,表示如果在训练集受到扰动时模型会多么一致地做出相同的预测。返回一个概率,范围在 [0,1]。

predict_proba(X, method='linear', return_confidence=False)

预测样本为异常值的概率。有两种可能的方法

  1. 简单使用 Min-max 转换将异常值分数线性变换到 [0,1] 的范围。模型必须先拟合。

  2. use unifying scores, see [BKKSZ11].

Parameters

X形状为 (n_samples, n_features) 的 numpy 数组

输入样本。

methodstr,可选 (默认值=’linear’)

概率转换方法。必须是 ‘linear’ 或 ‘unify’ 之一。

return_confidenceboolean,可选 (默认值=False)

如果为 True,则同时返回预测的置信度。

Returns

outlier_probability形状为 (n_samples, n_classes) 的 numpy 数组

对于每个观测值,根据已拟合的模型判断是否应将其视为异常值。返回异常值概率,范围在 [0,1]。注意,这取决于类别数量,默认情况下为 2 个类别 ([正常概率, 异常概率])。

predict_with_rejection(X, T=32, return_stats=False, delta=0.1, c_fp=1, c_fn=1, c_r=-1)
预测特定样本是否为异常值,

允许检测器拒绝 (即输出 = -2) 低置信度的预测。

Parameters

X形状为 (n_samples, n_features) 的 numpy 数组

输入样本。

Tint,可选 (默认值=32)

它允许将拒绝阈值设置为 1-2exp(-T)。T 的值越高,拒绝越多。

return_stats: bool,可选 (默认值 = False)

如果为 True,则同时返回三个附加的浮点值:估计拒绝率、拒绝率上限和成本上限。

delta: float,可选 (默认值 = 0.1)

拒绝率上限以概率 1-delta 成立。

c_fp, c_fn, c_r: float (正值),可选 (默认值 = [1,1, contamination])

误报预测 (c_fp)、漏报预测 (c_fn) 和拒绝 (c_r) 的成本。

Returns

outlier_labels形状为 (n_samples,) 的 numpy 数组

对于每个观测值,根据已拟合的模型判断是否应将其视为异常值。0 表示正常值,1 表示异常值,-2 表示拒绝。

expected_rejection_rate: float,如果 return_stats 为 True;upperbound_rejection_rate: float,如果 return_stats 为 True;upperbound_cost: float,如果 return_stats 为 True;

set_params(**params)

设置此估计器的参数。此方法适用于简单估计器和嵌套对象(例如管道)。嵌套对象的参数形式为 <component>__<parameter>,以便可以更新嵌套对象的每个组件。

详见 https://scikit-learn.cn/stable/modules/generated/sklearn.base.BaseEstimator.html 和 sklearn/base.py 获取更多信息。

Returns

self : object

pyod.models.qmcd module

Quasi-Monte Carlo Discrepancy outlier detection (QMCD)

class pyod.models.qmcd.QMCD(contamination=0.1)[source]

基础类: BaseDetector

The Wrap-around Quasi-Monte Carlo discrepancy is a uniformity criterion

which is used to assess the space filling of a number of samples in a hypercube. It quantifies the distance between the continuous uniform distribution on a hypercube and the discrete uniform distribution on distinct sample points. Therefore, lower discrepancy values for a sample point indicates that it provides better coverage of the parameter space with regard to the rest of the samples. This method is kernel based and a higher discrepancy score is relative to the rest of the samples, the higher the likelihood of it being an outlier. Read more in the [BFM01].

Parameters

Attributes

decision_scores_numpy array of shape (n_samples,)

训练数据的异常值分数。分数越高表示越异常。异常值往往得分较高。此值在检测器拟合后可用。

threshold_float

用作阈值的修正 z 分数。修正 z 分数(基于中位数绝对偏差)大于此值的观测值将被归类为异常值。

labels_int, either 0 or 1

训练数据的二元标签。0 表示正常值,1 表示异常值/异常。它是通过将 threshold_ 应用于 decision_scores_ 生成的。

compute_rejection_stats(T=32, delta=0.1, c_fp=1, c_fn=1, c_r=-1, verbose=False)
为无监督检测器添加拒绝选项。

这伴随着保证:预期拒绝率的估计值 (return_rejectrate=True),拒绝率的上限 (return_ub_rejectrate= True),以及成本的上限 (return_ub_cost=True)。

Parameters

T: int,可选 (默认值=32)

它允许将拒绝阈值设置为 1-2exp(-T)。T 的值越高,拒绝越多。

delta: float,可选 (默认值 = 0.1)

拒绝率上限以概率 1-delta 成立。

c_fp, c_fn, c_r: float (正值),

可选 (默认值 = [1,1, contamination]) 对应于误报预测 (c_fp)、漏报预测 (c_fn) 和拒绝 (c_r) 的成本。

verbose: bool,可选 (默认值 = False)

如果为 True,则打印预期拒绝率、拒绝率上限和成本上限。

Returns

expected_rejection_rate: float,预期拒绝率;upperbound_rejection_rate: float,拒绝率上限

概率 1-delta 满足;

upperbound_cost: float,成本上限;

decision_function(X)[source]

使用已拟合的检测器预测 X 的原始异常分数。

输入样本的异常分数是根据不同的检测器算法计算的。为了一致性,异常值被赋予较大的异常分数。

Parameters

X形状为 (n_samples, n_features) 的 numpy 数组

The independent and dependent/target samples with the target samples being the last column of the numpy array such that eg: X = np.append(x, y.reshape(-1,1), axis=1). Sparse matrices are accepted only if they are supported by the base estimator.

Returns

anomaly_scores形状为 (n_samples,) 的 numpy 数组

输入样本的异常分数。

fit(X, y=None)[source]

Fit detector

Parameters

X形状为 (n_samples, n_features) 的 numpy 数组

输入样本。

y已忽略

未使用,根据约定为了 API 一致性而存在。

fit_predict(X, y=None)

首先拟合检测器,然后预测特定样本是否为异常值。y 在无监督模型中被忽略。

Parameters

X形状为 (n_samples, n_features) 的 numpy 数组

输入样本。

y已忽略

未使用,根据约定为了 API 一致性而存在。

Returns

outlier_labels形状为 (n_samples,) 的 numpy 数组

对于每个观测值,根据已拟合的模型判断是否应将其视为异常值。0 表示正常值,1 表示异常值。

自 0.6.9 版本起已弃用: fit_predict 将在 pyod 0.8.0 中移除;为了保持一致性,将替换为先调用 fit 函数,然后访问 labels_ 属性。

fit_predict_score(X, y, scoring='roc_auc_score')

拟合检测器,对样本进行预测,并使用预定义指标(例如 ROC)评估模型。

Parameters

X形状为 (n_samples, n_features) 的 numpy 数组

输入样本。

y已忽略

未使用,根据约定为了 API 一致性而存在。

scoringstr,可选 (默认值=’roc_auc_score’)

评估指标

  • ‘roc_auc_score’: ROC 分数

  • ‘prc_n_score’: Precision @ rank n 分数

Returns

score : float

自 0.6.9 版本起已弃用: fit_predict_score 将在 pyod 0.8.0 中移除;为了保持一致性,将替换为先调用 fit 函数,然后访问 labels_ 属性。评分可以通过调用评估方法(例如 AUC ROC)来完成。

get_params(deep=True)

获取此估计器的参数。

详见 https://scikit-learn.cn/stable/modules/generated/sklearn.base.BaseEstimator.html 和 sklearn/base.py 获取更多信息。

Parameters

deepbool,可选 (默认值=True)

如果为 True,将返回此估计器以及其中包含的作为估计器的子对象的参数。

Returns

params从字符串到任意类型的映射

参数名称与其值的映射。

predict(X, return_confidence=False)

预测特定样本是否为异常值。

Parameters

X形状为 (n_samples, n_features) 的 numpy 数组

输入样本。

return_confidenceboolean,可选 (默认值=False)

如果为 True,则同时返回预测的置信度。

Returns

outlier_labels形状为 (n_samples,) 的 numpy 数组

对于每个观测值,根据已拟合的模型判断是否应将其视为异常值。0 表示正常值,1 表示异常值。

confidence形状为 (n_samples,) 的 numpy 数组。

仅当 return_confidence 设置为 True 时返回。

predict_confidence(X)

Predict the model’s confidence in making the same prediction under slightly different training sets. See [BPVD20].

Parameters

X形状为 (n_samples, n_features) 的 numpy 数组

输入样本。

Returns

confidence形状为 (n_samples,) 的 numpy 数组

对于每个观测值,表示如果在训练集受到扰动时模型会多么一致地做出相同的预测。返回一个概率,范围在 [0,1]。

predict_proba(X, method='linear', return_confidence=False)

预测样本为异常值的概率。有两种可能的方法

  1. 简单使用 Min-max 转换将异常值分数线性变换到 [0,1] 的范围。模型必须先拟合。

  2. use unifying scores, see [BKKSZ11].

Parameters

X形状为 (n_samples, n_features) 的 numpy 数组

输入样本。

methodstr,可选 (默认值=’linear’)

概率转换方法。必须是 ‘linear’ 或 ‘unify’ 之一。

return_confidenceboolean,可选 (默认值=False)

如果为 True,则同时返回预测的置信度。

Returns

outlier_probability形状为 (n_samples, n_classes) 的 numpy 数组

对于每个观测值,根据已拟合的模型判断是否应将其视为异常值。返回异常值概率,范围在 [0,1]。注意,这取决于类别数量,默认情况下为 2 个类别 ([正常概率, 异常概率])。

predict_with_rejection(X, T=32, return_stats=False, delta=0.1, c_fp=1, c_fn=1, c_r=-1)
预测特定样本是否为异常值,

允许检测器拒绝 (即输出 = -2) 低置信度的预测。

Parameters

X形状为 (n_samples, n_features) 的 numpy 数组

输入样本。

Tint,可选 (默认值=32)

它允许将拒绝阈值设置为 1-2exp(-T)。T 的值越高,拒绝越多。

return_stats: bool,可选 (默认值 = False)

如果为 True,则同时返回三个附加的浮点值:估计拒绝率、拒绝率上限和成本上限。

delta: float,可选 (默认值 = 0.1)

拒绝率上限以概率 1-delta 成立。

c_fp, c_fn, c_r: float (正值),可选 (默认值 = [1,1, contamination])

误报预测 (c_fp)、漏报预测 (c_fn) 和拒绝 (c_r) 的成本。

Returns

outlier_labels形状为 (n_samples,) 的 numpy 数组

对于每个观测值,根据已拟合的模型判断是否应将其视为异常值。0 表示正常值,1 表示异常值,-2 表示拒绝。

expected_rejection_rate: float,如果 return_stats 为 True;upperbound_rejection_rate: float,如果 return_stats 为 True;upperbound_cost: float,如果 return_stats 为 True;

set_params(**params)

设置此估计器的参数。此方法适用于简单估计器和嵌套对象(例如管道)。嵌套对象的参数形式为 <component>__<parameter>,以便可以更新嵌套对象的每个组件。

详见 https://scikit-learn.cn/stable/modules/generated/sklearn.base.BaseEstimator.html 和 sklearn/base.py 获取更多信息。

Returns

self : object

pyod.models.rgraph module

R-graph

class pyod.models.rgraph.RGraph(transition_steps=10, n_nonzero=10, gamma=50.0, gamma_nz=True, algorithm='lasso_lars', tau=1.0, maxiter_lasso=1000, preprocessing=True, contamination=0.1, blocksize_test_data=10, support_init='L2', maxiter=40, support_size=100, active_support=True, fit_intercept_LR=False, verbose=True)[source]

基础类: BaseDetector

Outlier Detection via R-graph. Paper: https://openaccess.thecvf.com/content_cvpr_2017/papers/You_Provable_Self-Representation_Based_CVPR_2017_paper.pdf See [BYRV17] for details.

Parameters

transition_stepsint, optional (default=20)

Number of transition steps that are taken in the graph, after which the outlier scores are determined.

gamma : float

gamma_nzboolean, default True

gamma and gamma_nz together determines the parameter alpha. When gamma_nz = False, alpha = gamma. When gamma_nz = True, then alpha = gamma * alpha0, where alpha0 is the largest number such that the solution to the optimization problem with alpha = alpha0 is the zero vector (see Proposition 1 in [1]). Therefore, when gamma_nz = True, gamma should be a value greater than 1.0. A good choice is typically in the range [5, 500].

taufloat, default 1.0

Parameter for elastic net penalty term. When tau = 1.0, the method reduces to sparse subspace clustering with basis pursuit (SSC-BP) [2]. When tau = 0.0, the method reduces to least squares regression (LSR).

algorithmstring, default lasso_lars

Algorithm for computing the representation. Either lasso_lars or lasso_cd. Note: lasso_lars and lasso_cd only support tau = 1. For cases tau << 1 linear regression is used.

fit_intercept_LR: bool, optional (default=False)

For gamma > 10000 linear regression is used instead of lasso_lars or lasso_cd. This parameter determines whether the intercept for the model is calculated.

maxiter_lassoint, default 1000

The maximum number of iterations for lasso_lars and lasso_cd.

n_nonzeroint, default 50

This is an upper bound on the number of nonzero entries of each representation vector. If there are more than n_nonzero nonzero entries, only the top n_nonzero number of entries with largest absolute value are kept.

active_support: boolean, default True

Set to True to use the active support algorithm in [1] for solving the optimization problem. This should significantly reduce the running time when n_samples is large.

active_support_params: dictionary of string to any, optional

Parameters (keyword arguments) and values for the active support algorithm. It may be used to set the parameters support_init, support_size and maxiter, see active_support_elastic_net for details. Example: active_support_params={‘support_size’:50, ‘maxiter’:100} Ignored when active_support=False

preprocessingbool,可选 (默认值=True)

如果为 True,则对数据应用标准化。

verboseint,可选 (默认值=1)

Verbosity mode.

  • 0 = silent

  • 1 = progress bar

  • 2 = one line per epoch.

For verbose >= 1, model summary may be printed.

random_staterandom_state: int, RandomState 实例或 None, 可选

(默认=None) 如果是 int,random_state 是随机数生成器使用的种子;如果是 RandomState 实例,random_state 是随机数生成器;如果是 None,随机数生成器是 np.random 使用的 RandomState 实例。

contaminationfloat,范围 (0., 0.5),可选 (默认值=0.1)

数据集的污染程度,即数据集中异常值的比例。拟合时用于定义决策函数的阈值。

blocksize_test_data: int, optional (default=10)

Test set is splitted into blocks of the size blocksize_test_data to at least partially separate test - and train set

Attributes

transition_matrix_numpy array of shape (n_samples,)

Transition matrix from the last fitted data, this might include training + test data

decision_scores_numpy array of shape (n_samples,)

训练数据的异常值分数。分数越高表示越异常。异常值往往得分较高。此值在检测器拟合后可用。

threshold_float

阈值基于 contamination。它是 decision_scores_n_samples * contamination 个最异常样本的分数。计算此阈值是为了生成二元异常值标签。

labels_int, either 0 or 1

训练数据的二元标签。0 表示正常值,1 表示异常值/异常。它是通过将 threshold_ 应用于 decision_scores_ 生成的。

active_support_elastic_net(X, y, alpha, tau=1.0, algorithm='lasso_lars', support_init='L2', support_size=100, maxiter=40, maxiter_lasso=1000)[source]
Source: https://github.com/ChongYou/subspace-clustering/blob/master/cluster/selfrepresentation.py

An active support based algorithm for solving the elastic net optimization problem min_{c} tau ||c||_1 + (1-tau)/2 ||c||_2^2 + alpha / 2 ||y - c X ||_2^2.

Parameters

X : array-like, shape (n_samples, n_features)

y : array-like, shape (1, n_features)

alpha : float

tau : float, default 1.0

algorithmstring, default spams

Algorithm for computing solving the subproblems. Either lasso_lars or lasso_cd or spams (installation of spams package is required). Note: lasso_lars and lasso_cd only support tau = 1.

support_init: string, default knn

This determines how the active support is initialized. It can be either knn or L2.

support_size: int, default 100

This determines the size of the working set. A small support_size decreases the runtime per iteration while increase the number of iterations.

maxiter: int default 40

Termination condition for active support update.

Returns

cshape n_samples

The optimal solution to the optimization problem.

compute_rejection_stats(T=32, delta=0.1, c_fp=1, c_fn=1, c_r=-1, verbose=False)
为无监督检测器添加拒绝选项。

这伴随着保证:预期拒绝率的估计值 (return_rejectrate=True),拒绝率的上限 (return_ub_rejectrate= True),以及成本的上限 (return_ub_cost=True)。

Parameters

T: int,可选 (默认值=32)

它允许将拒绝阈值设置为 1-2exp(-T)。T 的值越高,拒绝越多。

delta: float,可选 (默认值 = 0.1)

拒绝率上限以概率 1-delta 成立。

c_fp, c_fn, c_r: float (正值),

可选 (默认值 = [1,1, contamination]) 对应于误报预测 (c_fp)、漏报预测 (c_fn) 和拒绝 (c_r) 的成本。

verbose: bool,可选 (默认值 = False)

如果为 True,则打印预期拒绝率、拒绝率上限和成本上限。

Returns

expected_rejection_rate: float,预期拒绝率;upperbound_rejection_rate: float,拒绝率上限

概率 1-delta 满足;

upperbound_cost: float,成本上限;

decision_function(X)[source]

使用已拟合的检测器预测 X 的原始异常分数。

输入样本的异常分数是根据不同的检测器算法计算的。为了一致性,异常值被赋予较大的异常分数。

Parameters

X形状为 (n_samples, n_features) 的 numpy 数组

训练输入样本。仅当基础估计器支持时,才接受稀疏矩阵。

Returns

anomaly_scores形状为 (n_samples,) 的 numpy 数组

输入样本的异常分数。

elastic_net_subspace_clustering(X, gamma=50.0, gamma_nz=True, tau=1.0, algorithm='lasso_lars', fit_intercept_LR=False, active_support=True, active_support_params=None, n_nonzero=50, maxiter_lasso=1000)[source]

Source: https://github.com/ChongYou/subspace-clustering/blob/master/cluster/selfrepresentation.py

Elastic net subspace clustering (EnSC) [1]. Compute self-representation matrix C from solving the following optimization problem min_{c_j} tau ||c_j||_1 + (1-tau)/2 ||c_j||_2^2 + alpha / 2 ||x_j - c_j X ||_2^2 s.t. c_jj = 0, where c_j and x_j are the j-th rows of C and X, respectively.

Parameter algorithm specifies the algorithm for solving the optimization problem. lasso_lars and lasso_cd are algorithms implemented in sklearn, spams refers to the same algorithm as lasso_lars but is implemented in spams package available at http://spams-devel.gforge.inria.fr/ (installation required) In principle, all three algorithms give the same result. For large scale data (e.g. with > 5000 data points), use any of these algorithms in conjunction with active_support=True. It adopts an efficient active support strategy that solves the optimization problem by breaking it into a sequence of small scale optimization problems as described in [1]. If tau = 1.0, the method reduces to sparse subspace clustering with basis pursuit (SSC-BP) [2]. If tau = 0.0, the method reduces to least squares regression (LSR) [3]. Note: lasso_lars and lasso_cd only support tau = 1. Parameters ———– X : array-like, shape (n_samples, n_features)

Input data to be clustered

gamma : float gamma_nz : boolean, default True

gamma and gamma_nz together determines the parameter alpha. When gamma_nz = False, alpha = gamma. When gamma_nz = True, then alpha = gamma * alpha0, where alpha0 is the largest number such that the solution to the optimization problem with alpha = alpha0 is the zero vector (see Proposition 1 in [1]). Therefore, when gamma_nz = True, gamma should be a value greater than 1.0. A good choice is typically in the range [5, 500].

taufloat, default 1.0

Parameter for elastic net penalty term. When tau = 1.0, the method reduces to sparse subspace clustering with basis pursuit (SSC-BP) [2]. When tau = 0.0, the method reduces to least squares regression (LSR) [3].

algorithmstring, default lasso_lars

Algorithm for computing the representation. Either lasso_lars or lasso_cd or spams (installation of spams package is required). Note: lasso_lars and lasso_cd only support tau = 1.

n_nonzeroint, default 50

This is an upper bound on the number of nonzero entries of each representation vector. If there are more than n_nonzero nonzero entries, only the top n_nonzero number of entries with largest absolute value are kept.

active_support: boolean, default True

Set to True to use the active support algorithm in [1] for solving the optimization problem. This should significantly reduce the running time when n_samples is large.

active_support_params: dictionary of string to any, optional

Parameters (keyword arguments) and values for the active support algorithm. It may be used to set the parameters support_init, support_size and maxiter, see active_support_elastic_net for details. Example: active_support_params={‘support_size’:50, ‘maxiter’:100} Ignored when active_support=False

Returns

representation_matrix_csr matrix, shape: n_samples by n_samples

The self-representation matrix.

References

[1] C. You, C.-G. Li, D. Robinson, R. Vidal, Oracle Based Active Set Algorithm for Scalable Elastic Net Subspace Clustering, CVPR 2016 [2] E. Elhaifar, R. Vidal, Sparse Subspace Clustering: Algorithm, Theory, and Applications, TPAMI 2013 [3] C. Lu, et al. Robust and efficient subspace segmentation via least squares regression, ECCV 2012

fit(X, y=None)[source]

拟合检测器。y 在无监督方法中被忽略。Parameters ———- X : numpy array of shape (n_samples, n_features)

输入样本。

y已忽略

未使用,根据约定为了 API 一致性而存在。

Returns

self对象

已拟合的估计器。

fit_predict(X, y=None)

首先拟合检测器,然后预测特定样本是否为异常值。y 在无监督模型中被忽略。

Parameters

X形状为 (n_samples, n_features) 的 numpy 数组

输入样本。

y已忽略

未使用,根据约定为了 API 一致性而存在。

Returns

outlier_labels形状为 (n_samples,) 的 numpy 数组

对于每个观测值,根据已拟合的模型判断是否应将其视为异常值。0 表示正常值,1 表示异常值。

自 0.6.9 版本起已弃用: fit_predict 将在 pyod 0.8.0 中移除;为了保持一致性,将替换为先调用 fit 函数,然后访问 labels_ 属性。

fit_predict_score(X, y, scoring='roc_auc_score')

拟合检测器,对样本进行预测,并使用预定义指标(例如 ROC)评估模型。

Parameters

X形状为 (n_samples, n_features) 的 numpy 数组

输入样本。

y已忽略

未使用,根据约定为了 API 一致性而存在。

scoringstr,可选 (默认值=’roc_auc_score’)

评估指标

  • ‘roc_auc_score’: ROC 分数

  • ‘prc_n_score’: Precision @ rank n 分数

Returns

score : float

自 0.6.9 版本起已弃用: fit_predict_score 将在 pyod 0.8.0 中移除;为了保持一致性,将替换为先调用 fit 函数,然后访问 labels_ 属性。评分可以通过调用评估方法(例如 AUC ROC)来完成。

get_params(deep=True)

获取此估计器的参数。

详见 https://scikit-learn.cn/stable/modules/generated/sklearn.base.BaseEstimator.html 和 sklearn/base.py 获取更多信息。

Parameters

deepbool,可选 (默认值=True)

如果为 True,将返回此估计器以及其中包含的作为估计器的子对象的参数。

Returns

params从字符串到任意类型的映射

参数名称与其值的映射。

predict(X, return_confidence=False)

预测特定样本是否为异常值。

Parameters

X形状为 (n_samples, n_features) 的 numpy 数组

输入样本。

return_confidenceboolean,可选 (默认值=False)

如果为 True,则同时返回预测的置信度。

Returns

outlier_labels形状为 (n_samples,) 的 numpy 数组

对于每个观测值,根据已拟合的模型判断是否应将其视为异常值。0 表示正常值,1 表示异常值。

confidence形状为 (n_samples,) 的 numpy 数组。

仅当 return_confidence 设置为 True 时返回。

predict_confidence(X)

Predict the model’s confidence in making the same prediction under slightly different training sets. See [BPVD20].

Parameters

X形状为 (n_samples, n_features) 的 numpy 数组

输入样本。

Returns

confidence形状为 (n_samples,) 的 numpy 数组

对于每个观测值,表示如果在训练集受到扰动时模型会多么一致地做出相同的预测。返回一个概率,范围在 [0,1]。

predict_proba(X, method='linear', return_confidence=False)

预测样本为异常值的概率。有两种可能的方法

  1. 简单使用 Min-max 转换将异常值分数线性变换到 [0,1] 的范围。模型必须先拟合。

  2. use unifying scores, see [BKKSZ11].

Parameters

X形状为 (n_samples, n_features) 的 numpy 数组

输入样本。

methodstr,可选 (默认值=’linear’)

概率转换方法。必须是 ‘linear’ 或 ‘unify’ 之一。

return_confidenceboolean,可选 (默认值=False)

如果为 True,则同时返回预测的置信度。

Returns

outlier_probability形状为 (n_samples, n_classes) 的 numpy 数组

对于每个观测值,根据已拟合的模型判断是否应将其视为异常值。返回异常值概率,范围在 [0,1]。注意,这取决于类别数量,默认情况下为 2 个类别 ([正常概率, 异常概率])。

predict_with_rejection(X, T=32, return_stats=False, delta=0.1, c_fp=1, c_fn=1, c_r=-1)
预测特定样本是否为异常值,

允许检测器拒绝 (即输出 = -2) 低置信度的预测。

Parameters

X形状为 (n_samples, n_features) 的 numpy 数组

输入样本。

Tint,可选 (默认值=32)

它允许将拒绝阈值设置为 1-2exp(-T)。T 的值越高,拒绝越多。

return_stats: bool,可选 (默认值 = False)

如果为 True,则同时返回三个附加的浮点值:估计拒绝率、拒绝率上限和成本上限。

delta: float,可选 (默认值 = 0.1)

拒绝率上限以概率 1-delta 成立。

c_fp, c_fn, c_r: float (正值),可选 (默认值 = [1,1, contamination])

误报预测 (c_fp)、漏报预测 (c_fn) 和拒绝 (c_r) 的成本。

Returns

outlier_labels形状为 (n_samples,) 的 numpy 数组

对于每个观测值,根据已拟合的模型判断是否应将其视为异常值。0 表示正常值,1 表示异常值,-2 表示拒绝。

expected_rejection_rate: float,如果 return_stats 为 True;upperbound_rejection_rate: float,如果 return_stats 为 True;upperbound_cost: float,如果 return_stats 为 True;

set_params(**params)

设置此估计器的参数。此方法适用于简单估计器和嵌套对象(例如管道)。嵌套对象的参数形式为 <component>__<parameter>,以便可以更新嵌套对象的每个组件。

详见 https://scikit-learn.cn/stable/modules/generated/sklearn.base.BaseEstimator.html 和 sklearn/base.py 获取更多信息。

Returns

self : object

pyod.models.rod module

基于旋转的异常检测器 (ROD)

class pyod.models.rod.ROD(contamination=0.1, parallel_execution=False)[source]

基础类: BaseDetector

基于旋转的异常检测 (ROD) 是一种鲁棒且无需参数的算法,它不需要统计分布假设,并且直观地在三维空间中工作。在该空间中,表示数据点的 3D 向量使用 Rodrigues 旋转公式绕几何中位数逆时针旋转两次。旋转结果为平行六面体,其体积被数学分析为成本函数,并用于计算中位数绝对偏差以获得异常得分。对于高于 3 的维度,总得分通过对分解原始数据空间产生的总体 3D 子空间得分进行平均来计算。详情请参见 [BABC20]

Parameters

contaminationfloat,范围 (0., 0.5),可选 (默认值=0.1)

数据集的污染程度,即数据集中异常值的比例。在拟合时用于定义决策函数的阈值。

parallel_execution: bool, 可选 (默认值=False)。

如果设置为 True,算法将并行运行,以缩短执行时间。建议仅对高维数据 (> 10) 且硬件条件允许的情况下,才将此参数设置为 True。

Attributes

decision_scores_形状为 (n_samples,) 的 numpy 数组

训练数据的异常值分数。分数越高表示越异常。异常值往往得分较高。此值在检测器拟合后可用。

threshold_浮点数

阈值基于 contamination。它是 decision_scores_n_samples * contamination 个最异常样本的分数。计算此阈值是为了生成二元异常值标签。

labels_整型,0 或 1

训练数据的二元标签。0 表示正常值,1 表示异常值/异常。它是通过将 threshold_ 应用于 decision_scores_ 生成的。

compute_rejection_stats(T=32, delta=0.1, c_fp=1, c_fn=1, c_r=-1, verbose=False)
为无监督检测器添加拒绝选项。

这伴随着保证:预期拒绝率的估计值 (return_rejectrate=True),拒绝率的上限 (return_ub_rejectrate= True),以及成本的上限 (return_ub_cost=True)。

Parameters

T: int,可选 (默认值=32)

它允许将拒绝阈值设置为 1-2exp(-T)。T 的值越高,拒绝越多。

delta: float,可选 (默认值 = 0.1)

拒绝率上限以概率 1-delta 成立。

c_fp, c_fn, c_r: float (正值),

可选 (默认值 = [1,1, contamination]) 对应于误报预测 (c_fp)、漏报预测 (c_fn) 和拒绝 (c_r) 的成本。

verbose: bool,可选 (默认值 = False)

如果为 True,则打印预期拒绝率、拒绝率上限和成本上限。

Returns

expected_rejection_rate: float,预期拒绝率;upperbound_rejection_rate: float,拒绝率上限

概率 1-delta 满足;

upperbound_cost: float,成本上限;

decision_function(X)[source]

使用已拟合的检测器预测 X 的原始异常分数。

输入样本的异常分数是根据不同的检测器算法计算的。为了一致性,异常值被赋予较大的异常分数。

Parameters

X形状为 (n_samples, n_features) 的 numpy 数组

训练输入样本。仅当基础估计器支持时,才接受稀疏矩阵。

Returns

anomaly_scores形状为 (n_samples,) 的 numpy 数组

输入样本的异常分数。

fit(X, y=None)[source]

拟合检测器。y 在无监督方法中被忽略。

Parameters

X形状为 (n_samples, n_features) 的 numpy 数组

输入样本。

y已忽略

未使用,根据约定为了 API 一致性而存在。

Returns

self对象

已拟合的估计器。

fit_predict(X, y=None)

首先拟合检测器,然后预测特定样本是否为异常值。y 在无监督模型中被忽略。

Parameters

X形状为 (n_samples, n_features) 的 numpy 数组

输入样本。

y已忽略

未使用,根据约定为了 API 一致性而存在。

Returns

outlier_labels形状为 (n_samples,) 的 numpy 数组

对于每个观测值,根据已拟合的模型判断是否应将其视为异常值。0 表示正常值,1 表示异常值。

自 0.6.9 版本起已弃用: fit_predict 将在 pyod 0.8.0 中移除;为了保持一致性,将替换为先调用 fit 函数,然后访问 labels_ 属性。

fit_predict_score(X, y, scoring='roc_auc_score')

拟合检测器,对样本进行预测,并使用预定义指标(例如 ROC)评估模型。

Parameters

X形状为 (n_samples, n_features) 的 numpy 数组

输入样本。

y已忽略

未使用,根据约定为了 API 一致性而存在。

scoringstr,可选 (默认值=’roc_auc_score’)

评估指标

  • ‘roc_auc_score’: ROC 分数

  • ‘prc_n_score’: Precision @ rank n 分数

Returns

score : float

自 0.6.9 版本起已弃用: fit_predict_score 将在 pyod 0.8.0 中移除;为了保持一致性,将替换为先调用 fit 函数,然后访问 labels_ 属性。评分可以通过调用评估方法(例如 AUC ROC)来完成。

get_params(deep=True)

获取此估计器的参数。

详见 https://scikit-learn.cn/stable/modules/generated/sklearn.base.BaseEstimator.html 和 sklearn/base.py 获取更多信息。

Parameters

deepbool,可选 (默认值=True)

如果为 True,将返回此估计器以及其中包含的作为估计器的子对象的参数。

Returns

params从字符串到任意类型的映射

参数名称与其值的映射。

predict(X, return_confidence=False)

预测特定样本是否为异常值。

Parameters

X形状为 (n_samples, n_features) 的 numpy 数组

输入样本。

return_confidenceboolean,可选 (默认值=False)

如果为 True,则同时返回预测的置信度。

Returns

outlier_labels形状为 (n_samples,) 的 numpy 数组

对于每个观测值,根据已拟合的模型判断是否应将其视为异常值。0 表示正常值,1 表示异常值。

confidence形状为 (n_samples,) 的 numpy 数组。

仅当 return_confidence 设置为 True 时返回。

predict_confidence(X)

预测模型在略有不同的训练集下做出相同预测的置信度。详情请参见 [BPVD20]

Parameters

X形状为 (n_samples, n_features) 的 numpy 数组

输入样本。

Returns

confidence形状为 (n_samples,) 的 numpy 数组

对于每个观测值,表示如果在训练集受到扰动时模型会多么一致地做出相同的预测。返回一个概率,范围在 [0,1]。

predict_proba(X, method='linear', return_confidence=False)

预测样本为异常值的概率。有两种可能的方法

  1. 简单使用 Min-max 转换将异常值分数线性变换到 [0,1] 的范围。模型必须先拟合。

  2. 使用统一得分,详情请参见 [BKKSZ11]

Parameters

X形状为 (n_samples, n_features) 的 numpy 数组

输入样本。

methodstr,可选 (默认值=’linear’)

概率转换方法。必须是 ‘linear’ 或 ‘unify’ 之一。

return_confidenceboolean,可选 (默认值=False)

如果为 True,则同时返回预测的置信度。

Returns

outlier_probability形状为 (n_samples, n_classes) 的 numpy 数组

对于每个观测值,根据已拟合的模型判断是否应将其视为异常值。返回异常值概率,范围在 [0,1]。注意,这取决于类别数量,默认情况下为 2 个类别 ([正常概率, 异常概率])。

predict_with_rejection(X, T=32, return_stats=False, delta=0.1, c_fp=1, c_fn=1, c_r=-1)
预测特定样本是否为异常值,

允许检测器拒绝 (即输出 = -2) 低置信度的预测。

Parameters

X形状为 (n_samples, n_features) 的 numpy 数组

输入样本。

Tint,可选 (默认值=32)

它允许将拒绝阈值设置为 1-2exp(-T)。T 的值越高,拒绝越多。

return_stats: bool,可选 (默认值 = False)

如果为 True,则同时返回三个附加的浮点值:估计拒绝率、拒绝率上限和成本上限。

delta: float,可选 (默认值 = 0.1)

拒绝率上限以概率 1-delta 成立。

c_fp, c_fn, c_r: float (正值),可选 (默认值 = [1,1, contamination])

误报预测 (c_fp)、漏报预测 (c_fn) 和拒绝 (c_r) 的成本。

Returns

outlier_labels形状为 (n_samples,) 的 numpy 数组

对于每个观测值,根据已拟合的模型判断是否应将其视为异常值。0 表示正常值,1 表示异常值,-2 表示拒绝。

expected_rejection_rate: float,如果 return_stats 为 True;upperbound_rejection_rate: float,如果 return_stats 为 True;upperbound_cost: float,如果 return_stats 为 True;

set_params(**params)

设置此估计器的参数。此方法适用于简单估计器和嵌套对象(例如管道)。嵌套对象的参数形式为 <component>__<parameter>,以便可以更新嵌套对象的每个组件。

详见 https://scikit-learn.cn/stable/modules/generated/sklearn.base.BaseEstimator.html 和 sklearn/base.py 获取更多信息。

Returns

self : object

pyod.models.sampling 模块

基于采样的异常检测 (SP)

class pyod.models.sampling.Sampling(contamination=0.1, subset_size=20, metric='minkowski', metric_params=None, random_state=None)[source]

基础类: BaseDetector

用于异常检测的采样类。

Sugiyama, M., Borgwardt, K. M.: 通过采样快速进行基于距离的异常检测,Advances in Neural Information Processing Systems (NIPS 2013), 467-475, 2013。

详情请参见 [BSB13]

Parameters

contaminationfloat,范围 (0., 0.5),可选 (默认值=0.1)

数据集的污染程度,即数据集中异常值的比例。在拟合时用于定义决策函数的阈值。

subset_size浮点型 在 (0., 1.0) 或 整型 在 (0, n_samples), 可选的 (默认值=20)

数据集子集的大小。仅对数据集执行一次采样。

metric字符串 或 可调用对象, 默认值 ‘minkowski’

用于距离计算的度量。可以使用 scikit-learn 或 scipy.spatial.distance 中的任何度量。

如果 metric 是可调用函数,它将对每对实例(行)调用,并记录结果值。可调用函数应接受两个数组作为输入,并返回一个值表示它们之间的距离。这适用于 Scipy 的度量,但效率低于将度量名称作为字符串传递。

不支持距离矩阵。

有效的 method 值包括:

  • 来自 scikit-learn:[‘cityblock’, ‘cosine’, ‘euclidean’, ‘l1’, ‘l2’, ‘manhattan’]

  • 来自 scipy.spatial.distance:[‘braycurtis’, ‘canberra’, ‘chebyshev’, ‘correlation’, ‘dice’, ‘hamming’, ‘jaccard’, ‘kulsinski’, ‘mahalanobis’, ‘matching’, ‘minkowski’, ‘rogerstanimoto’, ‘russellrao’, ‘seuclidean’, ‘sokalmichener’, ‘sokalsneath’, ‘sqeuclidean’, ‘yule’]

有关这些度量的详细信息,请参见 https://scikit-learn.cn/stable/modules/generated/sklearn.metrics.pairwise.pairwise_distances 的文档。

metric_params字典, 可选 (默认值 = None)

度量函数的附加关键字参数。

random_stateint, RandomState instance or None, optional (default None)

如果是 int,random_state 是随机数生成器使用的种子;如果是 RandomState 实例,random_state 是随机数生成器;如果是 None,随机数生成器是 np.random 使用的 RandomState 实例。

Attributes

decision_scores_形状为 (n_samples,) 的 numpy 数组

训练数据的异常值分数。分数越高表示越异常。异常值往往得分较高。此值在检测器拟合后可用。

threshold_浮点数

阈值基于 contamination。它是 decision_scores_n_samples * contamination 个最异常样本的分数。计算此阈值是为了生成二元异常值标签。

labels_整型,0 或 1

训练数据的二元标签。0 表示正常值,1 表示异常值/异常。它是通过将 threshold_ 应用于 decision_scores_ 生成的。

compute_rejection_stats(T=32, delta=0.1, c_fp=1, c_fn=1, c_r=-1, verbose=False)
为无监督检测器添加拒绝选项。

这伴随着保证:预期拒绝率的估计值 (return_rejectrate=True),拒绝率的上限 (return_ub_rejectrate= True),以及成本的上限 (return_ub_cost=True)。

Parameters

T: int,可选 (默认值=32)

它允许将拒绝阈值设置为 1-2exp(-T)。T 的值越高,拒绝越多。

delta: float,可选 (默认值 = 0.1)

拒绝率上限以概率 1-delta 成立。

c_fp, c_fn, c_r: float (正值),

可选 (默认值 = [1,1, contamination]) 对应于误报预测 (c_fp)、漏报预测 (c_fn) 和拒绝 (c_r) 的成本。

verbose: bool,可选 (默认值 = False)

如果为 True,则打印预期拒绝率、拒绝率上限和成本上限。

Returns

expected_rejection_rate: float,预期拒绝率;upperbound_rejection_rate: float,拒绝率上限

概率 1-delta 满足;

upperbound_cost: float,成本上限;

decision_function(X)[source]

使用已拟合的检测器预测 X 的原始异常分数。

输入样本的异常分数是根据不同的检测器算法计算的。为了一致性,异常值被赋予较大的异常分数。

Parameters

X形状为 (n_samples, n_features) 的 numpy 数组

测试输入样本。

Returns

anomaly_scores形状为 (n_samples,) 的 numpy 数组

输入样本的异常分数。

fit(X, y=None)[source]

拟合检测器。y 在无监督方法中被忽略。

Parameters

X形状为 (n_samples, n_features) 的 numpy 数组

输入样本。

y已忽略

未使用,根据约定为了 API 一致性而存在。

Returns

self对象

已拟合的估计器。

fit_predict(X, y=None)

首先拟合检测器,然后预测特定样本是否为异常值。y 在无监督模型中被忽略。

Parameters

X形状为 (n_samples, n_features) 的 numpy 数组

输入样本。

y已忽略

未使用,根据约定为了 API 一致性而存在。

Returns

outlier_labels形状为 (n_samples,) 的 numpy 数组

对于每个观测值,根据已拟合的模型判断是否应将其视为异常值。0 表示正常值,1 表示异常值。

自 0.6.9 版本起已弃用: fit_predict 将在 pyod 0.8.0 中移除;为了保持一致性,将替换为先调用 fit 函数,然后访问 labels_ 属性。

fit_predict_score(X, y, scoring='roc_auc_score')

拟合检测器,对样本进行预测,并使用预定义指标(例如 ROC)评估模型。

Parameters

X形状为 (n_samples, n_features) 的 numpy 数组

输入样本。

y已忽略

未使用,根据约定为了 API 一致性而存在。

scoringstr,可选 (默认值=’roc_auc_score’)

评估指标

  • ‘roc_auc_score’: ROC 分数

  • ‘prc_n_score’: Precision @ rank n 分数

Returns

score : float

自 0.6.9 版本起已弃用: fit_predict_score 将在 pyod 0.8.0 中移除;为了保持一致性,将替换为先调用 fit 函数,然后访问 labels_ 属性。评分可以通过调用评估方法(例如 AUC ROC)来完成。

get_params(deep=True)

获取此估计器的参数。

详见 https://scikit-learn.cn/stable/modules/generated/sklearn.base.BaseEstimator.html 和 sklearn/base.py 获取更多信息。

Parameters

deepbool,可选 (默认值=True)

如果为 True,将返回此估计器以及其中包含的作为估计器的子对象的参数。

Returns

params从字符串到任意类型的映射

参数名称与其值的映射。

predict(X, return_confidence=False)

预测特定样本是否为异常值。

Parameters

X形状为 (n_samples, n_features) 的 numpy 数组

输入样本。

return_confidenceboolean,可选 (默认值=False)

如果为 True,则同时返回预测的置信度。

Returns

outlier_labels形状为 (n_samples,) 的 numpy 数组

对于每个观测值,根据已拟合的模型判断是否应将其视为异常值。0 表示正常值,1 表示异常值。

confidence形状为 (n_samples,) 的 numpy 数组。

仅当 return_confidence 设置为 True 时返回。

predict_confidence(X)

预测模型在略有不同的训练集下做出相同预测的置信度。详情请参见 [BPVD20]

Parameters

X形状为 (n_samples, n_features) 的 numpy 数组

输入样本。

Returns

confidence形状为 (n_samples,) 的 numpy 数组

对于每个观测值,表示如果在训练集受到扰动时模型会多么一致地做出相同的预测。返回一个概率,范围在 [0,1]。

predict_proba(X, method='linear', return_confidence=False)

预测样本为异常值的概率。有两种可能的方法

  1. 简单使用 Min-max 转换将异常值分数线性变换到 [0,1] 的范围。模型必须先拟合。

  2. 使用统一得分,详情请参见 [BKKSZ11]

Parameters

X形状为 (n_samples, n_features) 的 numpy 数组

输入样本。

methodstr,可选 (默认值=’linear’)

概率转换方法。必须是 ‘linear’ 或 ‘unify’ 之一。

return_confidenceboolean,可选 (默认值=False)

如果为 True,则同时返回预测的置信度。

Returns

outlier_probability形状为 (n_samples, n_classes) 的 numpy 数组

对于每个观测值,根据已拟合的模型判断是否应将其视为异常值。返回异常值概率,范围在 [0,1]。注意,这取决于类别数量,默认情况下为 2 个类别 ([正常概率, 异常概率])。

predict_with_rejection(X, T=32, return_stats=False, delta=0.1, c_fp=1, c_fn=1, c_r=-1)
预测特定样本是否为异常值,

允许检测器拒绝 (即输出 = -2) 低置信度的预测。

Parameters

X形状为 (n_samples, n_features) 的 numpy 数组

输入样本。

Tint,可选 (默认值=32)

它允许将拒绝阈值设置为 1-2exp(-T)。T 的值越高,拒绝越多。

return_stats: bool,可选 (默认值 = False)

如果为 True,则同时返回三个附加的浮点值:估计拒绝率、拒绝率上限和成本上限。

delta: float,可选 (默认值 = 0.1)

拒绝率上限以概率 1-delta 成立。

c_fp, c_fn, c_r: float (正值),可选 (默认值 = [1,1, contamination])

误报预测 (c_fp)、漏报预测 (c_fn) 和拒绝 (c_r) 的成本。

Returns

outlier_labels形状为 (n_samples,) 的 numpy 数组

对于每个观测值,根据已拟合的模型判断是否应将其视为异常值。0 表示正常值,1 表示异常值,-2 表示拒绝。

expected_rejection_rate: float,如果 return_stats 为 True;upperbound_rejection_rate: float,如果 return_stats 为 True;upperbound_cost: float,如果 return_stats 为 True;

set_params(**params)

设置此估计器的参数。此方法适用于简单估计器和嵌套对象(例如管道)。嵌套对象的参数形式为 <component>__<parameter>,以便可以更新嵌套对象的每个组件。

详见 https://scikit-learn.cn/stable/modules/generated/sklearn.base.BaseEstimator.html 和 sklearn/base.py 获取更多信息。

Returns

self : object

pyod.models.sod 模块

子空间异常检测 (SOD)

class pyod.models.sod.SOD(contamination=0.1, n_neighbors=20, ref_set=10, alpha=0.8)[source]

基础类: BaseDetector

子空间异常检测 (SOD) 方案旨在在高维特征空间的不同子空间中检测异常值。对于每个数据对象,SOD 探索由数据对象的邻居跨越的轴平行子空间,并确定该对象在该子空间中与其邻居的偏离程度。

详情请参见 [BKKrogerSZ09]

Parameters

n_neighborsint, 可选 (默认=20)

默认用于 k 近邻查询的邻居数量。

ref_set: int, 可选 (默认值=10)

指定用于创建参考集的共享最近邻数量。请注意,ref_set 必须小于 n_neighbors。

alpha: float in (0., 1.), 可选 (默认值=0.8)

指定选择子空间的下限。0.8 是原始论文中建议的默认值。

contaminationfloat,范围 (0., 0.5),可选 (默认值=0.1)

数据集的污染程度,即数据集中异常值的比例。在拟合时用于定义决策函数的阈值。

Attributes

decision_scores_形状为 (n_samples,) 的 numpy 数组

训练数据的异常值分数。分数越高表示越异常。异常值往往得分较高。此值在检测器拟合后可用。

threshold_浮点数

阈值基于 contamination。它是 decision_scores_n_samples * contamination 个最异常样本的分数。计算此阈值是为了生成二元异常值标签。

labels_整型,0 或 1

训练数据的二元标签。0 表示正常值,1 表示异常值/异常。它是通过将 threshold_ 应用于 decision_scores_ 生成的。

compute_rejection_stats(T=32, delta=0.1, c_fp=1, c_fn=1, c_r=-1, verbose=False)
为无监督检测器添加拒绝选项。

这伴随着保证:预期拒绝率的估计值 (return_rejectrate=True),拒绝率的上限 (return_ub_rejectrate= True),以及成本的上限 (return_ub_cost=True)。

Parameters

T: int,可选 (默认值=32)

它允许将拒绝阈值设置为 1-2exp(-T)。T 的值越高,拒绝越多。

delta: float,可选 (默认值 = 0.1)

拒绝率上限以概率 1-delta 成立。

c_fp, c_fn, c_r: float (正值),

可选 (默认值 = [1,1, contamination]) 对应于误报预测 (c_fp)、漏报预测 (c_fn) 和拒绝 (c_r) 的成本。

verbose: bool,可选 (默认值 = False)

如果为 True,则打印预期拒绝率、拒绝率上限和成本上限。

Returns

expected_rejection_rate: float,预期拒绝率;upperbound_rejection_rate: float,拒绝率上限

概率 1-delta 满足;

upperbound_cost: float,成本上限;

decision_function(X)[source]

使用拟合的检测器预测 X 的原始异常分数。输入样本的异常分数是基于不同的检测器算法计算的。为了保持一致性,异常值被赋予更高的异常分数。

Parameters

X形状为 (n_samples, n_features) 的 numpy 数组

训练输入样本。仅当基础估计器支持时,才接受稀疏矩阵。

Returns

anomaly_scores形状为 (n_samples,) 的 numpy 数组

输入样本的异常分数。

fit(X, y=None)[source]

拟合检测器。y 在无监督方法中被忽略。

Parameters

X形状为 (n_samples, n_features) 的 numpy 数组

输入样本。

y已忽略

未使用,根据约定为了 API 一致性而存在。

Returns

self对象

已拟合的估计器。

fit_predict(X, y=None)

首先拟合检测器,然后预测特定样本是否为异常值。y 在无监督模型中被忽略。

Parameters

X形状为 (n_samples, n_features) 的 numpy 数组

输入样本。

y已忽略

未使用,根据约定为了 API 一致性而存在。

Returns

outlier_labels形状为 (n_samples,) 的 numpy 数组

对于每个观测值,根据已拟合的模型判断是否应将其视为异常值。0 表示正常值,1 表示异常值。

自 0.6.9 版本起已弃用: fit_predict 将在 pyod 0.8.0 中移除;为了保持一致性,将替换为先调用 fit 函数,然后访问 labels_ 属性。

fit_predict_score(X, y, scoring='roc_auc_score')

拟合检测器,对样本进行预测,并使用预定义指标(例如 ROC)评估模型。

Parameters

X形状为 (n_samples, n_features) 的 numpy 数组

输入样本。

y已忽略

未使用,根据约定为了 API 一致性而存在。

scoringstr,可选 (默认值=’roc_auc_score’)

评估指标

  • ‘roc_auc_score’: ROC 分数

  • ‘prc_n_score’: Precision @ rank n 分数

Returns

score : float

自 0.6.9 版本起已弃用: fit_predict_score 将在 pyod 0.8.0 中移除;为了保持一致性,将替换为先调用 fit 函数,然后访问 labels_ 属性。评分可以通过调用评估方法(例如 AUC ROC)来完成。

get_params(deep=True)

获取此估计器的参数。

详见 https://scikit-learn.cn/stable/modules/generated/sklearn.base.BaseEstimator.html 和 sklearn/base.py 获取更多信息。

Parameters

deepbool,可选 (默认值=True)

如果为 True,将返回此估计器以及其中包含的作为估计器的子对象的参数。

Returns

params从字符串到任意类型的映射

参数名称与其值的映射。

predict(X, return_confidence=False)

预测特定样本是否为异常值。

Parameters

X形状为 (n_samples, n_features) 的 numpy 数组

输入样本。

return_confidenceboolean,可选 (默认值=False)

如果为 True,则同时返回预测的置信度。

Returns

outlier_labels形状为 (n_samples,) 的 numpy 数组

对于每个观测值,根据已拟合的模型判断是否应将其视为异常值。0 表示正常值,1 表示异常值。

confidence形状为 (n_samples,) 的 numpy 数组。

仅当 return_confidence 设置为 True 时返回。

predict_confidence(X)

预测模型在略有不同的训练集下做出相同预测的置信度。详情请参见 [BPVD20]

Parameters

X形状为 (n_samples, n_features) 的 numpy 数组

输入样本。

Returns

confidence形状为 (n_samples,) 的 numpy 数组

对于每个观测值,表示如果在训练集受到扰动时模型会多么一致地做出相同的预测。返回一个概率,范围在 [0,1]。

predict_proba(X, method='linear', return_confidence=False)

预测样本为异常值的概率。有两种可能的方法

  1. 简单使用 Min-max 转换将异常值分数线性变换到 [0,1] 的范围。模型必须先拟合。

  2. 使用统一得分,详情请参见 [BKKSZ11]

Parameters

X形状为 (n_samples, n_features) 的 numpy 数组

输入样本。

methodstr,可选 (默认值=’linear’)

概率转换方法。必须是 ‘linear’ 或 ‘unify’ 之一。

return_confidenceboolean,可选 (默认值=False)

如果为 True,则同时返回预测的置信度。

Returns

outlier_probability形状为 (n_samples, n_classes) 的 numpy 数组

对于每个观测值,根据已拟合的模型判断是否应将其视为异常值。返回异常值概率,范围在 [0,1]。注意,这取决于类别数量,默认情况下为 2 个类别 ([正常概率, 异常概率])。

predict_with_rejection(X, T=32, return_stats=False, delta=0.1, c_fp=1, c_fn=1, c_r=-1)
预测特定样本是否为异常值,

允许检测器拒绝 (即输出 = -2) 低置信度的预测。

Parameters

X形状为 (n_samples, n_features) 的 numpy 数组

输入样本。

Tint,可选 (默认值=32)

它允许将拒绝阈值设置为 1-2exp(-T)。T 的值越高,拒绝越多。

return_stats: bool,可选 (默认值 = False)

如果为 True,则同时返回三个附加的浮点值:估计拒绝率、拒绝率上限和成本上限。

delta: float,可选 (默认值 = 0.1)

拒绝率上限以概率 1-delta 成立。

c_fp, c_fn, c_r: float (正值),可选 (默认值 = [1,1, contamination])

误报预测 (c_fp)、漏报预测 (c_fn) 和拒绝 (c_r) 的成本。

Returns

outlier_labels形状为 (n_samples,) 的 numpy 数组

对于每个观测值,根据已拟合的模型判断是否应将其视为异常值。0 表示正常值,1 表示异常值,-2 表示拒绝。

expected_rejection_rate: float,如果 return_stats 为 True;upperbound_rejection_rate: float,如果 return_stats 为 True;upperbound_cost: float,如果 return_stats 为 True;

set_params(**params)

设置此估计器的参数。此方法适用于简单估计器和嵌套对象(例如管道)。嵌套对象的参数形式为 <component>__<parameter>,以便可以更新嵌套对象的每个组件。

详见 https://scikit-learn.cn/stable/modules/generated/sklearn.base.BaseEstimator.html 和 sklearn/base.py 获取更多信息。

Returns

self : object

pyod.models.so_gaal 模块

单目标生成对抗主动学习。部分代码改编自 https://github.com/leibinghe/GAAL-based-outlier-detection

class pyod.models.so_gaal.SO_GAAL(stop_epochs=20, lr_d=0.01, lr_g=0.0001, momentum=0.9, contamination=0.1)[source]

基础类: BaseDetector

单目标生成对抗主动学习。

SO-GAAL 直接生成信息丰富的潜在异常值,以帮助分类器描述一个能有效区分异常值和正常数据的边界。此外,为了防止生成器陷入模式崩溃问题,SO-GAAL 的网络结构从单个生成器(SO-GAAL)扩展到具有不同目标的多个生成器(MO-GAAL),为整个数据集生成合理的参考分布。详情请参见 [BLLZ+19]

Parameters

contaminationfloat,范围 (0., 0.5),可选 (默认值=0.1)

数据集的污染程度,即数据集中异常值的比例。在拟合时用于定义决策函数的阈值。

stop_epochs整数,可选(默认为 20)
训练的 epoch(轮数)数量。总 epoch 数量等于

stop_epochs 的三倍。

lr_d浮点数,可选(默认为 0.01)

判别器的学习率。

lr_g浮点数,可选(默认为 0.0001)

生成器的学习率。

momentum浮点数,可选(默认为 0.9)

SGD 的动量参数。

Attributes

decision_scores_形状为 (n_samples,) 的 numpy 数组

训练数据的异常值分数。分数越高表示越异常。异常值往往得分较高。此值在检测器拟合后可用。

threshold_浮点数

阈值基于 contamination。它是 decision_scores_n_samples * contamination 个最异常样本的分数。计算此阈值是为了生成二元异常值标签。

labels_整型,0 或 1

训练数据的二元标签。0 表示正常值,1 表示异常值/异常。它是通过将 threshold_ 应用于 decision_scores_ 生成的。

compute_rejection_stats(T=32, delta=0.1, c_fp=1, c_fn=1, c_r=-1, verbose=False)
为无监督检测器添加拒绝选项。

这伴随着保证:预期拒绝率的估计值 (return_rejectrate=True),拒绝率的上限 (return_ub_rejectrate= True),以及成本的上限 (return_ub_cost=True)。

Parameters

T: int,可选 (默认值=32)

它允许将拒绝阈值设置为 1-2exp(-T)。T 的值越高,拒绝越多。

delta: float,可选 (默认值 = 0.1)

拒绝率上限以概率 1-delta 成立。

c_fp, c_fn, c_r: float (正值),

可选 (默认值 = [1,1, contamination]) 对应于误报预测 (c_fp)、漏报预测 (c_fn) 和拒绝 (c_r) 的成本。

verbose: bool,可选 (默认值 = False)

如果为 True,则打印预期拒绝率、拒绝率上限和成本上限。

Returns

expected_rejection_rate: float,预期拒绝率;upperbound_rejection_rate: float,拒绝率上限

概率 1-delta 满足;

upperbound_cost: float,成本上限;

decision_function(X)[source]

使用已拟合的检测器预测 X 的原始异常分数。

输入样本的异常分数是根据不同的检测器算法计算的。为了一致性,异常值被赋予较大的异常分数。

Parameters

X形状为 (n_samples, n_features) 的 numpy 数组

训练输入样本。仅当基础估计器支持时,才接受稀疏矩阵。

Returns

anomaly_scores形状为 (n_samples,) 的 numpy 数组

输入样本的异常分数。

fit(X, y=None)[source]

拟合检测器。y 在无监督方法中被忽略。

Parameters

X形状为 (n_samples, n_features) 的 numpy 数组

输入样本。

y已忽略

未使用,根据约定为了 API 一致性而存在。

Returns

self对象

已拟合的估计器。

fit_predict(X, y=None)

首先拟合检测器,然后预测特定样本是否为异常值。y 在无监督模型中被忽略。

Parameters

X形状为 (n_samples, n_features) 的 numpy 数组

输入样本。

y已忽略

未使用,根据约定为了 API 一致性而存在。

Returns

outlier_labels形状为 (n_samples,) 的 numpy 数组

对于每个观测值,根据已拟合的模型判断是否应将其视为异常值。0 表示正常值,1 表示异常值。

自 0.6.9 版本起已弃用: fit_predict 将在 pyod 0.8.0 中移除;为了保持一致性,将替换为先调用 fit 函数,然后访问 labels_ 属性。

fit_predict_score(X, y, scoring='roc_auc_score')

拟合检测器,对样本进行预测,并使用预定义指标(例如 ROC)评估模型。

Parameters

X形状为 (n_samples, n_features) 的 numpy 数组

输入样本。

y已忽略

未使用,根据约定为了 API 一致性而存在。

scoringstr,可选 (默认值=’roc_auc_score’)

评估指标

  • ‘roc_auc_score’: ROC 分数

  • ‘prc_n_score’: Precision @ rank n 分数

Returns

score : float

自 0.6.9 版本起已弃用: fit_predict_score 将在 pyod 0.8.0 中移除;为了保持一致性,将替换为先调用 fit 函数,然后访问 labels_ 属性。评分可以通过调用评估方法(例如 AUC ROC)来完成。

get_params(deep=True)

获取此估计器的参数。

详见 https://scikit-learn.cn/stable/modules/generated/sklearn.base.BaseEstimator.html 和 sklearn/base.py 获取更多信息。

Parameters

deepbool,可选 (默认值=True)

如果为 True,将返回此估计器以及其中包含的作为估计器的子对象的参数。

Returns

params从字符串到任意类型的映射

参数名称与其值的映射。

predict(X, return_confidence=False)

预测特定样本是否为异常值。

Parameters

X形状为 (n_samples, n_features) 的 numpy 数组

输入样本。

return_confidenceboolean,可选 (默认值=False)

如果为 True,则同时返回预测的置信度。

Returns

outlier_labels形状为 (n_samples,) 的 numpy 数组

对于每个观测值,根据已拟合的模型判断是否应将其视为异常值。0 表示正常值,1 表示异常值。

confidence形状为 (n_samples,) 的 numpy 数组。

仅当 return_confidence 设置为 True 时返回。

predict_confidence(X)

预测模型在略有不同的训练集下做出相同预测的置信度。详情请参见 [BPVD20]

Parameters

X形状为 (n_samples, n_features) 的 numpy 数组

输入样本。

Returns

confidence形状为 (n_samples,) 的 numpy 数组

对于每个观测值,表示如果在训练集受到扰动时模型会多么一致地做出相同的预测。返回一个概率,范围在 [0,1]。

predict_proba(X, method='linear', return_confidence=False)

预测样本为异常值的概率。有两种可能的方法

  1. 简单使用 Min-max 转换将异常值分数线性变换到 [0,1] 的范围。模型必须先拟合。

  2. 使用统一得分,详情请参见 [BKKSZ11]

Parameters

X形状为 (n_samples, n_features) 的 numpy 数组

输入样本。

methodstr,可选 (默认值=’linear’)

概率转换方法。必须是 ‘linear’ 或 ‘unify’ 之一。

return_confidenceboolean,可选 (默认值=False)

如果为 True,则同时返回预测的置信度。

Returns

outlier_probability形状为 (n_samples, n_classes) 的 numpy 数组

对于每个观测值,根据已拟合的模型判断是否应将其视为异常值。返回异常值概率,范围在 [0,1]。注意,这取决于类别数量,默认情况下为 2 个类别 ([正常概率, 异常概率])。

predict_with_rejection(X, T=32, return_stats=False, delta=0.1, c_fp=1, c_fn=1, c_r=-1)
预测特定样本是否为异常值,

允许检测器拒绝 (即输出 = -2) 低置信度的预测。

Parameters

X形状为 (n_samples, n_features) 的 numpy 数组

输入样本。

Tint,可选 (默认值=32)

它允许将拒绝阈值设置为 1-2exp(-T)。T 的值越高,拒绝越多。

return_stats: bool,可选 (默认值 = False)

如果为 True,则同时返回三个附加的浮点值:估计拒绝率、拒绝率上限和成本上限。

delta: float,可选 (默认值 = 0.1)

拒绝率上限以概率 1-delta 成立。

c_fp, c_fn, c_r: float (正值),可选 (默认值 = [1,1, contamination])

误报预测 (c_fp)、漏报预测 (c_fn) 和拒绝 (c_r) 的成本。

Returns

outlier_labels形状为 (n_samples,) 的 numpy 数组

对于每个观测值,根据已拟合的模型判断是否应将其视为异常值。0 表示正常值,1 表示异常值,-2 表示拒绝。

expected_rejection_rate: float,如果 return_stats 为 True;upperbound_rejection_rate: float,如果 return_stats 为 True;upperbound_cost: float,如果 return_stats 为 True;

set_params(**params)

设置此估计器的参数。此方法适用于简单估计器和嵌套对象(例如管道)。嵌套对象的参数形式为 <component>__<parameter>,以便可以更新嵌套对象的每个组件。

详见 https://scikit-learn.cn/stable/modules/generated/sklearn.base.BaseEstimator.html 和 sklearn/base.py 获取更多信息。

Returns

self : object

pyod.models.sos 模块

随机异常值选择 (SOS)。部分代码改编自 https://github.com/jeroenjanssens/scikit-sos

class pyod.models.sos.SOS(contamination=0.1, perplexity=4.5, metric='euclidean', eps=1e-05)[source]

基础类: BaseDetector

随机异常值选择。

SOS 采用亲和力概念来量化一个数据点与另一个数据点之间的关系。亲和力与两个数据点之间的相似性成正比。因此,一个数据点与不相似的数据点亲和力很小。当所有其他数据点与之亲和力不足时,该数据点被选为异常值。详情请参见 [BJHuszarPvdH12]

Parameters

contamination(0., 0.5) 范围内的浮点型, 可选的 (默认值=0.1)

数据集的污染程度,即数据集中异常值的比例。在拟合时用于定义决策函数的阈值。

perplexity浮点数, 可选 (默认值=4.5)

有效邻居数量的平滑度量。复杂度参数类似于 kNN 算法中的参数 k (最近邻的数量)。复杂度的范围可以是 1 到 n-1 之间的任意实数,其中 n 是样本数量。

metric: str, 默认值 ‘euclidean’

用于距离计算的度量。可以使用 scipy.spatial.distance 中的任何度量。

有效的 method 值包括:

  • ‘euclidean’

  • 来自 scipy.spatial.distance:[‘braycurtis’, ‘canberra’, ‘chebyshev’, ‘correlation’, ‘dice’, ‘hamming’, ‘jaccard’, ‘kulsinski’, ‘mahalanobis’, ‘matching’, ‘minkowski’, ‘rogerstanimoto’, ‘russellrao’, ‘seuclidean’, ‘sokalmichener’, ‘sokalsneath’, ‘sqeuclidean’, ‘yule’]

参见 scipy.spatial.distance 的文档了解这些度量的详细信息: https://docs.scipy.org.cn/doc/scipy/reference/spatial.distance.html

eps浮点数, 可选 (默认值 = 1e-5)

浮点误差的容忍阈值。

Attributes

decision_scores_形状为 (n_samples,) 的 numpy 数组

训练数据的异常值分数。分数越高表示越异常。异常值往往得分较高。此值在检测器拟合后可用。

threshold_浮点数

阈值基于 contamination。它是 decision_scores_n_samples * contamination 个最异常样本的分数。计算此阈值是为了生成二元异常值标签。

labels_整型,0 或 1

训练数据的二元标签。0 表示正常值,1 表示异常值/异常。它是通过将 threshold_ 应用于 decision_scores_ 生成的。

Examples

>>> from pyod.models.sos import SOS
>>> from pyod.utils.data import generate_data
>>> n_train = 50
>>> n_test = 50
>>> contamination = 0.1
>>> X_train, y_train, X_test, y_test = generate_data(
...     n_train=n_train, n_test=n_test,
...     contamination=contamination, random_state=42)
>>>
>>> clf = SOS()
>>> clf.fit(X_train)
SOS(contamination=0.1, eps=1e-05, metric='euclidean', perplexity=4.5)
compute_rejection_stats(T=32, delta=0.1, c_fp=1, c_fn=1, c_r=-1, verbose=False)
为无监督检测器添加拒绝选项。

这伴随着保证:预期拒绝率的估计值 (return_rejectrate=True),拒绝率的上限 (return_ub_rejectrate= True),以及成本的上限 (return_ub_cost=True)。

Parameters

T: int,可选 (默认值=32)

它允许将拒绝阈值设置为 1-2exp(-T)。T 的值越高,拒绝越多。

delta: float,可选 (默认值 = 0.1)

拒绝率上限以概率 1-delta 成立。

c_fp, c_fn, c_r: float (正值),

可选 (默认值 = [1,1, contamination]) 对应于误报预测 (c_fp)、漏报预测 (c_fn) 和拒绝 (c_r) 的成本。

verbose: bool,可选 (默认值 = False)

如果为 True,则打印预期拒绝率、拒绝率上限和成本上限。

Returns

expected_rejection_rate: float,预期拒绝率;upperbound_rejection_rate: float,拒绝率上限

概率 1-delta 满足;

upperbound_cost: float,成本上限;

decision_function(X)[source]

使用已拟合的检测器预测 X 的原始异常分数。

输入样本的异常分数是根据不同的检测器算法计算的。为了一致性,异常值被赋予较大的异常分数。

Parameters

X形状为 (n_samples, n_features) 的 numpy 数组

训练输入样本。仅当基础估计器支持时,才接受稀疏矩阵。

Returns

anomaly_scores形状为 (n_samples,) 的 numpy 数组

输入样本的异常分数。

fit(X, y=None)[source]

拟合检测器。y 在无监督方法中被忽略。

Parameters

X形状为 (n_samples, n_features) 的 numpy 数组

输入样本。

y已忽略

未使用,根据约定为了 API 一致性而存在。

Returns

self对象

已拟合的估计器。

fit_predict(X, y=None)

首先拟合检测器,然后预测特定样本是否为异常值。y 在无监督模型中被忽略。

Parameters

X形状为 (n_samples, n_features) 的 numpy 数组

输入样本。

y已忽略

未使用,根据约定为了 API 一致性而存在。

Returns

outlier_labels形状为 (n_samples,) 的 numpy 数组

对于每个观测值,根据已拟合的模型判断是否应将其视为异常值。0 表示正常值,1 表示异常值。

自 0.6.9 版本起已弃用: fit_predict 将在 pyod 0.8.0 中移除;为了保持一致性,将替换为先调用 fit 函数,然后访问 labels_ 属性。

fit_predict_score(X, y, scoring='roc_auc_score')

拟合检测器,对样本进行预测,并使用预定义指标(例如 ROC)评估模型。

Parameters

X形状为 (n_samples, n_features) 的 numpy 数组

输入样本。

y已忽略

未使用,根据约定为了 API 一致性而存在。

scoringstr,可选 (默认值=’roc_auc_score’)

评估指标

  • ‘roc_auc_score’: ROC 分数

  • ‘prc_n_score’: Precision @ rank n 分数

Returns

score : float

自 0.6.9 版本起已弃用: fit_predict_score 将在 pyod 0.8.0 中移除;为了保持一致性,将替换为先调用 fit 函数,然后访问 labels_ 属性。评分可以通过调用评估方法(例如 AUC ROC)来完成。

get_params(deep=True)

获取此估计器的参数。

详见 https://scikit-learn.cn/stable/modules/generated/sklearn.base.BaseEstimator.html 和 sklearn/base.py 获取更多信息。

Parameters

deepbool,可选 (默认值=True)

如果为 True,将返回此估计器以及其中包含的作为估计器的子对象的参数。

Returns

params从字符串到任意类型的映射

参数名称与其值的映射。

predict(X, return_confidence=False)

预测特定样本是否为异常值。

Parameters

X形状为 (n_samples, n_features) 的 numpy 数组

输入样本。

return_confidenceboolean,可选 (默认值=False)

如果为 True,则同时返回预测的置信度。

Returns

outlier_labels形状为 (n_samples,) 的 numpy 数组

对于每个观测值,根据已拟合的模型判断是否应将其视为异常值。0 表示正常值,1 表示异常值。

confidence形状为 (n_samples,) 的 numpy 数组。

仅当 return_confidence 设置为 True 时返回。

predict_confidence(X)

预测模型在略有不同的训练集下做出相同预测的置信度。详情请参见 [BPVD20]

Parameters

X形状为 (n_samples, n_features) 的 numpy 数组

输入样本。

Returns

confidence形状为 (n_samples,) 的 numpy 数组

对于每个观测值,表示如果在训练集受到扰动时模型会多么一致地做出相同的预测。返回一个概率,范围在 [0,1]。

predict_proba(X, method='linear', return_confidence=False)

预测样本为异常值的概率。有两种可能的方法

  1. 简单使用 Min-max 转换将异常值分数线性变换到 [0,1] 的范围。模型必须先拟合。

  2. 使用统一得分,详情请参见 [BKKSZ11]

Parameters

X形状为 (n_samples, n_features) 的 numpy 数组

输入样本。

methodstr,可选 (默认值=’linear’)

概率转换方法。必须是 ‘linear’ 或 ‘unify’ 之一。

return_confidenceboolean,可选 (默认值=False)

如果为 True,则同时返回预测的置信度。

Returns

outlier_probability形状为 (n_samples, n_classes) 的 numpy 数组

对于每个观测值,根据已拟合的模型判断是否应将其视为异常值。返回异常值概率,范围在 [0,1]。注意,这取决于类别数量,默认情况下为 2 个类别 ([正常概率, 异常概率])。

predict_with_rejection(X, T=32, return_stats=False, delta=0.1, c_fp=1, c_fn=1, c_r=-1)
预测特定样本是否为异常值,

允许检测器拒绝 (即输出 = -2) 低置信度的预测。

Parameters

X形状为 (n_samples, n_features) 的 numpy 数组

输入样本。

Tint,可选 (默认值=32)

它允许将拒绝阈值设置为 1-2exp(-T)。T 的值越高,拒绝越多。

return_stats: bool,可选 (默认值 = False)

如果为 True,则同时返回三个附加的浮点值:估计拒绝率、拒绝率上限和成本上限。

delta: float,可选 (默认值 = 0.1)

拒绝率上限以概率 1-delta 成立。

c_fp, c_fn, c_r: float (正值),可选 (默认值 = [1,1, contamination])

误报预测 (c_fp)、漏报预测 (c_fn) 和拒绝 (c_r) 的成本。

Returns

outlier_labels形状为 (n_samples,) 的 numpy 数组

对于每个观测值,根据已拟合的模型判断是否应将其视为异常值。0 表示正常值,1 表示异常值,-2 表示拒绝。

expected_rejection_rate: float,如果 return_stats 为 True;upperbound_rejection_rate: float,如果 return_stats 为 True;upperbound_cost: float,如果 return_stats 为 True;

set_params(**params)

设置此估计器的参数。此方法适用于简单估计器和嵌套对象(例如管道)。嵌套对象的参数形式为 <component>__<parameter>,以便可以更新嵌套对象的每个组件。

详见 https://scikit-learn.cn/stable/modules/generated/sklearn.base.BaseEstimator.html 和 sklearn/base.py 获取更多信息。

Returns

self : object

pyod.models.suod 模块

SUOD

class pyod.models.suod.SUOD(base_estimators=None, contamination=0.1, combination='average', n_jobs=None, rp_clf_list=None, rp_ng_clf_list=None, rp_flag_global=True, target_dim_frac=0.5, jl_method='basic', bps_flag=True, approx_clf_list=None, approx_ng_clf_list=None, approx_flag_global=True, approx_clf=None, verbose=False)[source]

基础类: BaseDetector

SUOD (Scalable Unsupervised Outlier Detection) 是一种用于大规模无监督异常检测器训练和预测的加速框架。详情请参见 [BZHC+21]

Parameters

base_estimators列表,长度必须大于 1

基本估计器的列表。某些方法必须存在,例如 fitpredict

combinationstr, 可选 (默认=’average’)

决定如何聚合多个模型的结果

  • "average" : 对所有基本检测器的结果进行平均

  • "maximization" : 输出所有基本检测器的最大值

contaminationfloat,范围 (0., 0.5),可选 (默认值=0.1)

数据集的污染程度,即数据集中异常值的比例。在拟合时用于定义决策函数的阈值。

n_jobs可选 (默认=1)

用于并行运行 fitpredict 的作业数。如果为 -1,则作业数设置为实际可以并行运行的作业数。

rp_clf_list列表, 可选 (默认值=None)

使用随机投影的异常检测模型列表。检测器名称应与 PyOD 一致。

rp_ng_clf_list列表, 可选 (默认值=None)

不使用随机投影的异常检测模型列表。检测器名称应与 PyOD 一致。

rp_flag_globalbool, 可选 (默认值=True)

如果设置为 False,则所有基本模型都将关闭随机投影。

target_dim_fracfloat in (0., 1), 可选 (默认值=0.5)

目标压缩率。

jl_methodstring, 可选 (默认值 = ‘basic’)

JL 投影方法

  • "basic": 变换矩阵的每个分量在 N(0,1) 中随机选取。

  • "discrete", 变换矩阵的每个分量在 {-1,1} 中随机选取。

  • "circulant": 变换矩阵的第一行在 N(0,1) 中随机选取,并且每一行都是由前一行左移一位得到。

  • "toeplitz": 变换矩阵的第一行和列在 N(0,1) 中随机选取,并且每个对角线都具有从这些第一个向量中获取的常数值。

bps_flagbool, 可选 (默认值=True)

如果设置为 False,则平衡并行调度将关闭。

approx_clf_list列表, 可选 (默认值=None)

使用伪监督近似的异常检测模型列表。检测器名称应与 PyOD 一致。

approx_ng_clf_list列表, 可选 (默认值=None)

不使用伪监督近似的异常检测模型列表。检测器名称应与 PyOD 一致。

approx_flag_globalbool, 可选 (默认值=True)

如果设置为 False,则伪监督近似将关闭。

approx_clf对象, 可选 (默认值: sklearn RandomForestRegressor)

用于近似无监督模型的监督模型。

cost_forecast_loc_fitstr, 可选

用于训练的预训练成本预测模型的位置。

cost_forecast_loc_predstr, 可选

用于预测的预训练成本预测模型的位置。

verboseint, 可选 (默认=0)

控制构建过程的详细程度。

Attributes

decision_scores_形状为 (n_samples,) 的 numpy 数组

训练数据的异常值分数。分数越高表示越异常。异常值往往得分较高。此值在检测器拟合后可用。

threshold_浮点数

阈值基于 contamination。它是 decision_scores_n_samples * contamination 个最异常样本的分数。计算此阈值是为了生成二元异常值标签。

labels_整型,0 或 1

训练数据的二元标签。0 表示正常值,1 表示异常值/异常。它是通过将 threshold_ 应用于 decision_scores_ 生成的。

compute_rejection_stats(T=32, delta=0.1, c_fp=1, c_fn=1, c_r=-1, verbose=False)
为无监督检测器添加拒绝选项。

这伴随着保证:预期拒绝率的估计值 (return_rejectrate=True),拒绝率的上限 (return_ub_rejectrate= True),以及成本的上限 (return_ub_cost=True)。

Parameters

T: int,可选 (默认值=32)

它允许将拒绝阈值设置为 1-2exp(-T)。T 的值越高,拒绝越多。

delta: float,可选 (默认值 = 0.1)

拒绝率上限以概率 1-delta 成立。

c_fp, c_fn, c_r: float (正值),

可选 (默认值 = [1,1, contamination]) 对应于误报预测 (c_fp)、漏报预测 (c_fn) 和拒绝 (c_r) 的成本。

verbose: bool,可选 (默认值 = False)

如果为 True,则打印预期拒绝率、拒绝率上限和成本上限。

Returns

expected_rejection_rate: float,预期拒绝率;upperbound_rejection_rate: float,拒绝率上限

概率 1-delta 满足;

upperbound_cost: float,成本上限;

decision_function(X)[source]

使用已拟合的检测器预测 X 的原始异常分数。

输入样本的异常分数是根据不同的检测器算法计算的。为了一致性,异常值被赋予较大的异常分数。

Parameters

X形状为 (n_samples, n_features) 的 numpy 数组

训练输入样本。仅当基础估计器支持时,才接受稀疏矩阵。

Returns

anomaly_scores形状为 (n_samples,) 的 numpy 数组

输入样本的异常分数。

fit(X, y=None)[source]

拟合检测器。y 在无监督方法中被忽略。

Parameters

X形状为 (n_samples, n_features) 的 numpy 数组

输入样本。

y已忽略

未使用,根据约定为了 API 一致性而存在。

Returns

self对象

已拟合的估计器。

fit_predict(X, y=None)

首先拟合检测器,然后预测特定样本是否为异常值。y 在无监督模型中被忽略。

Parameters

X形状为 (n_samples, n_features) 的 numpy 数组

输入样本。

y已忽略

未使用,根据约定为了 API 一致性而存在。

Returns

outlier_labels形状为 (n_samples,) 的 numpy 数组

对于每个观测值,根据已拟合的模型判断是否应将其视为异常值。0 表示正常值,1 表示异常值。

自 0.6.9 版本起已弃用: fit_predict 将在 pyod 0.8.0 中移除;为了保持一致性,将替换为先调用 fit 函数,然后访问 labels_ 属性。

fit_predict_score(X, y, scoring='roc_auc_score')

拟合检测器,对样本进行预测,并使用预定义指标(例如 ROC)评估模型。

Parameters

X形状为 (n_samples, n_features) 的 numpy 数组

输入样本。

y已忽略

未使用,根据约定为了 API 一致性而存在。

scoringstr,可选 (默认值=’roc_auc_score’)

评估指标

  • ‘roc_auc_score’: ROC 分数

  • ‘prc_n_score’: Precision @ rank n 分数

Returns

score : float

自 0.6.9 版本起已弃用: fit_predict_score 将在 pyod 0.8.0 中移除;为了保持一致性,将替换为先调用 fit 函数,然后访问 labels_ 属性。评分可以通过调用评估方法(例如 AUC ROC)来完成。

get_params(deep=True)

获取此估计器的参数。

详见 https://scikit-learn.cn/stable/modules/generated/sklearn.base.BaseEstimator.html 和 sklearn/base.py 获取更多信息。

Parameters

deepbool,可选 (默认值=True)

如果为 True,将返回此估计器以及其中包含的作为估计器的子对象的参数。

Returns

params从字符串到任意类型的映射

参数名称与其值的映射。

predict(X, return_confidence=False)

预测特定样本是否为异常值。

Parameters

X形状为 (n_samples, n_features) 的 numpy 数组

输入样本。

return_confidenceboolean,可选 (默认值=False)

如果为 True,则同时返回预测的置信度。

Returns

outlier_labels形状为 (n_samples,) 的 numpy 数组

对于每个观测值,根据已拟合的模型判断是否应将其视为异常值。0 表示正常值,1 表示异常值。

confidence形状为 (n_samples,) 的 numpy 数组。

仅当 return_confidence 设置为 True 时返回。

predict_confidence(X)

预测模型在略有不同的训练集下做出相同预测的置信度。详情请参见 [BPVD20]

Parameters

X形状为 (n_samples, n_features) 的 numpy 数组

输入样本。

Returns

confidence形状为 (n_samples,) 的 numpy 数组

对于每个观测值,表示如果在训练集受到扰动时模型会多么一致地做出相同的预测。返回一个概率,范围在 [0,1]。

predict_proba(X, method='linear', return_confidence=False)

预测样本为异常值的概率。有两种可能的方法

  1. 简单使用 Min-max 转换将异常值分数线性变换到 [0,1] 的范围。模型必须先拟合。

  2. 使用统一得分,详情请参见 [BKKSZ11]

Parameters

X形状为 (n_samples, n_features) 的 numpy 数组

输入样本。

methodstr,可选 (默认值=’linear’)

概率转换方法。必须是 ‘linear’ 或 ‘unify’ 之一。

return_confidenceboolean,可选 (默认值=False)

如果为 True,则同时返回预测的置信度。

Returns

outlier_probability形状为 (n_samples, n_classes) 的 numpy 数组

对于每个观测值,根据已拟合的模型判断是否应将其视为异常值。返回异常值概率,范围在 [0,1]。注意,这取决于类别数量,默认情况下为 2 个类别 ([正常概率, 异常概率])。

predict_with_rejection(X, T=32, return_stats=False, delta=0.1, c_fp=1, c_fn=1, c_r=-1)
预测特定样本是否为异常值,

允许检测器拒绝 (即输出 = -2) 低置信度的预测。

Parameters

X形状为 (n_samples, n_features) 的 numpy 数组

输入样本。

Tint,可选 (默认值=32)

它允许将拒绝阈值设置为 1-2exp(-T)。T 的值越高,拒绝越多。

return_stats: bool,可选 (默认值 = False)

如果为 True,则同时返回三个附加的浮点值:估计拒绝率、拒绝率上限和成本上限。

delta: float,可选 (默认值 = 0.1)

拒绝率上限以概率 1-delta 成立。

c_fp, c_fn, c_r: float (正值),可选 (默认值 = [1,1, contamination])

误报预测 (c_fp)、漏报预测 (c_fn) 和拒绝 (c_r) 的成本。

Returns

outlier_labels形状为 (n_samples,) 的 numpy 数组

对于每个观测值,根据已拟合的模型判断是否应将其视为异常值。0 表示正常值,1 表示异常值,-2 表示拒绝。

expected_rejection_rate: float,如果 return_stats 为 True;upperbound_rejection_rate: float,如果 return_stats 为 True;upperbound_cost: float,如果 return_stats 为 True;

set_params(**params)

设置此估计器的参数。此方法适用于简单估计器和嵌套对象(例如管道)。嵌套对象的参数形式为 <component>__<parameter>,以便可以更新嵌套对象的每个组件。

详见 https://scikit-learn.cn/stable/modules/generated/sklearn.base.BaseEstimator.html 和 sklearn/base.py 获取更多信息。

Returns

self : object

pyod.models.thresholds 模块

pyod.models.thresholds.AUCP(**kwargs)[source]

AUCP 类,用于曲线下面积百分比阈值器。

使用曲线下面积来评估一种非参数方法,用于对 decision_scores 生成的得分进行阈值处理,其中异常值被设置为超出 kde 曲线下面积小于总 kde 曲线下面积的 (均值 + abs(均值-中位数)) 百分比的值。

pyod.models.thresholds.BOOT(**kwargs)[source]

BOOT 类,用于引导阈值器。

使用基于引导的方法来寻找一种非参数的方法来对由 decision_scores 生成的分数设置阈值,其中异常值被设置为超出置信区间均值的任何值。

参数

random_stateint,可选 (默认=1234)

用于引导生成置信区间的随机种子。也可以设置为 None。

pyod.models.thresholds.CHAU(**kwargs)[source]

CHAU 类,用于肖维内准则阈值器。

使用肖维内准则来评估一种非参数的方法来对由 decision_scores 生成的分数设置阈值,其中异常值被设置为低于肖维内准则的任何值。

参数

method{'mean', 'median', 'gmean'},可选 (默认='mean')

使用缩放器计算垂直于距离的面积

  • ‘mean’:使用分数的均值构建缩放器

  • ‘median’:使用分数的中位数构建缩放器

  • ‘gmean’:使用分数的几何平均值构建缩放器

pyod.models.thresholds.CLF(**kwargs)[source]

CLF 类,用于训练好的分类器阈值器。

使用训练好的线性分类器来评估一种非参数的方法来对由 decision_scores 生成的分数设置阈值,其中异常值被设置为超出 0 的任何值。

参数

method{'simple', 'complex'},可选 (默认='complex')

线性模型类型

  • ‘simple’:仅使用分数

  • ‘complex’:使用分数、分数的对数以及分数的 PDF

pyod.models.thresholds.CLUST(**kwargs)[source]

CLUST 类,用于聚类类型阈值器。

使用聚类方法来评估一种非参数的方法来对由 decision_scores 生成的分数设置阈值,其中异常值被设置为未被标记为主集群一部分的任何值。

参数

method{'agg', 'birch', 'bang', 'bgm', 'bsas', 'dbscan', 'ema', 'kmeans', 'mbsas', 'mshift', 'optics', 'somsc', 'spec', 'xmeans'},可选 (默认='spec')

聚类方法

  • ‘agg’:凝聚层次聚类

  • ‘birch’:使用层次结构的平衡迭代归约和聚类

  • ‘bang’:BANG

  • ‘bgm’:贝叶斯高斯混合模型

  • ‘bsas’:基本序列算法方案

  • ‘dbscan’:基于密度的带噪声空间聚类应用

  • ‘ema’:高斯混合模型的期望最大化聚类算法

  • ‘kmeans’:K均值

  • ‘mbsas’:改进的基本序列算法方案

  • ‘mshift’:均值漂移

  • ‘optics’:排序点以识别聚类结构

  • ‘somsc’:自组织特征图

  • ‘spec’:归一化拉普拉斯投影聚类

  • ‘xmeans’:X均值

random_stateint,可选 (默认=1234)

用于 BayesianGaussianMixture 聚类 (method='bgm') 的随机种子。也可以设置为 None。

pyod.models.thresholds.CPD(**kwargs)[source]

CPD 类,用于变化点检测阈值器。

使用变化点检测来寻找一种非参数的方法来对由 decision_scores 生成的分数设置阈值,其中异常值被设置为超出检测到的变化点的任何值。

参数

method{'Dynp', 'KernelCPD', 'Binseg', 'BottomUp'},可选 (默认='Dynp')

变化点检测方法

  • ‘Dynp’:动态规划(每个分区的最优最小误差和)

  • ‘KernelCPD’:RBF 核函数(每个分区的最优最小误差和)

  • ‘Binseg’:二元分割

  • ‘BottomUp’:自下而上分割

transform{'cdf', 'kde'},可选 (默认='cdf')

拟合前的数据转换方法

  • ‘cdf’:使用累积分布函数

  • ‘kde’:使用核密度估计

pyod.models.thresholds.DECOMP(**kwargs)[source]

DECOMP 类,用于基于分解的阈值器。

使用分解来评估一种非参数的方法来对由 decision_scores 生成的分数设置阈值,其中异常值被设置为超出对决策分数累积分布函数进行分解所得分解矩阵的最大值的任何值。

参数

method{'NMF', 'PCA', 'GRP', 'SRP'},可选 (默认='PCA')

用于分解的方法

  • ‘NMF’:非负矩阵分解

  • ‘PCA’:主成分分析

  • ‘GRP’:高斯随机投影

  • ‘SRP’:稀疏随机投影

random_stateint,可选 (默认=1234)

用于分解算法的随机种子。也可以设置为 None。

pyod.models.thresholds.DSN(**kwargs)[source]

DSN 类,用于距正常的距离偏移阈值器。

使用距正常的距离偏移来评估一种非参数的方法来对由 decision_scores 生成的分数设置阈值,其中异常值被设置为超出所选度量计算出的距离的任何值。

参数

metric{'JS', 'WS', 'ENG', 'BHT', 'HLL', 'HI', 'LK', 'LP', 'MAH', 'TMT', 'RES', 'KS', 'INT', 'MMD'},可选 (默认='MAH')

用于距离计算的度量

  • ‘JS’:Jensen-Shannon 距离

  • ‘WS’:Wasserstein 或 Earth Movers 距离

  • ‘ENG’:能量距离

  • ‘BHT’:Bhattacharyya 距离

  • ‘HLL’:Hellinger 距离

  • ‘HI’:直方图交集距离

  • ‘LK’:正态分布的 Lukaszyk-Karmowski 度量

  • ‘LP’:Levy-Prokhorov 度量

  • ‘MAH’:马氏距离 (Mahalanobis distance)

  • ‘TMT’:Tanimoto 距离

  • ‘RES’:学生化残差距离

  • ‘KS’:Kolmogorov-Smirnov 距离

  • ‘INT’:加权样条插值距离

  • ‘MMD’:最大均值差异距离

random_stateint,可选 (默认=1234)

用于正态分布的随机种子。也可以设置为 None。

pyod.models.thresholds.EB(**kwargs)[source]

EB 类,用于椭圆边界阈值器。

使用伪随机椭圆边界来评估一种非参数的方法来对由 decision_scores 生成的分数设置阈值,其中异常值被设置为超出位于正常点和异常点之间的伪随机椭圆边界的任何值。

pyod.models.thresholds.FGD(**kwargs)[source]

FGD 类,用于固定梯度下降阈值器。

使用固定梯度下降来评估一种非参数的方法来对由 decision_scores 生成的分数设置阈值,其中异常值被设置为超出 kde 相对于决策分数的一阶导数通过第一和第二拐点平均值的位置的任何值。

pyod.models.thresholds.FILTER(**kwargs)[source]

FILTER 类,用于基于滤波的阈值器。

使用 scikit-image.filters 中描述的基于滤波的方法来评估一种非参数的方法来对由 decision_scores 生成的分数设置阈值,其中异常值被设置为超出最大滤波值的任何值。详情请参阅 [BHGPRR19]

参数

method{'gaussian', 'savgol', 'hilbert', 'wiener', 'medfilt', 'decimate','detrend', 'resample'},可选 (默认='savgol')

过滤分数的方法

  • ‘gaussian’:使用基于高斯的滤波器

  • ‘savgol’:使用基于 savgol 的滤波器

  • ‘hilbert’:使用基于 hilbert 的滤波器

  • ‘wiener’:使用基于 wiener 的滤波器

  • ‘medfilt’:使用基于中位数的滤波器

  • ‘decimate’:下采样因子

  • ‘detrend’:断点数量

  • ‘resample’:重采样窗口大小

sigmaint,可选 (默认='auto')

各滤波器类型特有的变量,默认为 len(scores)*np.std(scores)

  • ‘gaussian’:高斯核的标准差

  • ‘savgol’:savgol 滤波器窗口大小

  • ‘hilbert’:傅里叶分量数

  • ‘medfilt’:核大小

  • ‘decimate’:下采样因子

  • ‘detrend’:断点数量

  • ‘resample’:重采样窗口大小

pyod.models.thresholds.FWFM(**kwargs)[source]

FWFM 类,用于全宽全最小值阈值器。

使用全宽全最小值(又称基线宽度)来评估一种非参数的方法来对由 decision_scores 生成的分数设置阈值,其中异常值被设置为超出基线宽度的任何值。

pyod.models.thresholds.GESD(**kwargs)[source]

GESD 类,用于广义极端学生化离差阈值器。

使用广义极端学生化离差来评估一种非参数的方法来对由 decision_scores 生成的分数设置阈值,其中异常值被设置为小于检测到的最小异常值的任何值。

参数

max_outliersint,可选 (默认='auto')

数据集可能包含的最大异常值数量。默认将 max_outliers 设置为数据集大小的一半

alphafloat,可选 (默认=0.05)

显著性水平

pyod.models.thresholds.HIST(**kwargs)[source]

HIST 类,用于基于直方图的阈值器。

使用 scikit-image.filters 中描述的直方图方法来评估一种非参数的方法来对由 decision_scores 生成的分数设置阈值,其中异常值由根据所选方法生成的直方图阈值确定。

参数

nbinsint,可选 (默认='auto')

直方图中使用的 bin 数量,默认设置为 int(len(scores)**0.7)

method{'otsu', 'yen', 'isodata', 'li', 'minimum', 'triangle'},可选 (默认='triangle')

基于直方图的滤波方法

  • ‘otsu’:用于滤波的 OTSU 方法

  • ‘yen’:用于滤波的 Yen 方法

  • ‘isodata’:用于滤波的 Ridler-Calvard 或区间均值方法

  • ‘li’:用于滤波的 Li 迭代最小交叉熵方法

  • ‘minimum’:通过平滑方法寻找两个最大值之间的最小值进行滤波的方法

  • ‘triangle’:用于滤波的三角形算法方法

pyod.models.thresholds.IQR(**kwargs)[source]

IQR 类,用于四分位距阈值器。

使用四分位距来评估一种非参数的方法来对由 decision_scores 生成的分数设置阈值,其中异常值被设置为超出第三四分位数加上 1.5 倍四分位距的任何值。

pyod.models.thresholds.KARCH(**kwargs)[source]

KARCH 类,用于黎曼质心阈值器。

使用卡尔彻平均值(黎曼质心)来评估一种非参数的方法来对由 decision_scores 生成的分数设置阈值,其中异常值被设置为超出卡尔彻平均值加上 decision_scores 的一个标准差的任何值。

参数

ndimint,可选 (默认=2)

构建欧几里得流形的维数

method{'simple', 'complex'},可选 (默认='complex')

计算卡尔彻平均值的方法

  • ‘simple’:使用分数的 1D 数组计算卡尔彻平均值

  • ‘complex’:计算分数和排序后分数数组的点积的 2D 数组之间的卡尔彻平均值

pyod.models.thresholds.MAD(**kwargs)[source]

MAD 类,用于中位数绝对离差阈值器。

使用中位数绝对离差来评估一种非参数的方法来对由 decision_scores 生成的分数设置阈值,其中异常值被设置为超出均值加上中位数绝对离差除以标准差的任何值。

pyod.models.thresholds.MCST(**kwargs)[source]

MCST 类,用于蒙特卡洛 Shapiro 检验阈值器。

使用均匀随机抽样和统计检验来评估一种非参数的方法来对由 decision_scores 生成的分数设置阈值,其中异常值被设置为迭代 Shapiro-Wilk 检验后剩余的最小值之外的任何值。注意**:精度随数组大小减小。为了获得良好结果,数组大小应小于 1000。但是,此阈值方法在任何数组大小时仍可能失败。

参数

random_stateint,可选 (默认=1234)

用于均匀分布的随机种子。也可以设置为 None。

pyod.models.thresholds.META(**kwargs)[source]

META 类,用于元建模阈值器。

使用训练好的元模型来评估一种非参数的方法来对由 decision_scores 生成的分数设置阈值,其中异常值基于训练好的元模型分类器设置。

参数

method{'LIN', 'GNB', 'GNBC', 'GNBM'},可选 (默认='GNBM')

选择

  • ‘LIN’:在真实标签上训练的 RidgeCV 线性分类器元模型

  • ‘GNB’:在真实标签上训练的高斯朴素贝叶斯分类器元模型

  • ‘GNBC’:在最佳污染率上训练的高斯朴素贝叶斯分类器元模型

  • ‘GNBM’:高斯朴素贝叶斯多元训练分类器元模型

pyod.models.thresholds.MOLL(**kwargs)[source]

MOLL 类,用于 Friedrichs 磨光函数阈值器。

使用 Friedrichs 磨光函数来评估一种非参数的方法来对由 decision_scores 生成的分数设置阈值,其中异常值被设置为超出通过卷积平滑后的数据集的最大值减一的任何值。

pyod.models.thresholds.MTT(**kwargs)[source]

MTT 类,用于修正的 Thompson Tau 检验阈值器。

使用修正的 Thompson Tau 检验来评估一种非参数的方法来对由 decision_scores 生成的分数设置阈值,其中异常值被设置为超出该检验检测到的最小异常值的任何值。

参数

strictness[1,2,3,4,5],可选 (默认=4)

对应于 t-Student 分布图抽样的严格性级别

pyod.models.thresholds.OCSVM(**kwargs)[source]

OCSVM 类,用于单类支持向量机阈值器。

使用单类支持向量机来评估一种非参数的方法来对由 decision_scores 生成的分数设置阈值,其中异常值由使用多项式核的单类支持向量机确定,多项式核的次数可以设定或由内部回归确定。

参数

model{'poly', 'sgd'},可选 (默认='sgd')

要应用的 OCSVM 模型

  • ‘poly’:使用带有常规 OCSVM 的多项式核

  • ‘sgd’:使用带有 SGDOneClassSVM 的 Additive Chi2 核近似

degreeint,可选 (默认='auto')

单类支持向量机使用的多项式次数。默认值 'auto' 通过线性回归找到最优次数

gamma浮点数,可选(默认为 'auto')

单类支持向量机多项式拟合的核系数。默认值 'auto' 使用 1 / n_features

criterion{'aic', 'bic'},可选 (默认='bic')

回归性能指标。AIC 是赤池信息准则,BIC 是贝叶斯信息准则。这仅在 degree 设置为 'auto' 时适用

nufloat,可选 (默认='auto')

训练误差分数的上限和支持向量分数 的下限。默认值 'auto' 将 nu 设置为小于或等于中位数加上均值和几何平均值之间的绝对差值的任何点与整个数据集中点数的比率

tolfloat,可选 (默认=1e-3)

单类支持向量机的停止准则

random_stateint,可选 (默认=1234)

用于 SVM 数据采样的随机种子。也可以设置为 None。

pyod.models.thresholds.QMCD(**kwargs)[source]

QMCD 类,用于拟蒙特卡洛差异阈值器。

使用拟蒙特卡洛差异来评估一种非参数的方法来对由 decision_scores 生成的分数设置阈值,其中异常值被设置为超出对应于 (1 - 差异) 的某个百分位数或分位数的任何值(注意**:差异衡量了超立方体上的连续均匀分布与离散样本点上的离散均匀分布之间的距离)。

参数

method{'CD', 'WD', 'MD', 'L2-star'},可选 (默认='WD')

差异类型

  • ‘CD’:中心差异

  • ‘WD’:环绕差异

  • ‘MD’:CD/WD 混合差异

  • ‘L2-star’:L2-star 差异

lim{'Q', 'P'},可选 (默认='P')

使用 1 - 差异对分数进行阈值处理的滤波方法

  • ‘Q’:使用分位数限制

  • ‘P’:使用百分位数限制

pyod.models.thresholds.REGR(**kwargs)[source]

REGR 类,用于基于回归的阈值器。

使用回归来评估一种非参数的方法来对由 decision_scores 生成的分数设置阈值,其中异常值被设置为超出线性拟合的 y 截距值的任何值。

参数

method{'siegel', 'theil'},可选 (默认='siegel')

计算 y 截距的基于回归的方法

  • ‘siegel’:实现了一种使用重复中位数的稳健线性回归方法

  • ‘theil’:实现了一种使用配对值的稳健线性回归方法

random_stateint,可选 (默认=1234)

正态分布的随机种子。也可以设置为 None

pyod.models.thresholds.VAE(**kwargs)[source]

VAE 类,用于变分自编码器阈值器。

使用 VAE 来评估一种非参数的方法来对由 decision_scores 生成的分数设置阈值,其中异常值被设置为超出编码后重建分布概率的最大值减去最小值的任何值。

参数

verbosebool,可选 (默认=False)

显示训练进度

devicestr,可选 (默认='cpu')

pytorch 设备

latent_dimsint,可选 (默认='auto')

编码器将分数映射到的潜在维数。默认值 'auto' 使用剖面似然自动选择维数。

random_stateint,可选 (默认=1234)

正态分布的随机种子。也可以设置为 None

epochsint, 可选 (默认=100)

训练 VAE 的 epoch 数量

batch_sizeint,可选 (默认=64)

训练期间数据加载器的批量大小

lossstr,可选 (默认='kl')

训练期间的损失函数

  • ‘kl’:使用负对数似然和 Kullback-Leibler 散度的组合

  • ‘mmd’:使用负对数似然和最大均值差异的组合

属性

thresh_ :区分正常点和异常点的阈值

pyod.models.thresholds.WIND(**kwargs)[source]

WIND 类,用于拓扑缠绕数阈值器。

使用拓扑缠绕数(相对于原点)来评估一种非参数的方法来对由 decision_scores 生成的分数设置阈值,其中异常值被设置为超出由缠绕数计算出的平均交点值之外的任何值。

参数

random_stateint,可选 (默认=1234)

用于正态分布的随机种子。也可以设置为 None。

pyod.models.thresholds.YJ(**kwargs)[source]

YJ 类,用于 Yeo-Johnson 变换阈值器。

使用 Yeo-Johnson 变换来评估一种非参数的方法来对由 decision_scores 生成的分数设置阈值,其中异常值被设置为超出 YJ 变换数据中最大值的任何值。

pyod.models.thresholds.ZSCORE(**kwargs)[source]

ZSCORE 类,用于 ZSCORE 阈值器。

使用 zscore 来评估一种非参数的方法来对由 decision_scores 生成的分数设置阈值,其中异常值被设置为超出 zscore 值 1 的任何值。

pyod.models.vae 模块

用于无监督异常值检测的变分自编码器 (VAE) 和 beta-VAE

参考文献

[BKW13] Kingma, Diederik, Welling ‘Auto-Encoding Variational Bayes’ https://arxiv.org/abs/1312.6114

[BBHP+18] Burges 等人 ‘Understanding disentangling in beta-VAE’ https://arxiv.org/pdf/1804.03599.pdf

class pyod.models.vae.VAE(contamination=0.1, preprocessing=True, lr=0.001, epoch_num=30, batch_size=32, optimizer_name='adam', device=None, random_state=42, use_compile=False, compile_mode='default', verbose=1, optimizer_params: dict = {'weight_decay': 1e-05}, beta=1.0, capacity=0.0, encoder_neuron_list=[128, 64, 32], decoder_neuron_list=[32, 64, 128], latent_dim=2, hidden_activation_name='relu', output_activation_name='sigmoid', batch_norm=False, dropout_rate=0.2)[source]

基础类: BaseDeepLearningDetector

变分自编码器 编码器将 X 映射到潜在空间 Z 解码器从 N(0,1) 中采样 Z VAE_loss = 重建损失 + KL 损失

参考文献 详情请参阅 [BKW13] Kingma, Diederik, Welling ‘Auto-Encoding Variational Bayes’ https://arxiv.org/abs/1312.6114

beta VAE 在损失函数中,重点在于 KL_loss 和瓶颈容量:VAE_loss = 重建损失 + beta * KL_loss

参考文献 详情请参阅 [BBHP+18] Burges 等人 ‘Understanding disentangling in beta-VAE’ https://arxiv.org/pdf/1804.03599.pdf

参数

contaminationfloat,范围 (0., 0.5),可选 (默认值=0.1)

数据集的污染程度,即数据集中异常值的比例。在拟合时用于定义决策函数的阈值。

preprocessingbool,可选 (默认值=True)

如果为 True,则在训练模型之前应用预处理过程。

lrfloat, 可选 (默认=1e-3)

优化器的初始学习率。

epoch_numint,可选 (默认=30)

训练的周期(epoch)数量。

batch_sizeint,可选 (默认值=32)

训练的批次大小。

optimizer_namestr, 可选 (默认=’adam’)

用于训练模型的优化器名称。

devicestr, 可选 (默认=None)

用于模型的设备。如果为 None,则自动决定。如果想使用 MPS,请将其设置为 ‘mps’。

random_stateint, 可选 (默认=42)

用于重现结果的随机种子。

use_compilebool, 可选 (默认=False)

是否编译模型。如果为 True,则在训练前编译模型。此功能仅适用于 PyTorch 版本 >= 2.0.0 和 Python < 3.12。

compile_modestr, 可选 (默认=’default’)

编译模型时使用的模式。可以是“default”、“reduce-overhead”、“max-autotune”或“max-autotune-no-cudagraphs”之一。详见 https://pytorch.ac.cn/docs/stable/generated/torch.compile.html#torch-compile

verboseint,可选 (默认值=1)

详细程度模式。- 0 = 静默 - 1 = 进度条 - 2 = 每个周期(epoch)一行。

optimizer_paramsdict, 可选 (默认={‘weight_decay’: 1e-5})

优化器的附加参数。例如,optimizer_params={‘weight_decay’: 1e-5}

betafloat,可选 (默认=1.0)

beta VAE 的系数。KL 散度的权重。默认为常规 VAE。

capacityfloat,可选 (默认=0.0)

损失瓶颈的最大容量。

encoder_neuron_listlist,可选 (默认=[128, 64, 32])

编码器中每个隐藏层的神经元数量。因此编码器的结构为 [feature_size, 128, 64, 32, latent_dim]。

decoder_neuron_listlist,可选 (默认=[32, 64, 128])

解码器中每个隐藏层的神经元数量。因此解码器的结构为 [latent_dim, 32, 64, 128, feature_size]。

latent_dimint,可选 (默认=2)

潜在空间的维数。

hidden_activation_namestr, 可选 (默认=’relu’)

隐藏层中使用的激活函数。

output_activation_namestr,可选 (默认='sigmoid')

输出层使用的激活函数。

batch_normboolean,可选 (默认=False)

是否应用 Batch Normalization。详见 https://pytorch.ac.cn/docs/stable/generated/torch.nn.BatchNorm1d.html

dropout_ratefloat,范围 (0., 1),可选 (默认值=0.2)

所有层中使用的 Dropout。

属性

modeltorch.nn.Module

底层 VAE 模型。

optimizertorch.optim

用于训练模型的优化器。

criterionpython 函数

用于训练模型的损失函数。

decision_scores_numpy 数组,形状为 (n_samples,)

训练数据的异常值分数。分数越高表示越异常。异常值往往得分较高。此值在检测器拟合后可用。

threshold_float

阈值基于 contamination。它是 decision_scores_n_samples * contamination 个最异常样本的分数。计算此阈值是为了生成二元异常值标签。

labels_int,0 或 1

训练数据的二元标签。0 表示正常值,1 表示异常值/异常。它是通过将 threshold_ 应用于 decision_scores_ 生成的。

build_model()[source]

需要在此方法中定义模型。self.feature_size 是输入数据中的特征数量。

compute_rejection_stats(T=32, delta=0.1, c_fp=1, c_fn=1, c_r=-1, verbose=False)
为无监督检测器添加拒绝选项。

这伴随着保证:预期拒绝率的估计值 (return_rejectrate=True),拒绝率的上限 (return_ub_rejectrate= True),以及成本的上限 (return_ub_cost=True)。

参数

T: int,可选 (默认值=32)

它允许将拒绝阈值设置为 1-2exp(-T)。T 的值越高,拒绝越多。

delta: float,可选 (默认值 = 0.1)

拒绝率上限以概率 1-delta 成立。

c_fp, c_fn, c_r: float (正值),

可选 (默认值 = [1,1, contamination]) 对应于误报预测 (c_fp)、漏报预测 (c_fn) 和拒绝 (c_r) 的成本。

verbose: bool,可选 (默认值 = False)

如果为 True,则打印预期拒绝率、拒绝率上限和成本上限。

返回值

expected_rejection_rate: float,预期拒绝率;upperbound_rejection_rate: float,拒绝率上限

概率 1-delta 满足;

upperbound_cost: float,成本上限;

decision_function(X, batch_size=None)

使用已拟合的检测器预测 X 的原始异常分数。

输入样本的异常分数是基于不同的检测器算法计算的。为了保持一致性,异常值被赋予更高的异常分数。参数 ———- X:形状为 (n_samples, n_features) 的 numpy 数组

训练输入样本。仅当基础估计器支持时,才接受稀疏矩阵。

batch_sizeint, 可选 (默认=None)

处理输入样本的批次大小。如果未指定,则使用默认批次大小。

返回值

anomaly_scores形状为 (n_samples,) 的 numpy 数组

输入样本的异常分数。

decision_function_update(anomaly_scores)

在每次调用决策函数后执行的任何附加操作。

epoch_update()

在每个 epoch 后执行的任何附加操作。

evaluate(data_loader)

评估深度学习模型。

参数

data_loadertorch.utils.data.DataLoader

用于评估模型的数据加载器。

返回值

outlier_scores形状为 (n_samples,) 的 numpy 数组

输入样本的异常值分数。

evaluating_forward(batch_data)[source]

用于评估模型的前向传播。这是一个待实现的方法。

参数

batch_datatuple

用于评估模型的批量数据。

返回值

outputnumpy 数组

模型的输出。

evaluating_prepare()
fit(X, y=None)

拟合检测器。y 在无监督方法中被忽略。

参数

X形状为 (n_samples, n_features) 的 numpy 数组

输入样本。

y形状为 (n_samples,) 的 numpy 数组, 可选 (默认=None)

输入样本的真实标签。在无监督方法中不使用。

fit_predict(X, y=None)

首先拟合检测器,然后预测特定样本是否为异常值。y 在无监督模型中被忽略。

参数

X形状为 (n_samples, n_features) 的 numpy 数组

输入样本。

y已忽略

未使用,根据约定为了 API 一致性而存在。

返回值

outlier_labels形状为 (n_samples,) 的 numpy 数组

对于每个观测值,根据已拟合的模型判断是否应将其视为异常值。0 表示正常值,1 表示异常值。

自 0.6.9 版本起已弃用: fit_predict 将在 pyod 0.8.0 中移除;为了保持一致性,将替换为先调用 fit 函数,然后访问 labels_ 属性。

fit_predict_score(X, y, scoring='roc_auc_score')

拟合检测器,对样本进行预测,并使用预定义指标(例如 ROC)评估模型。

参数

X形状为 (n_samples, n_features) 的 numpy 数组

输入样本。

y已忽略

未使用,根据约定为了 API 一致性而存在。

scoringstr,可选 (默认值=’roc_auc_score’)

评估指标

  • ‘roc_auc_score’: ROC 分数

  • ‘prc_n_score’: Precision @ rank n 分数

返回值

score : float

自 0.6.9 版本起已弃用: fit_predict_score 将在 pyod 0.8.0 中移除;为了保持一致性,将替换为先调用 fit 函数,然后访问 labels_ 属性。评分可以通过调用评估方法(例如 AUC ROC)来完成。

get_params(deep=True)

获取此估计器的参数。

详见 https://scikit-learn.cn/stable/modules/generated/sklearn.base.BaseEstimator.html 和 sklearn/base.py 获取更多信息。

参数

deepbool,可选 (默认值=True)

如果为 True,将返回此估计器以及其中包含的作为估计器的子对象的参数。

返回值

params从字符串到任意类型的映射

参数名称与其值的映射。

classmethod load(path)

从指定路径加载模型。

参数

pathstr

加载模型的路径。

返回值

modelBaseDeepLearningDetector

加载的模型。

predict(X, return_confidence=False)

预测特定样本是否为异常值。

参数

X形状为 (n_samples, n_features) 的 numpy 数组

输入样本。

return_confidenceboolean,可选 (默认值=False)

如果为 True,则同时返回预测的置信度。

返回值

outlier_labels形状为 (n_samples,) 的 numpy 数组

对于每个观测值,根据已拟合的模型判断是否应将其视为异常值。0 表示正常值,1 表示异常值。

confidence形状为 (n_samples,) 的 numpy 数组。

仅当 return_confidence 设置为 True 时返回。

predict_confidence(X)

预测模型在稍微不同的训练集下做出相同预测的置信度。详情请参阅 [BPVD20]

参数

X形状为 (n_samples, n_features) 的 numpy 数组

输入样本。

返回值

confidence形状为 (n_samples,) 的 numpy 数组

对于每个观测值,表示如果在训练集受到扰动时模型会多么一致地做出相同的预测。返回一个概率,范围在 [0,1]。

predict_proba(X, method='linear', return_confidence=False)

预测样本为异常值的概率。有两种可能的方法

  1. 简单使用 Min-max 转换将异常值分数线性变换到 [0,1] 的范围。模型必须先拟合。

  2. 使用统一分数,详情请参阅 [BKKSZ11]

参数

X形状为 (n_samples, n_features) 的 numpy 数组

输入样本。

methodstr,可选 (默认值=’linear’)

概率转换方法。必须是 ‘linear’ 或 ‘unify’ 之一。

return_confidenceboolean,可选 (默认值=False)

如果为 True,则同时返回预测的置信度。

返回值

outlier_probability形状为 (n_samples, n_classes) 的 numpy 数组

对于每个观测值,根据已拟合的模型判断是否应将其视为异常值。返回异常值概率,范围在 [0,1]。注意,这取决于类别数量,默认情况下为 2 个类别 ([正常概率, 异常概率])。

predict_with_rejection(X, T=32, return_stats=False, delta=0.1, c_fp=1, c_fn=1, c_r=-1)
预测特定样本是否为异常值,

允许检测器拒绝 (即输出 = -2) 低置信度的预测。

参数

X形状为 (n_samples, n_features) 的 numpy 数组

输入样本。

Tint,可选 (默认值=32)

它允许将拒绝阈值设置为 1-2exp(-T)。T 的值越高,拒绝越多。

return_stats: bool,可选 (默认值 = False)

如果为 True,则同时返回三个附加的浮点值:估计拒绝率、拒绝率上限和成本上限。

delta: float,可选 (默认值 = 0.1)

拒绝率上限以概率 1-delta 成立。

c_fp, c_fn, c_r: float (正值),可选 (默认值 = [1,1, contamination])

误报预测 (c_fp)、漏报预测 (c_fn) 和拒绝 (c_r) 的成本。

返回值

outlier_labels形状为 (n_samples,) 的 numpy 数组

对于每个观测值,根据已拟合的模型判断是否应将其视为异常值。0 表示正常值,1 表示异常值,-2 表示拒绝。

expected_rejection_rate: float,如果 return_stats 为 True;upperbound_rejection_rate: float,如果 return_stats 为 True;upperbound_cost: float,如果 return_stats 为 True;

save(path)

将模型保存到指定路径。

参数

pathstr

保存模型的路径。

set_params(**params)

设置此估计器的参数。此方法适用于简单估计器和嵌套对象(例如管道)。嵌套对象的参数形式为 <component>__<parameter>,以便可以更新嵌套对象的每个组件。

详见 https://scikit-learn.cn/stable/modules/generated/sklearn.base.BaseEstimator.html 和 sklearn/base.py 获取更多信息。

返回值

self : object

train(train_loader)

训练深度学习模型。

参数

train_loadertorch.utils.data.DataLoader

用于训练模型的数据加载器。

training_forward(batch_data)[source]

模型训练的前向传播。需要实现抽象方法。

参数

batch_datatuple

用于训练模型的批次数据。

返回值

lossfloat 或 float 元组

模型的 loss.item,如果存在多个损失,则为 loss.item 元组。

training_prepare()

pyod.models.xgbod 模块

XGBOD: 使用无监督表征学习改进有监督异常值检测。一个半监督异常值检测框架。

class pyod.models.xgbod.XGBOD(estimator_list=None, standardization_flag_list=None, max_depth=3, learning_rate=0.1, n_estimators=100, silent=True, objective='binary:logistic', booster='gbtree', n_jobs=1, nthread=None, gamma=0, min_child_weight=1, max_delta_step=0, subsample=1, colsample_bytree=1, colsample_bylevel=1, reg_alpha=0, reg_lambda=1, scale_pos_weight=1, base_score=0.5, random_state=0, **kwargs)[source]

基础类: BaseDetector

XGBOD 类,用于异常值检测。它首先使用传入的无监督异常值检测器提取更丰富的数据表征,然后将新生成的特征与原始特征连接起来以构建增强特征空间。随后,在此增强特征空间上应用 XGBoost 分类器。详情请参阅 [BZH18]

参数

estimator_listlist,可选 (默认=None)

传入用于无监督学习的 pyod 检测器列表

standardization_flag_listlist,可选 (默认=None)

指示是否对每个检测器执行标准化的布尔标志列表。

max_depthint

基学习器的最大树深度。

learning_ratefloat

Boosting 学习率 (xgb 的 “eta”)

n_estimatorsint

要拟合的 Boosting 树数量。

silentbool

运行 Boosting 时是否打印消息。

objectivestring 或 callable

指定学习任务和相应的学习目标或要使用的自定义目标函数(参见下面的注释)。

boosterstring

指定要使用的 Booster:gbtree、gblinear 或 dart。

n_jobsint

运行 xgboost 使用的并行线程数。(替换 nthread

gammafloat

在树的叶节点上进行进一步划分所需的最小损失减少量。

min_child_weightint

子节点所需的实例权重(Hessian)的最小总和。

max_delta_stepint

允许每棵树的权重估计达到的最大 Delta 步长。

subsamplefloat

训练实例的子采样比例。

colsample_bytreefloat

构建每棵树时列的子采样比例。

colsample_bylevelfloat

在每个级别、每次分裂时列的子采样比例。

reg_alphafloat (xgb 的 alpha)

权重上的 L1 正则化项。

reg_lambdafloat (xgb 的 lambda)

权重上的 L2 正则化项。

scale_pos_weightfloat

正负权重的平衡。

base_score

所有实例的初始预测分数,全局偏置。

random_stateint

随机数种子。(替换 seed)

# missing : float, optional # Value in the data which needs to be present as a missing value. If # None, defaults to np.nan.

importance_type: string,默认 “gain”

feature_importances_ 属性的特征重要性类型:可以是 “gain”、“weight”、“cover”、“total_gain” 或 “total_cover”。

**kwargsdict,可选

XGBoost Booster 对象的关键字参数。参数的完整文档可以在这里找到:https://github.com/dmlc/xgboost/blob/master/doc/parameter.rst。尝试通过构造函数参数和 **kwargs 字典同时设置参数将导致 TypeError。

注意:scikit-learn 不支持 **kwargs。我们不保证通过此参数传递的参数将与 scikit-learn 正确交互。

属性

n_detector_int

使用的无监督检测器数量。

clf_object

XGBoost 分类器。

decision_scores_numpy 数组,形状为 (n_samples,)

训练数据的异常值分数。分数越高表示越异常。异常值往往得分较高。此值在检测器拟合后可用。

labels_int,0 或 1

训练数据的二元标签。0 表示正常值,1 表示异常值/异常。它是通过将 threshold_ 应用于 decision_scores_ 生成的。

compute_rejection_stats(T=32, delta=0.1, c_fp=1, c_fn=1, c_r=-1, verbose=False)
为无监督检测器添加拒绝选项。

这伴随着保证:预期拒绝率的估计值 (return_rejectrate=True),拒绝率的上限 (return_ub_rejectrate= True),以及成本的上限 (return_ub_cost=True)。

参数

T: int,可选 (默认值=32)

它允许将拒绝阈值设置为 1-2exp(-T)。T 的值越高,拒绝越多。

delta: float,可选 (默认值 = 0.1)

拒绝率上限以概率 1-delta 成立。

c_fp, c_fn, c_r: float (正值),

可选 (默认值 = [1,1, contamination]) 对应于误报预测 (c_fp)、漏报预测 (c_fn) 和拒绝 (c_r) 的成本。

verbose: bool,可选 (默认值 = False)

如果为 True,则打印预期拒绝率、拒绝率上限和成本上限。

返回值

expected_rejection_rate: float,预期拒绝率;upperbound_rejection_rate: float,拒绝率上限

概率 1-delta 满足;

upperbound_cost: float,成本上限;

decision_function(X)[source]

使用已拟合的检测器预测 X 的原始异常分数。

输入样本的异常分数基于已拟合的检测器计算。为了一致性,异常值被赋予更高的异常分数。

参数

X形状为 (n_samples, n_features) 的 numpy 数组

输入样本。只有当基础估计器支持稀疏矩阵时,才接受稀疏矩阵。

返回值

anomaly_scores形状为 (n_samples,) 的 numpy 数组

输入样本的异常分数。

fit(X, y)[source]

使用 X 和 y 作为训练数据拟合模型。

参数

X形状为 (n_samples, n_features) 的 numpy 数组

训练数据。

y形状为 (n_samples,) 的 numpy 数组

真实标签(二元标签)

  • 0 : 正常点

  • 1 : 异常点

返回值

self : object

fit_predict(X, y)[source]

首先拟合检测器,然后预测特定样本是否为异常值。y 在无监督模型中被忽略。

参数

X形状为 (n_samples, n_features) 的 numpy 数组

输入样本。

y已忽略

未使用,根据约定为了 API 一致性而存在。

返回值

outlier_labels形状为 (n_samples,) 的 numpy 数组

对于每个观测值,根据已拟合的模型判断是否应将其视为异常值。0 表示正常值,1 表示异常值。

自 0.6.9 版本起已弃用: fit_predict 将在 pyod 0.8.0 中移除;为了保持一致性,将替换为先调用 fit 函数,然后访问 labels_ 属性。

fit_predict_score(X, y, scoring='roc_auc_score')[source]

拟合检测器,对样本进行预测,并使用预定义指标(例如 ROC)评估模型。

参数

X形状为 (n_samples, n_features) 的 numpy 数组

输入样本。

y已忽略

未使用,根据约定为了 API 一致性而存在。

scoringstr,可选 (默认值=’roc_auc_score’)

评估指标

  • ‘roc_auc_score’: ROC 分数

  • ‘prc_n_score’: Precision @ rank n 分数

返回值

score : float

get_params(deep=True)

获取此估计器的参数。

详见 https://scikit-learn.cn/stable/modules/generated/sklearn.base.BaseEstimator.html 和 sklearn/base.py 获取更多信息。

参数

deepbool,可选 (默认值=True)

如果为 True,将返回此估计器以及其中包含的作为估计器的子对象的参数。

返回值

params从字符串到任意类型的映射

参数名称与其值的映射。

predict(X)[source]

预测特定样本是否为异常值。调用 xgboost predict 函数。

参数

X形状为 (n_samples, n_features) 的 numpy 数组

输入样本。

返回值

outlier_labels形状为 (n_samples,) 的 numpy 数组

对于每个观测值,根据拟合模型判断它是否应被视为异常值。0 代表正常点,1 代表异常值。

predict_confidence(X)

预测模型在稍微不同的训练集下做出相同预测的置信度。详情请参阅 [BPVD20]

参数

X形状为 (n_samples, n_features) 的 numpy 数组

输入样本。

返回值

confidence形状为 (n_samples,) 的 numpy 数组

对于每个观测值,表示如果在训练集受到扰动时模型会多么一致地做出相同的预测。返回一个概率,范围在 [0,1]。

predict_proba(X)[source]

预测样本为异常值的概率。调用 xgboost predict_proba 函数。

参数

X形状为 (n_samples, n_features) 的 numpy 数组

输入样本。

返回值

outlier_labels形状为 (n_samples,) 的 numpy 数组

对于每个观测值,根据拟合模型判断它是否应被视为异常值。返回异常值概率,范围在 [0,1] 之间。

predict_with_rejection(X, T=32, return_stats=False, delta=0.1, c_fp=1, c_fn=1, c_r=-1)
预测特定样本是否为异常值,

允许检测器拒绝 (即输出 = -2) 低置信度的预测。

参数

X形状为 (n_samples, n_features) 的 numpy 数组

输入样本。

Tint,可选 (默认值=32)

它允许将拒绝阈值设置为 1-2exp(-T)。T 的值越高,拒绝越多。

return_stats: bool,可选 (默认值 = False)

如果为 True,则同时返回三个附加的浮点值:估计拒绝率、拒绝率上限和成本上限。

delta: float,可选 (默认值 = 0.1)

拒绝率上限以概率 1-delta 成立。

c_fp, c_fn, c_r: float (正值),可选 (默认值 = [1,1, contamination])

误报预测 (c_fp)、漏报预测 (c_fn) 和拒绝 (c_r) 的成本。

返回值

outlier_labels形状为 (n_samples,) 的 numpy 数组

对于每个观测值,根据已拟合的模型判断是否应将其视为异常值。0 表示正常值,1 表示异常值,-2 表示拒绝。

expected_rejection_rate: float,如果 return_stats 为 True;upperbound_rejection_rate: float,如果 return_stats 为 True;upperbound_cost: float,如果 return_stats 为 True;

set_params(**params)

设置此估计器的参数。此方法适用于简单估计器和嵌套对象(例如管道)。嵌套对象的参数形式为 <component>__<parameter>,以便可以更新嵌套对象的每个组件。

详见 https://scikit-learn.cn/stable/modules/generated/sklearn.base.BaseEstimator.html 和 sklearn/base.py 获取更多信息。

返回值

self : object

模块内容

参考文献

[BAgg15] (1,2,3)

Charu C Aggarwal. 异常值分析。载于 Data mining,75–79 页。Springer, 2015。

[BAS15] (1,2)

Charu C Aggarwal 和 Saket Sathe。异常值集成算法的理论基础。ACM SIGKDD Explorations Newsletter, 17(1):24–47, 2015。

[BABC20]

Yahya Almardeny, Noureddine Boujnah, 和 Frances Cleary。一种新的多元数据异常值检测方法。IEEE Transactions on Knowledge and Data Engineering, 2020。

[BAP02]

Fabrizio Angiulli 和 Clara Pizzuti。高维空间中的快速异常值检测。载于 European Conference on Principles of Data Mining and Knowledge Discovery,15–27 页。Springer, 2002。

[BAAR96]

Andreas Arning, Rakesh Agrawal, 和 Prabhakar Raghavan。大型数据库中偏差检测的线性方法。载于 KDD, volume 1141, 972–981 页。1996。

[BBTA+18]

Tharindu R Bandaragoda, Kai Ming Ting, David Albrecht, Fei Tony Liu, Ye Zhu, 和 Jonathan R Wells。使用最近邻集成进行基于隔离的异常检测。Computational Intelligence, 34(4):968–998, 2018。

[BBirgeR06] (1,2)

Lucien Birgé 和 Yves Rozenholc。在一个常规直方图中应该放置多少个 bin。ESAIM: Probability and Statistics, 10:24–45, 2006。

[BBKNS00]

Markus M Breunig, Hans-Peter Kriegel, Raymond T Ng, and Jörg Sander. Lof: identifying density-based local outliers. In ACM sigmod record, volume 29, 93–104. ACM, 2000.

[BBHP+18] (1,2)

Christopher P Burgess, Irina Higgins, Arka Pal, Loic Matthey, Nick Watters, Guillaume Desjardins, and Alexander Lerchner. Understanding disentangling in betvae. arXiv preprint arXiv:1804.03599, 2018.

[BCoo77]

R Dennis Cook. Detection of influential observation in linear regression. Technometrics, 19(1):15–18, 1977.

[BFM01]

Kai-Tai Fang and Chang-Xing Ma. Wrap-around l2-discrepancy of random sampling, latin hypercube and uniform designs. Journal of complexity, 17(4):608–624, 2001.

[BGD12]

Markus Goldstein and Andreas Dengel. Histogram-based outlier score (hbos): a fast unsupervised anomaly detection algorithm. KI-2012: Poster and Demo Track, pages 59–63, 2012.

[BGHNN22]

Adam Goodge, Bryan Hooi, See-Kiong Ng, and Wee Siong Ng. Lunar: unifying local outlier detection methods via graph neural networks. In Proceedings of the AAAI Conference on Artificial Intelligence, volume 36, 6737–6745. 2022.

[BHR04]

Johanna Hardin and David M Rocke. Outlier detection in the multiple cluster setting using the minimum covariance determinant estimator. Computational Statistics & Data Analysis, 44(4):625–638, 2004.

[BHGPRR19]

Navid Hashemi, Eduardo Verdugo German, Jonatan Pena Ramirez, and Justin Ruths. Filtering approaches for dealing with noise in anomaly detection. In 2019 IEEE 58th Conference on Decision and Control (CDC), 5356–5361. IEEE, December 2019. URL: http://dx.doi.org/10.1109/CDC40024.2019.9029258, doi:10.1109/cdc40024.2019.9029258.

[BHXD03]

Zengyou He, Xiaofei Xu, and Shengchun Deng. Discovering cluster-based local outliers. Pattern Recognition Letters, 24(9-10):1641–1650, 2003.

[BHof07]

Heiko Hoffmann. Kernel pca for novelty detection. Pattern recognition, 40(3):863–874, 2007.

[BIH93]

Boris Iglewicz and David Caster Hoaglin. How to detect and handle outliers. Volume 16. Asq Press, 1993.

[BJHuszarPvdH12]

JHM Janssens, Ferenc Huszár, EO Postma, and HJ van den Herik. Stochastic outlier selection. Technical Report, Technical report TiCC TR 2012-001, Tilburg University, Tilburg Center for Cognition and Communication, Tilburg, The Netherlands, 2012.

[BKW13] (1,2)

Diederik P Kingma and Max Welling. Auto-encoding variational bayes. arXiv preprint arXiv:1312.6114, 2013.

[BKKSZ11] (1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41)

Hans-Peter Kriegel, Peer Kroger, Erich Schubert, and Arthur Zimek. Interpreting and unifying outlier scores. In Proceedings of the 2011 SIAM International Conference on Data Mining, 13–24. SIAM, 2011.

[BKKrogerSZ09]

Hans-Peter Kriegel, Peer Kröger, Erich Schubert, and Arthur Zimek. Outlier detection in axis-parallel subspaces of high dimensional data. In Pacific-Asia Conference on Knowledge Discovery and Data Mining, 831–838. Springer, 2009.

[BKZ+08]

Hans-Peter Kriegel, Arthur Zimek, and others. Angle-based outlier detection in high-dimensional data. In Proceedings of the 14th ACM SIGKDD international conference on Knowledge discovery and data mining, 444–452. ACM, 2008.

[BLLP07]

Longin Jan Latecki, Aleksandar Lazarevic, and Dragoljub Pokrajac. Outlier detection with kernel density functions. In International Workshop on Machine Learning and Data Mining in Pattern Recognition, 61–75. Springer, 2007.

[BLK05]

Aleksandar Lazarevic and Vipin Kumar. Feature bagging for outlier detection. In Proceedings of the eleventh ACM SIGKDD international conference on Knowledge discovery in data mining, 157–166. ACM, 2005.

[BLZB+20]

Zheng Li, Yue Zhao, Nicola Botta, Cezar Ionescu, and Xiyang Hu. COPOD: copula-based outlier detection. In IEEE International Conference on Data Mining (ICDM). IEEE, 2020.

[BLZH+22]

Zheng Li, Yue Zhao, Xiyang Hu, Nicola Botta, Cezar Ionescu, and H. George Chen. Ecod: unsupervised outlier detection using empirical cumulative distribution functions. IEEE Transactions on Knowledge and Data Engineering, 2022.

[BLTZ08]

Fei Tony Liu, Kai Ming Ting, and Zhi-Hua Zhou. Isolation forest. In Data Mining, 2008. ICDM'08. Eighth IEEE International Conference on, 413–422. IEEE, 2008.

[BLTZ12]

Fei Tony Liu, Kai Ming Ting, and Zhi-Hua Zhou. Isolation-based anomaly detection. ACM Transactions on Knowledge Discovery from Data (TKDD), 6(1):3, 2012.

[BLLZ+19] (1,2)

Yezheng Liu, Zhe Li, Chong Zhou, Yuanchun Jiang, Jianshan Sun, Meng Wang, and Xiangnan He. Generative adversarial active learning for unsupervised outlier detection. IEEE Transactions on Knowledge and Data Engineering, 2019.

[BPKGF03]

Spiros Papadimitriou, Hiroyuki Kitagawa, Phillip B Gibbons, and Christos Faloutsos. Loci: fast outlier detection using the local correlation integral. In Data Engineering, 2003. Proceedings. 19th International Conference on, 315–326. IEEE, 2003.

[BPVD20] (1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42)

Lorenzo Perini, Vincent Vercruyssen, and Jesse Davis. Quantifying the confidence of anomaly detectors in their example-wise predictions. In Joint European Conference on Machine Learning and Knowledge Discovery in Databases, 227–243. Springer, 2020.

[BPevny16]

Tomáš Pevn\`y. Loda: lightweight on-line detector of anomalies. Machine Learning, 102(2):275–304, 2016.

[BRRS00]

Sridhar Ramaswamy, Rajeev Rastogi, and Kyuseok Shim. Efficient algorithms for mining outliers from large data sets. In ACM Sigmod Record, volume 29, 427–438. ACM, 2000.

[BRD99]

Peter J Rousseeuw and Katrien Van Driessen. A fast algorithm for the minimum covariance determinant estimator. Technometrics, 41(3):212–223, 1999.

[BRVG+18]

Lukas Ruff, Robert Vandermeulen, Nico Görnitz, Lucas Deecke, Shoaib Siddiqui, Alexander Binder, Emmanuel Müller, and Marius Kloft. Deep one-class classification. International conference on machine learning, 2018.

[BSSeebockW+17]

Thomas Schlegl, Philipp Seeböck, Sebastian M Waldstein, Ursula Schmidt-Erfurth, and Georg Langs. Unsupervised anomaly detection with generative adversarial networks to guide marker discovery. In International conference on information processing in medical imaging, 146–157. Springer, 2017.

[BScholkopfPST+01]

Bernhard Schölkopf, John C Platt, John Shawe-Taylor, Alex J Smola, and Robert C Williamson. Estimating the support of a high-dimensional distribution. Neural computation, 13(7):1443–1471, 2001.

[BSCSC03]

Mei-Ling Shyu, Shu-Ching Chen, Kanoksri Sarinnapakorn, and LiWu Chang. A novel anomaly detection scheme based on principal component classifier. Technical Report, MIAMI UNIV CORAL GABLES FL DEPT OF ELECTRICAL AND COMPUTER ENGINEERING, 2003.

[BSB13]

Mahito Sugiyama and Karsten Borgwardt. Rapid distance-based outlier detection via sampling. Advances in neural information processing systems, 2013.

[BTCFC02]

Jian Tang, Zhixiang Chen, Ada Wai-Chee Fu, and David W Cheung. Enhancing effectiveness of outlier detections for low density patterns. In Pacific-Asia Conference on Knowledge Discovery and Data Mining, 535–548. Springer, 2002.

[BXPWW23]

Hongzuo Xu, Guansong Pang, Yijie Wang, and Yongjun Wang. Deep isolation forest for anomaly detection. IEEE Transactions on Knowledge and Data Engineering, ():1–14, 2023. doi:10.1109/TKDE.2023.3270293.

[BYRV17]

Chong You, Daniel P Robinson, and René Vidal. Provable self-representation based outlier detection in a union of subspaces. In Proceedings of the IEEE conference on computer vision and pattern recognition, 3395–3404. 2017.

[BZRF+18]

Houssam Zenati, Manon Romain, Chuan-Sheng Foo, Bruno Lecouat, and Vijay Chandrasekhar. Adversarially learned anomaly detection. In 2018 IEEE International conference on data mining (ICDM), 727–736. IEEE, 2018.

[BZH18]

Yue Zhao and Maciej K Hryniewicki. Xgbod: improving supervised outlier detection with unsupervised representation learning. In International Joint Conference on Neural Networks (IJCNN). IEEE, 2018.

[BZHC+21]

Yue Zhao, Xiyang Hu, Cheng Cheng, Cong Wang, Changlin Wan, Wen Wang, Jianing Yang, Haoping Bai, Zheng Li, Cao Xiao, Yunlong Wang, Zhi Qiao, Jimeng Sun, and Leman Akoglu. Suod: accelerating large-scale unsupervised heterogeneous outlier detection. Proceedings of Machine Learning and Systems, 2021.

[BZNHL19]

Yue Zhao, Zain Nasrullah, Maciej K Hryniewicki, and Zheng Li. LSCP: locally selective combination in parallel outlier ensembles. In Proceedings of the 2019 SIAM International Conference on Data Mining, SDM 2019, 585–593. Calgary, Canada, May 2019. SIAM. URL: https://doi.org/10.1137/1.9781611975673.66, doi:10.1137/1.9781611975673.66.