目前,我正试图找出Python中某个特定行为的原因。你知道吗
首先我想描述一下我的用例。其思想是对Python进行性能分析。因此,我想分析内存使用量和运行时关于“主成分分析”-算法。为此,我使用sciketlearn(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版本: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)
重要的问题是,要提取多少特性。 由于sciket learn的版本为0.18,PCA算法的
svd_solver
标志决定使用哪种算法。默认行为是选择“最佳”选项,这在official documentation which you mentioned中有详细描述。
根据组件的数量,其中一个选择可能会影响您的性能。否则,我建议您在sciketlearn的官方GitHub中提及此行为,因为这对他们来说也可能很有趣。你知道吗
相关问题 更多 >
编程相关推荐