2011-06-11 62 views
0

如何将PCA应用于一维数组?PCA pca = new 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] + " "); 
     } 




    } 
} 
+0

PCA - 主成分分析?这是什么语言?直到你给我们更多继续,我们根本无法帮助你。 – I82Much 2011-06-11 20:00:44

+0

我使用comirva.util.PCA进行主成分分析,我们学习语音识别项目,我们必须减少音频的特征#,你能给一个示例代码吗? – sahini 2011-06-11 20:48:45

+0

我正在使用JAVA – sahini 2011-06-11 21:47:41

回答

0

您使用方法getPCATransformedDataAsDoubleArray的结果覆盖数据数组。我假设,这是一个包含20个条目的数组,因为构造函数arg。我不知道,为什么所有的值都是零,我想,因为它是在PCA类中定义的。

+0

我使用comirva.util.PCA进行主成分分析,我们研究了语音识别项目,我们必须减少音频的特征数量。你能给一个示例代码吗? – sahini 2011-06-11 20:38:23

2

主成分分析用于降低问题的维度。音频文件的尺寸是通道(例如左扬声器,右扬声器),而不是单个采样。在这种情况下,对于单声道音频流你确实只有一个维度。因此,您不会使用PCA减少样本的数量,但您可以减少音频中的频道的数量。但是你可以通过对每个通道上的采样进行平均,而无需使用PCA。所以除非你试图将立体声音频转换成单声道,否则我认为你需要采取不同的方法解决你的问题。

+0

一个auido文件给出了600个特征,我怎样才能将它减少到20. – sahini 2011-06-11 21:17:49

+0

@sahini当你谈到20个特征时,你是指倒谱系数? – kamaci 2012-12-04 10:07:11