实用函数

pyod.utils.data 模块

用于数据处理的实用函数

pyod.utils.data.check_consistent_shape(X_train, y_train, X_test, y_test, y_train_pred, y_test_pred)[source]

用于检查输入数据形状是否一致的内部形状检查函数。

参数

X_trainnumpy 数组,形状为 (n_samples, n_features)

训练样本。

y_train列表或数组,形状为 (n_samples,)

训练样本的真实标签。

X_testnumpy 数组,形状为 (n_samples, n_features)

测试样本。

y_test列表或数组,形状为 (n_samples,)

测试样本的真实标签。

y_train_prednumpy 数组,形状为 (n_samples, n_features)

训练样本的预测二元标签。

y_test_prednumpy 数组,形状为 (n_samples, n_features)

测试样本的预测二元标签。

返回值

X_trainnumpy 数组,形状为 (n_samples, n_features)

训练样本。

y_train列表或数组,形状为 (n_samples,)

训练样本的真实标签。

X_testnumpy 数组,形状为 (n_samples, n_features)

测试样本。

y_test列表或数组,形状为 (n_samples,)

测试样本的真实标签。

y_train_prednumpy 数组,形状为 (n_samples, n_features)

训练样本的预测二元标签。

y_test_prednumpy 数组,形状为 (n_samples, n_features)

测试样本的预测二元标签。

pyod.utils.data.evaluate_print(clf_name, y, y_pred)[source]

用于评估和打印示例结果的实用函数。默认指标包括 ROC 和 Precision @ n

参数

clf_name字符串

检测器的名称。

y列表或 numpy 数组,形状为 (n_samples,)

真实标签。二元(0:正常点,1:离群点)。

y_pred列表或 numpy 数组,形状为 (n_samples,)

已拟合模型返回的原始离群值分数。

pyod.utils.data.generate_data(n_train=1000, n_test=500, n_features=2, contamination=0.1, train_only=False, offset=10, behaviour='new', random_state=None, n_nan=0, n_inf=0)[source]

用于生成合成数据的实用函数。正常数据由多元高斯分布生成,离群点由均匀分布生成。返回“X_train, X_test, y_train, y_test”。

参数

n_train整型,(默认=1000)

要生成的训练点数量。

n_test整型,(默认=500)

要生成的测试点数量。

n_features整型,可选(默认=2)

特征(维度)的数量。

contamination浮点型,取值范围 (0., 0.5),可选(默认=0.1)

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

train_only布尔型,可选(默认=False)

如果为 True,则只生成训练数据。

offset整型,可选(默认=10)

调整高斯分布和均匀分布的值范围。

behaviour字符串,默认=’new’

返回数据集的行为,可以是“old”或“new”。传递 behaviour='new' 返回“X_train, X_test, y_train, y_test”,而传递 behaviour='old' 返回“X_train, y_train, X_test, y_test”。

random_state整型、RandomState 实例或 None,可选(默认=None)

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

n_nan整型

缺失值 (np.nan) 的数量。默认为零。

n_inf整型

无穷大值 (np.inf) 的数量。默认为零。

返回值

X_trainnumpy 数组,形状为 (n_train, n_features)

训练数据。

X_testnumpy 数组,形状为 (n_test, n_features)

测试数据。

y_trainnumpy 数组,形状为 (n_train,)

训练真实标签。

y_testnumpy 数组,形状为 (n_test,)

测试真实标签。

pyod.utils.data.generate_data_categorical(n_train=1000, n_test=500, n_features=2, n_informative=2, n_category_in=2, n_category_out=2, contamination=0.1, shuffle=True, random_state=None)[source]

用于生成合成分类数据的实用函数。

参数

n_train整型,(默认=1000)

要生成的训练点数量。

n_test整型,(默认=500)

要生成的测试点数量。

n_features整型,可选(默认=2)

每个样本的特征数量。

n_informative整型,取值范围 (1, n_features),可选(默认=2)

