k-means 评分器¶
实现 k-means 聚类 的 k-means 评分器 [1]。
参考资料
- class darts.ad.scorers.kmeans_scorer.KMeansScorer(window=1, k=8, component_wise=False, window_agg=True, diff_fn=<function ae>, **kwargs)[source]¶
-
k-means 评分器
调用 fit(series) 时,会应用一个移动窗口,生成一组大小为 W 的向量,其中 W 是窗口大小。在此基础上训练 k-means 模型。 score(series) 函数应用相同的移动窗口,并返回每个大小为 W 的向量到其最近的 k 个中心点之一的距离。
或者,评分器提供了 fit_from_prediction() 和 score_from_prediction() 函数。两者都需要两个时间序列(实际值和预测值),并通过应用函数 diff_fn(默认为:绝对差)计算一个“差异”序列。然后将结果序列分别传递给 fit() 和 score() 函数。
component_wise 是一个布尔参数,指示模型应如何处理多元输入序列。如果设置为 True,模型将独立处理每个分量,为每个维度拟合不同的 k-means 模型。如果设置为 False,模型将在每个长度为 W 的窗口中连接维度,并仅使用一个底层的 k-means 模型计算分数。
使用 fit() 进行训练
输入可以是一个时间序列(单变量或多元)或多个时间序列。时间序列将被分成大小相等的子序列。每个子序列的大小为 W * D(特征),其中
W 是作为参数 window 给定的窗口大小
D 是时间序列的维度(如果为单变量或 component_wise 设置为 True,则 D = 1)
对于长度为 N 的时间序列,将生成 (N - W + 1) 个子序列。传递给底层评分器的最终数组 X 的形状为 (N - W + 1, W * D);换句话说就是(样本数,特征数)。如果给定了长度为 L 的时间序列列表,每个时间序列 i 将被分割,所有 X_i 将沿样本轴连接起来。
k-means 模型将基于生成的子序列进行拟合。模型将在维度等于子序列长度 (D * W) 的向量空间中找到 k 个聚类。
如果 component_wise 设置为 True,算法将独立应用于每个维度。对于每个维度,都会训练一个 k-means 模型。
使用 score() 计算分数
输入可以是一个时间序列(单变量或多元)或一系列时间序列。给定的时间序列必须具有与用于训练 k-means 模型的数据相同的维度 D。
对于每个时间序列,如果时间序列是维度为 D 的多元序列
如果 component_wise 设置为 False:它返回一个单变量序列(维度=1)。这表示在每个时间戳的考虑窗口内整个序列的异常分数。
如果 component_wise 设置为 True:它返回一个维度为 D 的多元序列。每个维度代表输入对应分量的异常分数。
如果时间序列是单变量的,无论参数 component_wise 如何,它都返回一个单变量序列。
一个大小为 W 的窗口以步长为 1 在时间序列上滑动。这与训练阶段使用的窗口大小 W 相同。因此,分数序列中的每个值表示前 W 个值的样本的异常程度。
- 参数
window (
int
) – 用于创建时间序列子序列的窗口大小。k (
int
) – KMeans 模型要形成的聚类数量以及生成的中心点数量。component_wise (
bool
) – 布尔值,指示是否需要独立计算每个分量的分数 (True),或者通过连接考虑窗口中的分量来计算一个分数 (False)。默认值: False。window_agg (
bool
) – 布尔值,指示每个时间步的异常分数是否通过平均包含该点的所有窗口的异常分数来计算。如果为 False,则每个点的异常分数是其尾随窗口的异常分数。默认值: True。diff_fn (
Callable
[…,Union
[float
,list
[float
],ndarray
,list
[ndarray
]]]) – 用于将预测序列和实际序列转换为一个序列的差分函数。然后将评分器应用于此序列。必须是 Darts 按时间步计算的指标之一(例如,ae()
表示绝对差,err()
表示差,se()
表示平方差,…)。默认情况下,使用绝对差(ae()
)。kwargs – 传递给内部 scikit-learn KMeans 模型(一个或多个)的附加关键字参数。
属性
评分器是否期望将概率预测作为第一个输入。
评分器是否可训练。
评分器是否为单变量评分器。
方法
eval_metric
(anomalies, series[, metric])计算给定时间序列的异常分数,并返回与阈值无关的指标分数。
eval_metric_from_prediction
(anomalies, ...)计算 series 和 pred_series 之间的异常分数,并返回与阈值无关的指标分数。
fit
(series)在给定的时间序列上拟合评分器。
fit_from_prediction
(series, pred_series)在两个(或一系列)时间序列上拟合评分器。
score
(series)计算给定时间序列的异常分数。
score_from_prediction
(series, pred_series)计算两个(或一系列)时间序列的异常分数。
show_anomalies
(series[, anomalies, ...])绘制评分器的结果。
show_anomalies_from_prediction
(series, ...)绘制评分器的结果。
- eval_metric(anomalies, series, metric='AUC_ROC')¶
计算给定时间序列的异常分数,并返回与阈值无关的指标分数。
- 参数
anomalies (
Union
[TimeSeries,Sequence
[TimeSeries]]]) – (一系列)真实标签二元异常序列(1 表示异常,0 表示非异常)。series (
Union
[TimeSeries,Sequence
[TimeSeries]]]) – 用于检测异常的(一系列)时间序列。metric (
Literal
[‘AUC_ROC’, ‘AUC_PR’]) – 要使用的指标函数名称。必须是 “AUC_ROC”(接收者操作特征曲线下面积)和 “AUC_PR”(分数平均精度)之一。默认值: “AUC_ROC”。
- 返回类型
Union
[float
,Sequence
[float
],Sequence
[Sequence
[float
]]]- 返回
float – 单变量 series 时间序列(只有一个分量/列)的单个分数/指标值。
Sequence[float] – 以下情况的分数序列(列表)
多元 series 时间序列(多个分量)。为每个分量提供一个分数。
单变量 series 时间序列的序列(列表)。为每个时间序列提供一个分数。
Sequence[Sequence[float]] – 多元 series 时间序列序列的分数序列的序列。为每个时间序列(外部序列)和分量(内部序列)提供一个分数。
- eval_metric_from_prediction(anomalies, series, pred_series, metric='AUC_ROC')¶
计算 series 和 pred_series 之间的异常分数,并返回与阈值无关的指标分数。
- 参数
anomalies (
Union
[TimeSeries,Sequence
[TimeSeries]]]) – (一系列)真实标签二元异常序列(1 表示异常,0 表示非异常)。series (
Union
[TimeSeries,Sequence
[TimeSeries]]]) – (一系列)实际时间序列。pred_series (
Union
[TimeSeries,Sequence
[TimeSeries]]]) – (一系列)预测时间序列。metric (
Literal
[‘AUC_ROC’, ‘AUC_PR’]) – 要使用的指标函数名称。必须是 “AUC_ROC”(接收者操作特征曲线下面积)和 “AUC_PR”(分数平均精度)之一。默认值: “AUC_ROC”。
- 返回类型
Union
[float
,Sequence
[float
],Sequence
[Sequence
[float
]]]- 返回
float – 单个单变量 series 的单个指标值。
Sequence[float] – 以下情况的指标值序列
单个多元 series。
单变量 series 序列。
Sequence[Sequence[float]] – 多元 series 序列的指标值序列的序列。外部序列对应时间序列,内部序列对应时间序列的分量/列。
- fit(series)¶
在给定的时间序列上拟合评分器。
如果输入是一系列时间序列,评分器将在这些序列的连接上进行拟合。
假设 series 通常不包含异常。
- 参数
series (
Union
[TimeSeries,Sequence
[TimeSeries]]]) – 不含异常的(一系列)时间序列。- 返回
已拟合的评分器。
- 返回类型
self
- fit_from_prediction(series, pred_series)¶
在两个(或一系列)时间序列上拟合评分器。
作为参数传递给评分器的函数 diff_fn 会将 pred_series 和 series 转换为一个时间序列。默认情况下,diff_fn 会计算绝对差(默认值:
ae()
)。如果 pred_series 和 series 是序列,diff_fn 将应用于序列中的所有成对元素。然后评分器将在此(一系列)时间序列上进行拟合。如果给定一系列时间序列,评分器将在这些序列的连接上进行拟合。
评分器假设(一系列)时间序列不含异常。
如果任何时间序列是随机的(n_samples>1),diff_fn 将在分位数 0.5 上计算。
- 参数
series (
Union
[TimeSeries,Sequence
[TimeSeries]]]) – (一系列)实际时间序列。pred_series (
Union
[TimeSeries,Sequence
[TimeSeries]]]) – (一系列)预测时间序列。
- 返回
已拟合的评分器。
- 返回类型
self
- property is_probabilistic: bool¶
评分器是否期望将概率预测作为第一个输入。
- 返回类型
bool
- property is_trainable: bool¶
评分器是否可训练。
- 返回类型
bool
- property is_univariate: bool¶
评分器是否为单变量评分器。
- 返回类型
bool
- score(series)¶
计算给定时间序列的异常分数。
如果给定一系列时间序列,评分器将独立地为每个序列评分,并为序列中的每个序列返回一个异常分数。
- 参数
series (
Union
[TimeSeries,Sequence
[TimeSeries]]]) – 用于检测异常的(一系列)时间序列。- 返回
异常分数时间序列(或序列)
- 返回类型
Union[TimeSeries, Sequence[TimeSeries]]
- score_from_prediction(series, pred_series)¶
计算两个(或一系列)时间序列的异常分数。
作为参数传递给评分器的函数 diff_fn 会将 pred_series 和 series 转换为一个“差异”序列。默认情况下,diff_fn 会计算绝对差(默认值:
ae()
)。如果 series 和 pred_series 是序列,diff_fn 将应用于序列中的所有成对元素。然后评分器会将此序列转换为异常分数。如果给定一系列时间序列,评分器将独立地为每个序列评分,并为序列中的每个序列返回一个异常分数。
- 参数
series (
Union
[TimeSeries,Sequence
[TimeSeries]]]) – (一系列)实际时间序列。pred_series (
Union
[TimeSeries,Sequence
[TimeSeries]]]) – (一系列)预测时间序列。
- 返回
异常分数时间序列(或序列)
- 返回类型
Union[TimeSeries, Sequence[TimeSeries]]
- show_anomalies(series, anomalies=None, scorer_name=None, title=None, metric=None, component_wise=False)¶
绘制评分器的结果。
计算给定时间序列输入的得分,并绘制结果。
- 图表将包含以下内容
时间序列本身。
评分器的异常分数。
实际异常(如果提供)。
- 可以
使用参数 title 为图表添加标题
使用 scorer_name 为评分器指定个性化名称
显示异常分数的指标结果(AUC_ROC 或 AUC_PR),
如果提供了实际异常。
- 参数
series (TimeSeries) – 要可视化异常的时间序列。
anomalies (
Optional
[TimeSeries,None
]) – (一系列)真实标签二元异常序列(1 表示异常,0 表示非异常)。scorer_name (
Optional
[str
,None
]) – 评分器的名称。title (
Optional
[str
,None
]) – 图表标题metric (
Optional
[Literal
[‘AUC_ROC’, ‘AUC_PR’],None
]) – 可选参数,要使用的指标函数名称。必须是 “AUC_ROC”(接收者操作特征曲线下面积)和 “AUC_PR”(分数平均精度)之一。默认值: “AUC_ROC”。component_wise (
bool
) – 如果为 True,将在多元异常检测情况下单独绘制每个分量。
- show_anomalies_from_prediction(series, pred_series, scorer_name=None, anomalies=None, title=None, metric=None, component_wise=False)¶
绘制评分器的结果。
计算两个时间序列的异常分数,并绘制结果。
- 图表将包含以下内容
时间序列和 pred_series。
评分器的异常分数。
实际异常(如果提供)。
- 可以
使用参数 title 为图表添加标题
使用 scorer_name 为评分器指定个性化名称
显示异常分数的指标结果(AUC_ROC 或 AUC_PR),如果提供了实际异常。
- 参数
series (TimeSeries) – 用于可视化异常的实际时间序列。
pred_series (TimeSeries) – series 的预测时间序列。
anomalies (
Optional
[TimeSeries,None
]) – 异常的真实标签(1 表示异常,0 表示非异常)scorer_name (
Optional
[str
,None
]) – 评分器的名称。title (
Optional
[str
,None
]) – 图表标题metric (
Optional
[Literal
[‘AUC_ROC’, ‘AUC_PR’],None
]) – 可选参数,要使用的指标函数名称。必须是 “AUC_ROC”(接收者操作特征曲线下面积)和 “AUC_PR”(分数平均精度)之一。默认值: “AUC_ROC”。component_wise (
bool
) – 如果为 True,将在多元异常检测情况下单独绘制每个分量。