在运行GMM群集模型之前,我使用标准Scaler将我的数据转换为0均值的第1个数据集
然后进行了聚类,我有兴趣将学习的聚类表示回原始空间而不是0均值,1标准差,其中特征值更有意义。
然后执行以下操作是否正确:
通过乘以每个GMM群集的平均值得到均值 scaler.mean_ parameters。
通过乘以平方来获得标准差 scaler.std_参数的对角协方差矩阵。
我很感激任何反馈,
谢谢!
答案 0 :(得分:3)
对于群集中心,您可以直接使用scaler.inverse_transform()
(因为它们与您的数据位于同一空间)。它将列装置添加回来,并按标准偏差对每列进行缩放。
import numpy as np
from sklearn.preprocessing import StandardScaler
X = np.random.randn(10, 3)
scaler = StandardScaler()
scaler.fit(X)
然后你会看到
scaler.inverse_transform(scaler.transform(X)) - X
等于或非常接近0
,使两者基本相等。为了使管道自动化,您还应该查看sklearn.pipeline.Pipeline
,您可以使用它来连接流程并调用transform
和inverse_transform
方法。
对于协方差的重新缩放,您应该将np.diag(scaler.std_)
乘以群集协方差矩阵的右侧和左侧。
回答你的问题:
1)通过乘以集群意味着获得均值,并通过scaler.std_和添加 scaler.mean_返回。
2)通过左右乘以np.diag(scaler.std_)
,即rescaled_cov = np.diag(scaler.std_).dot(cov).dot(np.diag(scaler.std_))
注意:如果您的协方差矩阵相当大,您可能不希望创建相同大小的另一个(对角线但密集的)矩阵。操作scaler.std_[:, np.newaxis] * cov * scaler.std_
在数学上等同于2)但不需要创建对角矩阵。