离群点中的信息特征数量。这个值越大,离群点检测就越容易。请注意,n_informative 不应小于或等于 n_features。

n_category_in整型,取值范围 (1, n_inliers),可选(默认=2)

正常点中的类别数量。

n_category_out整型,取值范围 (1, n_outliers),可选(默认=2)

离群点中的类别数量。

contamination浮点型,取值范围 (0., 0.5),可选(默认=0.1)

数据集的污染程度,即数据集中离群点的比例。

shuffle: 布尔型,可选(默认=True)

如果为 True,正常点将被打乱,从而产生更嘈杂的分布。

random_state整型、RandomState 实例或 None,可选(默认=None)

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

返回值

X_trainnumpy 数组,形状为 (n_train, n_features)

训练数据。

y_trainnumpy 数组,形状为 (n_train,)

训练真实标签。

X_testnumpy 数组,形状为 (n_test, n_features)

测试数据。

y_testnumpy 数组,形状为 (n_test,)

测试真实标签。

pyod.utils.data.generate_data_clusters(n_train=1000, n_test=500, n_clusters=2, n_features=2, contamination=0.1, size='same', density='same', dist=0.25, random_state=None, return_in_clusters=False)[source]
用于生成聚类合成数据的实用函数。

生成的数据可能涉及低密度模式问题和全局离群点,这些被认为是离群点检测算法的难题。

参数

n_train整型,(默认=1000)

要生成的训练点数量。

n_test整型,(默认=500)

要生成的测试点数量。

n_clusters整型,可选(默认=2)

要生成的中心点(即聚类)数量。

n_features整型,可选(默认=2)

每个样本的特征数量。

contamination浮点型,取值范围 (0., 0.5),可选(默认=0.1)

数据集的污染程度,即数据集中离群点的比例。

size字符串,可选(默认=’same’)

每个聚类的大小:“same” 生成大小相同的聚类,“different” 生成大小不同的聚类。

density字符串,可选(默认=’same’)

每个聚类的密度:“same” 生成密度相同的聚类,“different” 生成密度不同的聚类。

dist: 浮点型,可选(默认=0.25)

聚类之间的距离。应在 0. 和 1.0 之间。用于尽可能避免聚类重叠。但是,如果样本数量和聚类数量过高,即使 dist 设置为 1.0,也难以完全分离它们。

random_state整型、RandomState 实例或 None,可选(默认=None)

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

return_in_clusters布尔型,可选(默认=False)

如果为 True,函数将返回 x_train, y_train, x_test, y_test,每个都是一个 numpy 数组列表,其中每个索引代表一个聚类。如果为 False,它将把聚类数组序列连接后返回 x_train, y_train, x_test, y_test,每个都是一个 numpy 数组。

返回值

X_trainnumpy 数组,形状为 (n_train, n_features)

训练数据。

y_trainnumpy 数组,形状为 (n_train,)

训练真实标签。

X_testnumpy 数组,形状为 (n_test, n_features)

测试数据。

y_testnumpy 数组,形状为 (n_test,)

测试真实标签。

pyod.utils.data.get_outliers_inliers(X, y)[source]

用于分离正常点和离群点的内部方法。

参数

Xnumpy 数组,形状为 (n_samples, n_features)

输入样本

y列表或数组,形状为 (n_samples,)

输入样本的真实标签。

返回值

X_outliersnumpy 数组,形状为 (n_samples, n_features)

离群点。

X_inliersnumpy 数组,形状为 (n_samples, n_features)

正常点。

pyod.utils.example 模块

用于运行示例的实用函数

pyod.utils.example.data_visualize(X_train, y_train, show_figure=True, save_figure=False)[source]

用于可视化 generate_data_cluster 函数生成的合成样本的实用函数。

参数

X_trainnumpy 数组,形状为 (n_samples, n_features)

训练样本。

y_train列表或数组,形状为 (n_samples,)

训练样本的真实标签。

show_figure布尔型,可选(默认=True)

如果设置为 True,则显示图表。

save_figure布尔型,可选(默认=False)

