Python 为什么";部分“U型配合”;方法所用的时间比;“适合”;方法

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的作用相同-它调用在线词

我正在玩scikit学习库的字典学习,我想基于一系列图像构建一个字典。我尝试使用
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)