Scikit learn scikit学习标准定标器-获取GMM原始未标度空间中的标准偏差

Scikit learn scikit学习标准定标器-获取GMM原始未标度空间中的标准偏差,scikit-learn,Scikit Learn,在运行GMM集群模型之前,我使用标准的定标器将我的数据转换成一个0均值、1 std的数据集 在执行了聚类之后,我感兴趣的是在原始空间中表示学习到的聚类,而不是在特征值更有意义的0均值1标准差中 然后执行以下操作是否正确: 将每个GMM簇的平均值乘以 scaler.mean参数 通过乘以标准偏差的平方得到标准偏差 scaler.std_u参数的对角协方差矩阵 如果有任何反馈,我将不胜感激 谢谢大家! 对于集群中心,您可以直接使用scaler.inverse_transform()(因为它们与您的数

在运行GMM集群模型之前,我使用标准的定标器将我的数据转换成一个0均值、1 std的数据集

在执行了聚类之后,我感兴趣的是在原始空间中表示学习到的聚类,而不是在特征值更有意义的0均值1标准差中

然后执行以下操作是否正确:

  • 将每个GMM簇的平均值乘以 scaler.mean参数

  • 通过乘以标准偏差的平方得到标准偏差 scaler.std_u参数的对角协方差矩阵

  • 如果有任何反馈,我将不胜感激


    谢谢大家!

    对于集群中心,您可以直接使用
    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时为每个迭代找到最大似然度。