目前我正在尝试在Python中找到特定行为的原因。
首先,我想描述一下我的用例。这个想法是对Python的性能分析。因此,我想分析关于"主成分分析" 算法的内存使用和运行时。为此,我使用scikit-learn(http://scikit-learn.org/stable/modules/generated/sklearn.decomposition.PCA.html)。
为了了解算法对不同数据集的行为,我生成了几个随机统一的分布式数据集。奇怪的是,内存使用量增加,两个数据集的运行时间更快。
现在我想解释一下,我将如何衡量内存使用情况和运行时间。 内存测量(包:https://pypi.python.org/pypi/memory_profiler)
时间测量(功能:https://docs.python.org/2/library/timeit.html)
在我执行了大约100次记忆测量和更多时间测量之后,我认识到了上述行为。 希望你能帮助我,找到这种行为的理由。
这是我测量的功能:
@profile
def pcaTrain(dataset):
model = sklearn_pca.fit(dataset)
model.variance = np.var(model.transform(dataset), axis=0, ddof=1)
return model
以下是内存使用情况和时间测量的一些图表:
Memory measurements for dataset 4-17
Runtime measurements for dataset 4-17
设置:
Python-version:3.5.2
记忆:> 100 GB
数据集列表:
dset04 - >每列1.000.000行(10个特征x 1.000.000)
dset05 - >每列1.000.000行(12个特征x 1.000.000)
dset06 - >每列1.000.000行(14个特征x 1.000.000)
dset07 - >每列1.000.000行(16个特征x 1.000.000)
dset08 - >每列1.000.000行(18个特征x 1.000.000)
dset09 - >每列1.000.000行(20个特征x 1.000.000)
dset10 - >每列1.000.000行(22个特征x 1.000.000)
dset11 - >每列1.000.000行(24个特征x 1.000.000)
dset12 - >每列1.000.000行(26个特征x 1.000.000)
dset13 - >每列1.000.000行(28个特征x 1.000.000)
dset14 - >每列1.000.000行(30个特征x 1.000.000)
dset15 - >每列1.000.000行(35个特征x 1.000.000)
dset16 - >每列1.000.000行(40个特征x 1.000.000)
dset17 - >每列1.000.000行(45个特征x 1.000.000)
答案 0 :(得分:0)
重要的问题是,你提取的功能有多少。
从Scikit-learn的0.18版本开始,PCA算法的svd_solver
标志决定使用哪种算法。
默认行为是选择" best"选择,在official documentation which you mentioned中有详细描述。
可能,其中一个选项会影响您的表现,具体取决于组件的数量。否则,我建议你在scikit-learn的官方GitHub中提到这种行为,因为这对他们来说也很有趣。