用 PCA 解释 K-Means 聚类 - Python

Posted

技术标签:

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

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

Clustering analysis plot here

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

如何解释这种聚类?

谢谢!

【问题讨论】:

【参考方案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。有关详细信息,请参阅下面的链接。

以上是关于用 PCA 解释 K-Means 聚类 - Python的主要内容,如果未能解决你的问题,请参考以下文章

带有 PCA 分解的 k-means 聚类的质心是啥?

解释聚类指标

分层k-means聚类和HCPC

K-Means 算法

基于轮廓系数的高维数据K-Means聚类算法处理

如何从 K-Means 聚类中解释轮廓系数?