fit_transform输出vs组件_在sklearn.decomposition.DictionaryLearning中

时间:2019-02-25 06:58:29

标签: python scikit-learn feature-extraction dimensionality-reduction feature-engineering

我试图了解sklearn.decomposition.DictionaryLearning中的fit_transform方法和components_数组返回的值。

documentation中,fit_transform似乎返回了稀疏表示的输入数据,而components_包含了原子。

我使用以下代码对digits数据集运行了sklearn.decomposition.DictionaryLearning:

sample_data=digits.data[:40,:]    
dl = DictionaryLearning(n_components=36, fit_algorithm='lars', transform_algorithm='lasso_lars')
    X_dict = dl.fit_transform(sample_data) 

当我使用以下代码绘制由fit_transform返回的X_dict(根据文档,它是转换后的输入数据)时:

fig = plt.figure(figsize=(6, 6))
for i in range(36):
    ax = fig.add_subplot(6, 6, i + 1, xticks=[], yticks=[])
    ax.imshow(X_dict.reshape(-1, 6, 6)[i], cmap='Greys_r',
              interpolation='nearest') 

这是我得到的: enter image description here

当我使用以下代码绘制components_(应打印原子)的内容时:

fig, ax = plt.subplots(6, 6, figsize=(8, 8))

samples = [dl.components_[x].reshape((8, 8)) for x in range(34)]

for i in range(6):
    for j in range(6):
        ax[i, j].set_axis_off()
        ax[i, j].imshow(samples[(i * 5) + j], cmap='gray')

plt.show()

这就是我得到的:

enter image description here

现在我的问题是,这正确吗?从我对字典学习的理解来看,我觉得第一个图像看起来更像原子,而第二个图像更像是转换后的输入。

有人可以解释一下原子和转换后的数据之间的区别,然后告诉我这些图像中的哪幅是哪幅吗?

0 个答案:

没有答案