0

PCA を 1 次元配列に適用するにはどうすればよいでしょうか?

double[][] data = new double [1][600]; 
PCA pca = new PCA(data, 20);
data = pca.getPCATransformedDataAsDoubleArray();

データ配列の値を出力すると、データ配列の特徴は 600 から 20 に減少しますが、すべての値がゼロになります。

なんで?

package VoiceRecognation;

import Jama.Matrix;
import comirva.data.DataMatrix;
import comirva.util.PCA;


import javax.print.attribute.standard.Finishings;
import java.io.File;

/**
 * Created by IntelliJ IDEA.
 * User: SAHIN
 * Date: 11.06.2011
 * Time: 19:33
 * To change this template use File | Settings | File Templates.
 */
public class Deneme {
    public static void main(String[] args) {

        int[] group = Groups.getGroups();
        File[] files = Files.getFiles();
        double[][] data = FindMfccOfFiles.findMFCCValuesOfFiles(files);
        PCA pca = new PCA(data, 20);
        data = pca.getPCATransformedDataAsDoubleArray();


        File file = new File("src/main/resources/Karisik/E-Mail/(1).wav");
        double[] testdata = MFCC.getMFCC(file);

        double[][] result = new double[1][600];
        result[0] = testdata;

        PCA p = new PCA(result, 20);
        double [][] sum = p.getPCATransformedDataAsDoubleArray();
        for (int i = 0; i < sum[0].length; i++) {
            System.out.print(sum[0][i] + " ");
        }




   }
}
4

2 に答える 2

3

主成分分析は、問題の次元を削減するために使用されます。オーディオ ファイルのサイズは、個々のサンプルではなく、チャネル (左のスピーカー、右のスピーカーなど) です。その場合、モノラル オーディオ ストリームのディメンションは 1 つしかありません。したがって、 PCA を使用してサンプル数を減らすつもりはありませんが、オーディオのチャンネル数を減らすことはできます。ただし、各チャネルのサンプルを平均するだけで、PCA なしでそれを行うことができます。したがって、ステレオ オーディオをモノラルに変換しようとしている場合を除き、問題に対して別のアプローチが必要だと思います。

于 2011-06-11T21:08:24.630 に答える
0

メソッド getPCATransformedDataAsDoubleArray の結果でデータ配列を上書きします。コンストラクタ arg のため、これは 20 個のエントリを持つ配列であると思います。クラス PCA で定義されているため、なぜすべての値がゼロなのかわかりません。

于 2011-06-11T20:00:56.993 に答える