Page 250 - 《软件学报》2020年第10期
P. 250
3226 Journal of Software 软件学报 Vol.31, No.10, October 2020
输出:鉴别性特征字典:TfIdfDict.
1: TfIdfDict←∅
2: threhlodFactors[]←f(corrects)
3: thresholds[]←generateThresholdsOfAllWindows(threhlodFactors,θ)
4: e i is the ith element in dict
5: for i=0 to |dict|−1
6: double t←computeTfIdf(e i )
7: int index←getWindowIndex(e i )
8: double threshold←threhlods[index]
9: if (t≥threshold)
10: TfIdfDict.add(e i )
11: return TfIdfDict
算法 5 介绍了本文使用的特征字典建立算法.首先计算各滑动窗口生成特征的选择阈值(第 2 行~第 3 行).
然后,遍历字典 dict 中的每个特征(第 4 行),计算特征的 d(t,c)值(第 6 行),然后将 d(t,c)值大于等于其所对应的窗
口阈值的特征加入到鉴别性特征字典 TfIdfDict 中(第 9 行~第 10 行).
综上所述,算法 1 最优参数学习和算法 4 特征库构建是本文模型的主要构成部分.因此,本文通过动态阈值
3
构建变长特征字典模型的时间复杂度为 O(maximum(N×n logn,max×maxF×k×T(n))),其中,T(n)为参数学习过程
中使用的分类模型算法复杂度.
2.4 基于特征字典的时间序列转换表示
这节我们给出基于 SFA 的 BOP 模型中用于训练集和测试集中实例转换的算法 [24] .这一过程主要分为两步:
首先,在训练集上利用某长度得到的所有不重叠子序列为每个窗口长度训练用于时间序列转换的监督符号傅
里叶近似转换对象,训练转换对象主要是为了计算滑动窗口子序列每个位置的 F 值(算法 2)和用于将傅里叶值
数组进行离散化的分箱区间(文献[23]中有详细介绍);然后,用训练得到的转换对象对时间序列进行转换 [24] .下
面我们给出时间序列的转换算法.
算法 6. SupervisedSFATransform(TfIdfDict,T,min,max,transferObjects[]).
输入:鉴别性特征字典:TfIdfDict;要转换的实例:T;最小和最大窗口长度:min,max;各滑动窗口训练得到的
SFA 转换对象:transferObjects[];
输出:转换后实例:transformed.
1: transformedT←∅
2: for l=min to max
3: for i=0 to |T|−l
4: word←transferObjects[l−min].sequenceTransform(T(i,l))
5: if (TfIdfDict.contain(word))
6: transformedT.add(word)
7: return transformedT
算法 6 给出了将一条时间序列转换为符号序列频数数组的算法.该算法用指定长度滑动窗口从给定时间
序列的初始位置进行滑动依次获得一系列可重叠的子序列(第 2 行~第 3 行),然后通过对应长度的监督符号傅里
叶近似转换对象将每个子时间序列依次转换成一个单词,即,时间序列包含的特征(第 4 行).若转换得到的特征
在给定的鉴别性特征字典中,则将该特征加入到转换后的实例中,作为转换后实例的一个特征(第 5 行~第 6 行).
此时,若转换后的实例中没有该特征,则为转换实例加入该特征,并将该特征的取值设为 1;若转换后的实例中已
有该特征,则该特征对应的值加 1.最后返回获得的特征频数序列,即为转换得到的时间序列.
逻辑回归(logistic regression)是统计学中的经典分类方法.它是一个对数线性模型.本文我们使用基于 L2