Page 247 - 《软件学报》2020年第10期
P. 247

张伟  等:一种时间序列鉴别性特征字典构建算法                                                          3223


         1.5   特征选择阈值设定
             通过固定阈值进行特征选择忽略了不同长度滑动窗口生成的特征的分类性能,这会降低生成特征字典的
         的质量.为此,我们提出了一种动态阈值设定机制,该机制利用单一长度滑动窗口转换得到的特征字典对应的分
         类性能为其生成的特征设定阈值.首先,我们用交叉验证在单一长度滑动窗口转换得到的训练集上进行分类预
         测,假设获得的精度为 a;然后,基于该精度和最大精度的差值为其生成特征设定选择阈值.滑动窗口对应精度越
         高,则其特征选择阈值越小.函数 f(a)将某窗口长度精度映射为该窗口生成特征的阈值因子,定义如下:
                                              ⎧ 0,    a max  −  a ≤ 0.05
                                              ⎪      <    −
                                              ⎪ 0.1, 0.05 a max  a ≤  0.15
                                              ⎪ ⎪ 0.2, 0.15 a  −  a ≤ 0.25
                                                     <
                                         fa             max                                   (11)
                                         () = ⎨
                                                     <
                                              ⎪ 0.3, 0.25 a max  −  a ≤ 0.35
                                              ⎪ 0.4, 0.35 a  −  a ≤ 0.45
                                                     <
                                              ⎪         max
                                                      a
                                              ⎪ ⎩ 0.5, a max  −>  0.45
         其中,a max 为单一滑动窗口获得的最大交叉验证精度.
             下面我们给出不同长度窗口对应的阈值计算公式:
                                               δ  ( )=l  θ  ×  f  ( )a l                      (12)
         其中,θ为加权因子(θ>0),a l 为长度为 l 的滑动窗口对应的交叉验证精度.
             加权因子θ用于校正阈值因子存在的偏差.滑动窗口对应的交叉验证精度和最优值差距越大,则对应窗口
         生成特征的选择阈值越大,从而根据整体分类性能对特征进行选择可有效提升所建立的特征字典的有效性.
         2    算法设计

             本节对我们提出的特征字典构建算法进行详细介绍.

         2.1   滑动窗口最优单词长度学习算法
             各种特征包方法(BOP)的不同之处在于将实值序列转换为单词的具体过程.本文我们使用的数值序列离散
         化方法是 SFA    [22] .本文提出为每个窗口长度在指定范围内动态学习性能最优的单词长度.下面首先介绍本文提
         出的为每个窗口长度学习最优单词长度的算法.
             算法 1. computeBestWindowsF(D,min,max,minF,maxF,k).
             输入:训练集:D,最小和最大窗口长度:min 和 max,最小和最大傅里叶值个数:minF,maxF,交叉验证重数:k;
             输出:各窗口最优傅里叶值个数数组:bestWindowsF.
             1: int[] bestWindowsF=new int[max−min+1];
             2: int[][][] AF←supervisedSFA(D,min,max,minF,maxF);
             3: for i=0 to numWindows−1
             4:     int maxCorrect=0;
             5:    for j=minF to maxF
             6:        transformedData←transformedWithSingleWindow(AF,i,j)
             7:        int correct←crossVvalidation(transformedData,k)
             8:       if (correct>maxCorrect){
             9:          maxCorrect=correct;
             10:           bestWindowsF[i]=j;
             11:       }
             12:        j←j+1;
             13: return bestWindowsF
   242   243   244   245   246   247   248   249   250   251   252