【发布时间】:2015-07-17 11:52:47
【问题描述】:
我使用 numpy 存储了以下数据集: https://www.dropbox.com/sh/ppseiv9skqlhljr/AACQEWZh11oszL5-Z_NHqre3a?dl=0
数据集的训练和开发分区有不同的numpy文件
[50,1,396]
我正在使用 mlpy 库中的 PCA Fast 来执行降维。但是整个过程太慢了,我不知道为什么。 在执行 PCA 之前,我将数据集转换为以下形状:
[50,396]
所以数据集的形状不是我的问题的原因。
我使用的代码如下:
import os
import numpy as np
import sys
import csv
import mlpy
inputfiletrain=''
outputfiletrain=''
inputfiledev=''
outputfiledev=''
def parseCommandLineArgs():
global inputfiletrain
global outputfiletrain
global inputfiledev
global outputfiledev
for i in range(0, len(sys.argv)):
if sys.argv[i] == 'inputfiletrain':
inputfiletrain = sys.argv[i + 1]
print
print "------*****Using Directory :*****------"
print 'inputfiletrain=' + inputfiletrain
print "------**********************------"
print
if sys.argv[i] == 'outputfiletrain':
outputfiletrain = sys.argv[i + 1]
print
print "------*****Using Directory :*****------"
print 'outputfiletrain=' + outputfiletrain
print "------**********************------"
print
if sys.argv[i] == 'inputfiledev':
inputfiledev = sys.argv[i + 1]
print
print "------*****Using Directory :*****------"
print 'inputfiledev=' + inputfiledev
print "------**********************------"
print
if sys.argv[i] == 'outputfiledev':
outputfiledev = sys.argv[i + 1]
print
print "------*****Using outputFeatures Filename :*****------"
print 'outputfiledev=' + outputfiledev
print "------**********************------"
print
def pcaDimRed(features, nDims):
X=np.empty([features.shape[0], features.shape[2]])
print features.shape[2]
print X.shape
for i,f in enumerate(features):
#np.append(X,f[0],axis=0)
X[i]=f[0]
#np.vstack(X)
print X
print "PCAStarting"
#pca = mlpy.PCA(method='cov')
pca= mlpy.PCAFast(k=nDims, eps=0.1)
pca.learn(X)
coeff = pca.coeff()
coeff = coeff[:,0:nDims]
print "PCAEnding"
featuresNew = []
for f in X:
ft = f.copy()
# ft = pca.transform(ft, k=nDims)
ft = np.dot(f, coeff)
featuresNew.append(ft)
thodwrisformat = np.empty((len(files), 1, mean.shape[0]))
for i,f in enumerate(featuresNew):
thodwrisformat[i][0]=f
return (thodwrisformat, coeff)
def pcaDevelopmentSet(features, nDims,coeff):
featuresNew = []
for f in features:
ft = f.copy()
# ft = pca.transform(ft, k=nDims)
ft = np.dot(f, coeff)
featuresNew.append(ft)
return featuresNew
parseCommandLineArgs()
print inputfiledev
FeaturesDev = np.load(inputfiledev)
FeaturesTrain = np.load(inputfiletrain)
PCATrain=pcaDimRed(FeaturesTrain,68)
FeaturesTrain=PCATrain[1]
coeff=PCATrain[2]
FeaturesDev=pcaDevelopmentSet(FeaturesDev, 68,coeff)
np.save(outputfiledev,FeaturesDev)
np.save(outputfiletrain,FeaturesTrain)
我在 ubuntu linux 和 python 2.7 下使用这个代码。要安装 mlpy,必须使用以下命令:
wget http://sourceforge.net/projects/mlpy/files/mlpy%203.5.0/mlpy-3.5.0.tar.gz
tar xvf mlpy-3.5.0.tar.gz
cd mlpy-3.5.0
sudo python setup.py install
最后要运行此代码,假设脚本存储为 pca.py,并且它与包含数据集分区的目录 feature_vectors 所在的文件夹位于同一文件夹中,必须使用以下命令:
python pca.py inputfiletrain feature_vectors/train/featuresShape.npy outputfiletrain feature_vectors/train/featuresShapePCA.npy inputfiledev feature_vectors/development/featuresShape.npy outputfiledev feature_vectors/development/featuresShapePCA.npy
我需要想法,为什么 PCA 在这个数据集上这么慢...
【问题讨论】:
-
是什么让你认为这个操作应该更快?您是否有证据表明它对于不同但大小相当的数据集更快?还是在不同的情况下?
-
是的,他们在 mlpy 项目的文档中提供的快速 pca 示例会生成大小为 (100,100) 的随机矩阵,这些矩阵的处理速度要快得多...mlpy.sourceforge.net/docs/3.2/dim_red.html
-
@obelix 但这是一个更大的 50x396 矩阵! 19800 与 10.000。而且你没有提到你是如何测量牢度的:每个时期还是每个批次?
-
每小时让我的笔记本电脑运行算法...尽管它应该以更合乎逻辑的时间结束...我已经让我的笔记本电脑保持清醒状态超过 8 小时并且该过程已经未完成...
-
还有例子100x100的速度?