【问题标题】:Interpretation K-Means clustering with PCA - Python用 PCA 解释 K-Means 聚类 - Python
【发布时间】:2021-08-06 19:01:43
【问题描述】:

我已经在一个数据集上实现了 K-Means 聚类,其中我使用 PCA 将维度减少到了 2 个特征。

Clustering analysis plot here

现在我想知道如何解释这个分析,因为轴上的变量有任何参考。 鉴于这种疑问,我还想知道在使用 PCA 调整大小的数据集上实施 K-Means 是否是一种好习惯。

如何解释这种聚类?

谢谢!

【问题讨论】:

    标签: python-3.x scikit-learn cluster-analysis k-means pca


    【解决方案1】:

    代码:

    import statsmodels.api as sm
    import numpy as np
    import pandas as pd
    import statsmodels.formula.api as smf
    from statsmodels.stats import anova
    
    mtcars = sm.datasets.get_rdataset("mtcars", "datasets", cache=True).data
    df = pd.DataFrame(mtcars)
    model = smf.ols(formula='np.log(mpg) ~ np.log(wt)', data=mtcars).fit()
    print(anova.anova_lm(model))
    print(anova.anova_lm(model).F["np.log(wt)"])
    
    
    
    import numpy as np
    import pandas as pd
    import matplotlib.pyplot as plt
    from sklearn.cluster import KMeans
    from sklearn.decomposition import PCA
    
    df.fillna(0, inplace = True)
    
    x = df.iloc[:,2:]
    
    wcss = []
    for i in range(1,11):
       model = KMeans(n_clusters = i, init = "k-means++")
       model.fit(x)
       wcss.append(model.inertia_)
    plt.figure(figsize=(10,10))
    plt.plot(range(1,11), wcss)
    plt.xlabel('Number of clusters')
    plt.ylabel('WCSS')
    plt.show()
    
    pca = PCA(2)
    data = pca.fit_transform(x)
    
    plt.figure(figsize=(10,10))
    var = np.round(pca.explained_variance_ratio_*100, decimals = 1)
    lbls = [str(x) for x in range(1,len(var)+1)]
    plt.bar(x=range(1,len(var)+1), height = var, tick_label = lbls)
    plt.show()
    
    
    centers = np.array(model.cluster_centers_)
    model = KMeans(n_clusters = 6, init = "k-means++")
    label = model.fit_predict(data)
    plt.figure(figsize=(10,10))
    uniq = np.unique(label)
    for i in uniq:
       plt.scatter(data[label == i , 0] , data[label == i , 1] , label = i)
    plt.scatter(centers[:,0], centers[:,1], marker="x", color='k')
    #This is done to find the centroid for each clusters.
    plt.legend()
    plt.show()
    
    df['label'] = label
    df
    

    最终结果:

    等等等等等等

    【讨论】:

    • 对不起,如果这有点离题,但您可能还想考虑将特征重要性与随机森林算法一起使用。这将告诉您哪些独立特征对依赖特征的影响最大。据我了解,PCA 不会告诉您哪些功能是 PCA1 和 PCA2。有关详细信息,请参阅下面的链接。
    猜你喜欢
    • 2021-11-18
    • 2019-11-25
    • 2011-10-15
    • 2018-02-26
    • 2016-07-28
    • 2021-12-10
    • 2019-12-05
    • 2016-08-14
    • 2016-02-01
    相关资源
    最近更新 更多