如果设置为 True,则将图表保存到本地。

pyod.utils.example.visualize(clf_name, X_train, y_train, X_test, y_test, y_train_pred, y_test_pred, show_figure=True, save_figure=False)[source]

用于可视化示例结果的实用函数。仅内部使用。

参数

clf_name字符串

检测器的名称。

X_trainnumpy 数组,形状为 (n_samples, n_features)

训练样本。

y_train列表或数组,形状为 (n_samples,)

训练样本的真实标签。

X_testnumpy 数组,形状为 (n_samples, n_features)

测试样本。

y_test列表或数组,形状为 (n_samples,)

测试样本的真实标签。

y_train_prednumpy 数组,形状为 (n_samples, n_features)

训练样本的预测二元标签。

y_test_prednumpy 数组,形状为 (n_samples, n_features)

测试样本的预测二元标签。

show_figure布尔型,可选(默认=True)

如果设置为 True,则显示图表。

save_figure布尔型,可选(默认=False)

如果设置为 True,则将图表保存到本地。

pyod.utils.stat_models 模块

统计模型集合

pyod.utils.stat_models.column_ecdf(matrix: ndarray) ndarray[source]

用于计算二维特征矩阵的列式经验累积分布函数(ECDF),其中行代表样本,列代表每个样本的特征。累积沿样本轴的正方向进行。

例如:p(1) = 0.2, p(0) = 0.3, p(2) = 0.1, p(6) = 0.4 ECDF E(5) = p(x <= 5) ECDF E 将是 E(-1) = 0, E(0) = 0.3, E(1) = 0.5, E(2) = 0.6, E(3) = 0.6, E(4) = 0.6, E(5) = 0.6, E(6) = 1

类似于并对照以下内容进行了测试:https://statsmodels.cn/stable/generated/statsmodels.distributions.empirical_distribution.ECDF.html

返回值

pyod.utils.stat_models.ecdf_terminate_equals_inplace(matrix: ndarray, probabilities: ndarray)[source]

这是一个用于计算数组 ECDF 的辅助函数。为了利用 numpy 的 njit 编译器提高速度,该函数从原始函数中分离出来,因为它不幸需要循环遍历矩阵的所有行和列。它在概率矩阵上进行原地操作。

参数

matrix : 一个特征矩阵,其中行是样本,每列是一个特征!(预期已排序!)

probabilities一个用于构建 ECDF 的概率矩阵。其值介于 0 和 1 之间且

也已排序。

返回值

pyod.utils.stat_models.pairwise_distances_no_broadcast(X, Y)[source]

用于计算两个矩阵行方向欧几里得距离的实用函数。与对偶计算不同,此函数不会广播。

例如,X 和 Y 都是 (4,3) 矩阵,函数将返回形状为 (4,) 的距离向量,而不是 (4,4)。

参数

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

第一个输入样本

Y数组,形状为 (n_samples, n_features)

第二个输入样本

返回值

distance数组,形状为 (n_samples,)

X 和 Y 的行方向欧几里得距离

pyod.utils.stat_models.pearsonr_mat(mat, w=None)[source]

用于计算皮尔逊矩阵(行方向)的实用函数。

参数

matnumpy 数组,形状为 (n_samples, n_features)

输入矩阵。

wnumpy 数组,形状为 (n_features,)

权重。

返回值

pear_matnumpy 数组,形状为 (n_samples, n_samples)

行方向皮尔逊分数矩阵。

pyod.utils.stat_models.wpearsonr(x, y, w=None)[source]

用于计算两个样本加权皮尔逊相关的实用函数。

更多信息请参阅 https://stats.stackexchange.com/questions/221246/such-thing-as-a-weighted-correlation

参数

x数组,形状为 (n,)

输入 x。

y数组,形状为 (n,)

输入 y。

w数组,形状为 (n,)

权重 w。

返回值

scores浮点型,取值范围 [-1,1]

x 和 y 之间的加权皮尔逊相关性。

pyod.utils.utility 模块

