TsFresh(TimeSeries Fresh)是一个Python第三方工具包。它可以方便地对时间序列数据进行处理,获得大量的特征。这些特征可以用以训练分类器,以高效地实现对时间序列数据的分类、识别等。然而,在工程实现时,更多地是采用Java等语言,这需要利用Java实现对TsFresh的特征进行直接计算,故需要对TsFresh的某些特征进行深入地分析,并在Java语言下实现。
特征index_mass_quantile简介
命令格式:index_mass_quantile(x, param)
计算时间序列的累积分布达到参数字典param中q值时的相对索引值。
参数:
- x:时间序列,数据类型:numpy.ndarray
- param:用字典
描述,其中y为float型数据,表示累积分布的门限值。数据类型:list
特征index_mass_quantile计算原理
1. 对时间序列x取绝对值,得x_abs
2. 对绝对值序列x_abs求和,得数据总和s
3. 对绝对值序列x_abs求其累积和,并利用s进行归一化,得时间序列的累积分布mass_centralized
4. 根据累积分布mass_centralized检索第一个达到q值的索引值,并计算该索引值在时间序列中的相对位置
Java实现
本特征计算相对简单,直接上代码
public static double index_mass_quantile(double[] x, double q) {
int n = x.length;
double[] x_abs = new double[n];
double s = 0;
double[] mass_centralized = new double[n];
for (int idx = 0; idx < n; idx++) {
x_abs[idx] = Math.abs(x[idx]);
s = s + x_abs[idx];
mass_centralized[idx] = s;
}
for (int idx = 0; idx < n; idx++) {
mass_centralized[idx] = mass_centralized[idx]/s;
}
// 查找首个累积比例超过q的索引值
int index = 0;
for (int idx = 0; idx < n; idx++) {
if (mass_centralized[idx] >= q) {
index = idx;
break;
}
}
// 计算相对索引值
double result = ((double)(index +1))/((double) n);
return result;
}