Python 在sklearn.decomposition.DictionaryLearning中拟合变换输出与组件
我试图理解fit_transform方法和sklearn.decomposition.DictionaryLearning中的组件数组返回的值 从it-Seeken fit_transform返回稀疏表示的输入数据和包含原子的组件 我使用以下代码对数字数据集运行了sklearn.decomposition.DictionaryLearning:Python 在sklearn.decomposition.DictionaryLearning中拟合变换输出与组件,python,scikit-learn,feature-extraction,dimensionality-reduction,feature-engineering,Python,Scikit Learn,Feature Extraction,Dimensionality Reduction,Feature Engineering,我试图理解fit_transform方法和sklearn.decomposition.DictionaryLearning中的组件数组返回的值 从it-Seeken fit_transform返回稀疏表示的输入数据和包含原子的组件 我使用以下代码对数字数据集运行了sklearn.decomposition.DictionaryLearning: sample_data=digits.data[:40,:] dl = DictionaryLearning(n_components=36,
sample_data=digits.data[:40,:]
dl = DictionaryLearning(n_components=36, fit_algorithm='lars', transform_algorithm='lasso_lars')
X_dict = dl.fit_transform(sample_data)
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()
当我使用以下代码绘制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')
这就是我得到的:
当我使用以下代码绘制组件(应打印原子)的内容时:
sample_data=digits.data[:40,:]
dl = DictionaryLearning(n_components=36, fit_algorithm='lars', transform_algorithm='lasso_lars')
X_dict = dl.fit_transform(sample_data)
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()
这就是我得到的:
现在我的问题是,这是正确的吗?从我对字典学习的理解来看,我觉得第一个图像看起来更像原子,而后者看起来更像转换后的输入
谁能解释一下原子和转换数据之间的区别,告诉我这些图像中的哪个是哪个