一组支持离群点检测的实用函数。

pyod.utils.utility.argmaxn(value_list, n, order='desc')[source]

如果 order 设置为 ‘desc’,则返回列表中前 n 个元素的索引,否则返回最小的 n 个元素的索引。

参数

value_list列表、数组或 numpy 数组,形状为 (n_samples,)

包含所有值的列表。

n整型

要选择的元素数量。

order字符串,可选(默认=’desc’)

排序顺序 {‘desc’, ‘asc’}

  • ‘desc’:降序

  • ‘asc’:升序

返回值

index_listnumpy 数组,形状为 (n,)

前 n 个元素的索引。

pyod.utils.utility.check_detector(detector)[source]

检查给定检测器是否存在 fit 和 decision_function 方法

参数

detectorpyod.models

执行检查的检测器实例。

pyod.utils.utility.check_parameter(param, low=-2147483647, high=2147483647, param_name='', include_left=False, include_right=False)[source]

检查输入是否在定义范围内。

参数

param整型,浮点型

要检查的输入参数。

low整型,浮点型

范围的下限。

high整型,浮点型

范围的上限。

param_name字符串,可选(默认=’’)

参数的名称。

include_left布尔型,可选(默认=False)

是否包含下限(下限 <=)。

include_right布尔型,可选(默认=False)

是否包含上限(<= 上限)。

返回值

within_range布尔型 或 引发错误

参数是否在 (low, high) 范围内

pyod.utils.utility.generate_bagging_indices(random_state, bootstrap_features, n_features, min_features, max_features)[source]

随机抽取特征索引。仅内部使用。

修改自 sklearn/ensemble/bagging.py

参数

random_stateRandomState

用于定义随机排列生成器状态的随机数生成器实例。

bootstrap_features布尔型

指定是否使用 bootstrap 生成索引

n_features整型

生成索引时指定总体大小

min_features整型

随机抽样特征数量的下限

max_features整型

随机抽样特征数量的上限

返回值

feature_indicesnumpy 数组,形状为 (n_samples,)

用于 bagging 的特征索引

pyod.utils.utility.generate_indices(random_state, bootstrap, n_population, n_samples)[source]

随机抽取样本索引。仅内部使用。

请参阅 sklearn/ensemble/bagging.py

参数

random_stateRandomState

用于定义随机排列生成器状态的随机数生成器实例。

bootstrap布尔型

指定是否使用 bootstrap 生成索引

n_population整型

生成索引时指定总体大小

n_samples整型

指定要抽取的样本数量

返回值

indicesnumpy 数组,形状为 (n_samples,)

随机抽取的索引

pyod.utils.utility.get_diff_elements(li1, li2)[source]

获取 li1 中存在但 li2 中不存在的元素,反之亦然

参数

li1列表或 numpy 数组

输入列表 1。

li2列表或 numpy 数组

输入列表 2。

返回值

difference列表

li1 和 li2 之间的差集。

pyod.utils.utility.get_intersection(lst1, lst2)[source]

获取两个列表之间的重叠部分

参数

li1列表或 numpy 数组

输入列表 1。

li2列表或 numpy 数组

输入列表 2。

返回值

difference列表

li1 和 li2 之间的重叠部分。

pyod.utils.utility.get_label_n(y, y_pred, n=None)[source]

通过将前 n 个离群点分数分配为 1,将原始离群点分数转换为二元标签的函数。

参数

y列表或 numpy 数组,形状为 (n_samples,)

真实标签。二元(0:正常点,1:离群点)。

y_pred列表或 numpy 数组,形状为 (n_samples,)

已拟合模型返回的原始离群值分数。

n整型,可选(默认=None)

离群点数量。如果未定义,则使用真实标签推断。

返回值

labelsnumpy 数组,形状为 (n_samples,)

二元标签 0:正常点,1:离群点

示例

