用 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的主要内容,如果未能解决你的问题,请参考以下文章