Python 为什么";部分“U型配合”;方法所用的时间比;“适合”;方法
我正在玩scikit学习库的字典学习,我想基于一系列图像构建一个字典。我尝试使用Python 为什么";部分“U型配合”;方法所用的时间比;“适合”;方法,python,scikit-learn,Python,Scikit Learn,我正在玩scikit学习库的字典学习,我想基于一系列图像构建一个字典。我尝试使用MiniBatchDictionaryLearning的partial\u-fit方法,并注意到它比fit花费的时间要长得多。我的代码外观(以lena为例): 这需要很长时间才能完成,而如果我用fit替换partial\u fit。。。这需要几秒钟 (我已经学习了scikit 15.2) 这是为什么呢?这很可能是因为部分拟合旨在对小批量数据进行调用 方法fit实际上与partial\u-fit的作用相同-它调用在线词
MiniBatchDictionaryLearning
的partial\u-fit
方法,并注意到它比fit
花费的时间要长得多。我的代码外观(以lena为例):
这需要很长时间才能完成,而如果我用fit
替换partial\u fit
。。。这需要几秒钟
(我已经学习了scikit 15.2)
这是为什么呢?这很可能是因为
部分拟合
旨在对小批量数据进行调用
方法fit
实际上与partial\u-fit
的作用相同-它调用在线词典学习功能。不同之处在于,fit
使用对象构造时指示的批量大小,默认情况下为3,而partial\u-fit
可以处理您提供的完整数据(如果提供的样本太多,这可能需要很长时间。partial\u-fit
不适用于此)
是函数,所以您可以看看发生了什么。我当时更改了此批大小,但这没有帮助。它不会--
partial\u fit
始终使用整个数据,因为它将其视为一个批。您可以做的是在数据中循环小批,例如xrange(0,len(数据),3)中的I的:dico.partial\u fit(数据[i:i+3])
(但是,在这种情况下,您显然应该更喜欢fit
)似乎您的循环解决方案仍然比fit慢得多。我想知道这是为什么。您的“在那种情况下更喜欢fit”是什么意思?在您的循环示例中?我似乎无法理解这一点。
import numpy as np
from scipy.misc import lena
from sklearn.decomposition import MiniBatchDictionaryLearning
from sklearn.feature_extraction.image import extract_patches_2d
lena = lena()
lena = lena[::2, ::2] + lena[1::2, ::2] + lena[::2, 1::2] + lena[1::2, 1::2]
height, width = lena.shape
patch_size = (7, 7)
data = extract_patches_2d(lena, patch_size)
data = data.reshape(data.shape[0], -1)
dico = MiniBatchDictionaryLearning(n_components=100, n_iter=500,transform_algorithm ='lars', alpha=1,transform_n_nonzero_coefs=5,verbose=1)
dicObj = dico.partial_fit(data)