>>> from pyod.utils.utility import get_label_n
>>> y = [0, 1, 1, 0, 0]
>>> y_pred = [0.1, 0.5, 0.3, 0.2, 0.7]
>>> get_label_n(y, y_pred)
array([0, 1, 0, 0, 1])
pyod.utils.utility.get_list_diff(li1, li2)[source]

获取 li1 中存在但 li2 中不存在的元素。li1-li2

参数

li1列表或 numpy 数组

输入列表 1。

li2列表或 numpy 数组

输入列表 2。

返回值

difference列表

li1 和 li2 之间的差集。

pyod.utils.utility.get_optimal_n_bins(X, upper_bound=None, epsilon=1)[source]

使用 Birge Rozenblac 方法确定直方图的最佳 bin 数量(详情参见 [BBirgeR06])。

参见 https://doi.org/10.1051/ps:2006001

参数

X数组类型,形状为 (n_samples, n_features)

用于确定最佳 bin 数量的样本。

upper_bound整型,默认=None

要考虑的 n_bins 最大值。如果设置为 None,则使用 np.sqrt(X.shape[0]) 作为上限。

epsilon浮点型,默认 = 1

添加到对数中的稳定项,以防止除以零。

返回值

optimal_n_bins整型

根据 Birge Rozenblac 方法得到的最佳 n_bins 值

pyod.utils.utility.invert_order(scores, method='multiplication')[source]

反转值列表的顺序。列表中最小的值在反转后变为最大。这在组合多个检测器时非常有用,因为它们的评分顺序可能不同。

参数

scores列表、数组或 numpy 数组,形状为 (n_samples,)

要反转的值列表

method字符串,可选(默认=’multiplication’)

用于顺序反转的方法。有效方法包括

  • ‘multiplication’:乘以 -1

  • ‘subtraction’:max(scores) - scores

返回值

inverted_scoresnumpy 数组,形状为 (n_samples,)

反转后的列表

示例

>>> scores1 = [0.1, 0.3, 0.5, 0.7, 0.2, 0.1]
>>> invert_order(scores1)
array([-0.1, -0.3, -0.5, -0.7, -0.2, -0.1])
>>> invert_order(scores1, method='subtraction')
array([0.6, 0.4, 0.2, 0. , 0.5, 0.6])
pyod.utils.utility.precision_n_scores(y, y_pred, n=None)[source]

用于计算 Precision @ rank n 的实用函数。

参数

y列表或 numpy 数组,形状为 (n_samples,)

真实标签。二元(0:正常点,1:离群点)。

y_pred列表或 numpy 数组,形状为 (n_samples,)

已拟合模型返回的原始离群值分数。

n整型,可选(默认=None)

离群点数量。如果未定义,则使用真实标签推断。

返回值

precision_at_rank_n浮点型

Precision at rank n 分数。

pyod.utils.utility.score_to_label(pred_scores, outliers_fraction=0.1)[source]

将原始离群点分数转换为二元标签(0 或 1)。

参数

pred_scores列表或 numpy 数组,形状为 (n_samples,)

原始离群点分数。假定离群点具有较大的值。

outliers_fraction浮点型,取值范围 (0,1)

离群点百分比。

返回值

outlier_labelsnumpy 数组,形状为 (n_samples,)

对于每个观测值,根据拟合模型判断它是否应被视为离群点。返回离群点概率,范围在 [0,1] 之间。

pyod.utils.utility.standardizer(X, X_t=None, keep_scalar=False)[source]

对数据进行 Z-标准化,使输入样本变为零均值和单位方差。

参数

Xnumpy 数组,形状为 (n_samples, n_features)

训练样本

X_tnumpy 数组,形状为 (n_samples_new, n_features),可选(默认=None)

要转换的数据

keep_scalar布尔型,可选(默认=False)

指示是否返回标量(scalar)的标志

返回值

X_normnumpy 数组,形状为 (n_samples, n_features)

Z-score 标准化后的 X

X_t_normnumpy 数组,形状为 (n_samples, n_features)

Z-score 标准化后的 X_t

scalarsklearn 标量(scalar)对象

转换中使用的标量(scalar)