我正在玩scikit-learn库的字典学习,我想根据一系列图像构建一个字典。我尝试使用partial_fit
的{{1}}方法,并注意到它比MiniBatchDictionaryLearning
花了更长的时间。我的代码看起来如何(使用lena的例子):
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)
替换为partial_fit
......则需要几秒钟。
(我有scikit-learn 15.2)
为什么会这样?
答案 0 :(得分:0)
这很可能是因为partial_fit
旨在调用小批量数据。
方法fit
实际上和partial_fit
一样 - 它调用在线字典学习功能。区别在于fit
使用对象构造中指示的批处理大小,默认情况下为3,而partial_fit
对您提供的完整数据起作用(如果您提供的话,这可能需要很长时间)许多样本。partial_fit
不是为此而制作的。
Here是函数,因此您可以查看发生的情况。