我使用了这个链接的gower距离函数:https://sourceforge.net/projects/gower-distance-4python/files/。我的数据(df
)是每行都是交易,每列都是特征。由于它包含大量的分类数据,然后我使用gower距离转换数据以测量“相似性”...我希望这是正确的(如下所示):
D = gower_distances(df)
distArray = ssd.squareform(D)
hierarchal_cluster=scipy.cluster.hierarchy.linkage(distArray, method='ward', metric='euclidean', optimal_ordering=False)
然后我将上面的层次聚类绘制成树状图:
plt.title('Hierarchical Clustering Dendrogram (truncated)')
plt.xlabel('sample index or (cluster size)')
plt.ylabel('distance')
dendrogram(
hierarchal_cluster,
truncate_mode='lastp', # show only the last p merged clusters
p=15, # show only the last p merged clusters
leaf_rotation=90.,
leaf_font_size=12.,
show_contracted=True # to get a distribution impression in truncated branches
)
我无法展示它,因为我没有足够的特权点,但在树形图上我可以看到单独的颜色。 将它们分开的主要鉴别因素是什么? 我怎么能找到这个? 如何使用PCA提取有用的功能? 我将'hierarchal_cluster'传递给PCA功能吗? 像下面的东西..?
pca = PCA().fit(hierarchal_cluster.T)
plt.plot(np.arange(1,len(pca.explained_variance_ratio_)+1,1),pca.explained_variance_ratio_.cumsum())
我希望您知道PCA仅适用于连续数据吗?既然你提到过,有许多分类功能。根据您所写的内容,您会得到混合数据。
处理混合数据时的常见做法是分离连续和分类特征/变量。然后找到连续(或数值)特征的数据点与分类特征的汉明距离之间的欧几里德距离[1]。
这将使您能够分别找到连续和分类特征之间的相似性。现在,在此处,在连续变量上应用PCA以提取重要特征。并将Multiple Correspondence Analysis
MCA应用于分类特征。此后,您可以将获得的相关要素组合在一起,并应用任何聚类算法。
基本上,我建议在聚类之前进行特征选择/特征提取。
[1] Huang,Z.,1998。用于聚类具有分类值的大数据集的k均值算法的扩展。数据挖掘和知识发现,2(3),pp.283-304。
引用关于Ward连接问题的scipy文档:
方法仅在使用欧几里德成对度量时才正确定义“质心”,“中位数”和“区域”。如果y作为预先计算的成对距离传递,则用户有责任确保这些距离实际上是欧几里德,否则产生的结果将是不正确的。
所以你不能使用Ward与Gower的联系!