Scikit learn scikit学习标准定标器-获取GMM原始未标度空间中的标准偏差
在运行GMM集群模型之前,我使用标准的定标器将我的数据转换成一个0均值、1 std的数据集 在执行了聚类之后,我感兴趣的是在原始空间中表示学习到的聚类,而不是在特征值更有意义的0均值1标准差中 然后执行以下操作是否正确:Scikit learn scikit学习标准定标器-获取GMM原始未标度空间中的标准偏差,scikit-learn,Scikit Learn,在运行GMM集群模型之前,我使用标准的定标器将我的数据转换成一个0均值、1 std的数据集 在执行了聚类之后,我感兴趣的是在原始空间中表示学习到的聚类,而不是在特征值更有意义的0均值1标准差中 然后执行以下操作是否正确: 将每个GMM簇的平均值乘以 scaler.mean参数 通过乘以标准偏差的平方得到标准偏差 scaler.std_u参数的对角协方差矩阵 如果有任何反馈,我将不胜感激 谢谢大家! 对于集群中心,您可以直接使用scaler.inverse_transform()(因为它们与您的数
谢谢大家! 对于集群中心,您可以直接使用
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
,使两者基本相等。为了实现r管道的自动化,您还应该看看sklearn.pipeline.pipeline
,通过它您可以连接流程并调用transform
和逆变换
方法
至于协方差的重新缩放,您应该在簇协方差矩阵的右侧和左侧乘以np.diag(scaler.std)
回答你的问题:
1) 通过将集群平均值乘以scaler.std_uu,再加上scaler.mean_uu,即可获得平均值。
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),但不需要创建对角矩阵。对于聚类中心,可以直接使用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
,使两者基本相等。为了实现r管道的自动化,您还应该看看sklearn.pipeline.pipeline
,通过它您可以连接流程并调用transform
和逆变换
方法
至于协方差的重新缩放,您应该在簇协方差矩阵的右侧和左侧乘以np.diag(scaler.std)
回答你的问题:
1) 通过将集群平均值乘以scaler.std_uu,再加上scaler.mean_uu,即可获得平均值。
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_z
在数学上等同于2),但不需要创建对角矩阵。非常感谢Eikenberg!将平均值添加到产品中更有意义。你能解释一下重新调整协方差的原因吗。我如何推导这个表达式?事实上,我认为np.diag(scaler.std_uu).dot(cov).dot(np.diag(scaler.std_u))实际上,我认为np.diag(scaler.std_u).dot(cov).dot(np.diag(scaler.std_u))这是有意义的,因为它将1)通过sigma_i^2为每个特征x_i放大方差,2)通过将每对x_i x_j的缩放协方差乘以标准偏差的相应乘积来恢复其他协方差sigma_i*sigma_jc您可以告诉我们如何在应用GMM时为每次迭代找到最大似然值。非常感谢艾肯伯格!将平均值添加到产品中更有意义。你能解释一下重新调整协方差的原因吗。我如何推导这个表达式?事实上,我认为np.diag(scaler.std_uu).dot(cov).dot(np.diag(scaler.std_u))实际上,我认为np.diag(scaler.std_u).dot(cov).dot(np.diag(scaler.std_u))这是有意义的,因为它将1)按sigma_i^2放大每个特征x_i的方差,2)通过将每对x_i x_j的缩放协方差乘以标准偏差的相应乘积来恢复其他协方差,sigma_i*sigma_jc您可以告诉我们如何在应用GMM时为每个迭代找到最大似然度。