动态时间扭曲输出的Java后处理

时间:2015-11-02 05:43:05

标签: java

我想使用DynamicTimeWarping(DTW)的输出进行分类。 事实证明,动态时间规整算法的输出仍然需要后处理。 作为时间对齐过程的一部分,数据A的某些单个数据点将映射到数据B上的多个数据点。 我计划将数据B上的那几个数据点的平均值映射到数据点的单个数据点。 最终输出将是针对相似性优化的数据之间的一对一映射数据点。 然后我将使用此最终输出进行分类。

以下是我目前的代码:

import java.io.*;
import java.util.*;

public class dtw_postprocess {

    public static void main(String[] args) throws IOException {
        File inFile = new File ("WarpPath.txt");
        Scanner sc = new Scanner (inFile);

        {
            int a[] = new int[600];
            while(sc.hasNextInt()) {
                int i=0;
                a[i]=sc.nextInt();
            }

            sc.close();
            File inFile2 = new File ("Data.txt");
            Scanner sc2 = new Scanner (inFile2);

            double[] b = new double[600];

            {
                int l=0;
                do {
                    b[l]=sc2.nextDouble();
                } while(sc2.hasNextDouble());   
            }

            sc.close(); sc2.close();


            File warped = new File("warpedOutput.txt");
            FileOutputStream fos_warped = new FileOutputStream(warped);
            BufferedWriter bw_warped = new BufferedWriter(new OutputStreamWriter(fos_warped));

            for (int m=0; m < a.length; m++){
                bw_warped.write((int) lookup(a,b));
                bw_warped.newLine();
            } 

            bw_warped.close();
        }
    }


    static double lookup (int[] a, double[] b){
        int i=0;
        while(a[i] == a[i+1] && a[i] != a[i+2] && a[i+1] != a[3]) {
            return b[i];
        }

        while(a[i] == a[i+1] && a[i] < a[i+2] && a[i+1] == a[3]) {
            double[] c = {a[i],a[i+1],a[i+2],a[i+3]};
            double d = kahanMean(c);
            return d;
        }

        while(a[i] == a[i+1] && a[i] == a[i+2] && a[i+1] < a[3]){
            return b[i-1];
        }
        return b[i];
    }

    static double kahanMean(double[] data) {
        double sum = 0, c = 0;
        int num = 0;
        for (double d : data) {
            ++num;
            double y = d - c;
            double t = sum + y;
            c = (t - sum) - y;
            sum = t;
        }

        return sum / num;
    }
}

输入将是两个文件, 数据A到数据B的变形路径,如下所示:[(0,0),(1,0),(2,0),(3,1),(4,1),(5,2)]

数据A,看起来像:

0.243333333
0.41
0.44
0.16
0.03
0.09

应该在warpedOutput.txt上写输出,但生成的输出文件是空白的。

0 个答案:

没有答案