我有一个大小为 (800,800,4) 的 python numpy 数组,这是我的高光谱相机数据。
当我尝试来自 scikit-learn 的标准 GMM 方法时,我收到一条错误消息,指出数据的预期维度应小于或等于 2。
当前方法:
gmm=GaussianMixture(covariance_type="full")
gmm=gmm.fit(数据)
是否有任何 python 包或函数可用于使用 gmm 处理更高维数据?
我有一个大小为 (800,800,4) 的 python numpy 数组,这是我的高光谱相机数据。
当我尝试来自 scikit-learn 的标准 GMM 方法时,我收到一条错误消息,指出数据的预期维度应小于或等于 2。
当前方法:
gmm=GaussianMixture(covariance_type="full")
gmm=gmm.fit(数据)
是否有任何 python 包或函数可用于使用 gmm 处理更高维数据?
如果我正确理解您的数据类型,那么您所拥有的本质上是一个图像像素,每个像素都有一个包含 4 个值的向量。
如果是这样,我想你可以将你的数据转换为矩阵,以符合 scikit-learn 输入形状矩阵的数据表示模式 () 然后你可以使用包实现的 GMM 类。
如果需要,您可以将数据转换回来。
PS:再想一想,我不知道像素的空间分布是否对 GMM 分量的生成起作用。也许尝试一下,让我们知道?
好的,在您训练完模型后,您可以要求它预测生成数据集中每个像素的混合模型。
也就是说,如果你再次运行: 你会得到一个包含值的数组,表示每个像素所属的簇。然后,您可以将这些值映射到手头的图像中,为每个像素应用不同颜色的掩码,以查看您的模型是否正确识别了这三个类别。
这是我的意思的一个例子:
from scipy.misc import imread, imshow
from sklearn.datasets import load_sample_image
X = load_sample_image('china.jpg')
old_shape = X.shape
X = X.reshape(-1,3)
gmm = mixture.GMM(covariance_type='full', n_components=5)
gmm.fit(X)
clusters = gmm.predict(X)
clusters = clusters.reshape(old_shape[0], old_shape[1])
imshow(clusters)