微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

用 PCA 解释 K-Means 聚类 - Python

如何解决用 PCA 解释 K-Means 聚类 - Python

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

Clustering analysis plot here

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

我如何解释这种聚类?

谢谢!

解决方法

代码:

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[:,centers[:,marker="x",color='k')
#This is done to find the centroid for each clusters.
plt.legend()
plt.show()

df['label'] = label
df

最终结果:

enter image description here

诸如此类,诸如此类

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。