PCA pca = новый PCA - PullRequest
       4

PCA pca = новый PCA

0 голосов
/ 11 июня 2011

Как мы можем применить PCA к одномерному массиву?

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] + " ");
        }




   }
}

Ответы [ 2 ]

2 голосов
/ 12 июня 2011

Анализ главных компонентов используется для уменьшения размерности вашей проблемы.Размеры аудиофайла - это каналы (например, левый динамик, правый динамик), а не отдельные сэмплы.В этом случае у вас действительно есть только одно измерение для монофонического аудиопотока.Таким образом, вы не собираетесь уменьшать количество сэмплов с помощью PCA, но вы можете уменьшить количество каналов в аудио.Но вы можете сделать это без PCA, просто усреднив выборки по каждому каналу.Поэтому, если вы не пытаетесь конвертировать стереозвук в моно, я думаю, что вам нужен другой подход к вашей проблеме.

0 голосов
/ 12 июня 2011

Вы перезаписываете массив данных результатом метода getPCATransformedDataAsDoubleArray.Я предполагаю, что это массив с 20 записями из-за конструктора arg.Я не знаю, почему все значения равны нулю, я думаю, потому что это определено в классе PCA.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...