在两个特征上聚类并绘制结果

Posted

技术标签:

【中文标题】在两个特征上聚类并绘制结果【英文标题】:Cluster on two features and plot results 【发布时间】:2017-05-16 00:15:04 【问题描述】:

我有两个密集矩阵(titlepara)。我希望使用亲和传播算法对它们进行聚类,然后绘制聚类。

我编写了以下代码,这些代码基于一个特性进行聚类。我怎样才能使它适应这两个特征的聚类,然后绘制结果?

import os
import time
import string
import pickle
import matplotlib.pyplot as plt
from sklearn.cluster import AffinityPropagation
from sklearn import metrics
import matplotlib.pyplot as plt
from itertools import cycle

#from sklearn.ensemble import RandomForestClassifier

#Opens and stores preprocessed data.
filepath = '...'
with open((filepath + 'para.dat'), 'rb') as infile:
    para = pickle.load(infile)
with open(filepath + 'title.dat', 'rb') as infile:
    title = pickle.load(infile)
with open(filepath + 'y.dat', 'rb') as infile:
    y = pickle.load(infile)

af = AffinityPropagation().fit(para)
cluster_centers_indices = af.cluster_centers_indices_
labels = af.labels_
n_clusters_= len(cluster_centers_indices)

这是主动学习方法的一部分,我使用它通过聚类来实现查询,从而将整个数据集聚类,并且聚类的质心形成训练数据集,从而生成代表整个数据集的训练数据集。

【问题讨论】:

【参考方案1】:

有无数种方法可以做到这一点(但当然只有有限数量的结果),因此您需要更准确地确定最佳结果是什么。

例如,您可以将相似性传播应用于

alpha * para + (1 - alpha) * title

【讨论】:

在这种情况下,它们的权重不相等? 它们可能无法比较,因此即使将 alpha 设置为 0.5,它们的影响也不会相等。【参考方案2】:

您想要做的是将您拥有的数组组合成一个大数组,以便它们都可以聚集在一起,您可以使用 numphy 附加库示例:

X = np.append(title, para, axis =0)
af = AffinityPropagation().fit(X)

现在它们已组合在一起,可以对它们进行聚类以找到它们组合的中心。

【讨论】:

以上是关于在两个特征上聚类并绘制结果的主要内容,如果未能解决你的问题,请参考以下文章

KMeans聚类并绘制聚类后的决策边界

在地图上聚类位置,其中每个聚类具有相同数量的点

使用 Python 的 Scikit-Learn 库对文本数据进行聚类并绘图

kmeans聚类结果不稳定咋办

机器学习——谱聚类

R语言层次聚类(hierarchical clustering):使用scale函数进行特征缩放hclust包层次聚类(创建距离矩阵聚类绘制树状图dendrogram,在树状图上绘制红色矩形框)