scikit学习如何了解集群中的文档



我是python和scikit的新手,所以请耐心等待。

我从k均值聚类中获得了k均值聚类算法的源代码。

然后,我修改为使用load_file函数在本地集上运行。

虽然算法终止了,但它不会产生任何输出,比如将哪些文档聚集在一起。

我发现km物体具有";km标记";数组,其中列出了每个文档的质心id。

它还具有质心矢量;km.cluster_centers_;

但它是什么文件?我必须把它映射到";数据集";它是一个";Bunch";对象

如果我打印dataset.data[0],我会得到我认为被打乱的第一个文件的数据。但我只想知道这个名字。

我对以下问题感到困惑:dataset.data[0]处的文档是否在km.label[0]处被聚类为centoid?

我的基本问题是找到哪些文件聚集在一起。如何找到它

忘记Bunch对象。这只是加载与scikit-learn捆绑在一起的玩具数据集的实现细节。

在现实生活中,有了真实的数据,你只需要直接调用:

km = KMeans(n_clusters).fit(my_document_features)

然后从收集集群分配

km.labels_

my_document_features是一个2D数据结构:要么是numpy数组,要么是形状为(n_documents, n_features)的scipy.sparse矩阵。

CCD_ 4是形状为CCD_。因此,labels_中的第一个元素是在my_document_features特征矩阵的第一行中描述的文档的簇的索引。

通常,您将使用TfidfVectorizer对象构建my_document_features

my_document_features = TfidfVectorizer().fit_transform(my_text_documents)

如果您直接读取文档(例如,从数据库或单个CSV文件中的行或任何您想要的),my_text_documents将是一个列表python unicode对象,或者:

vec = TfidfVectorizer(input='filename')
my_document_features = vec.fit_transform(my_text_files)

其中my_text_files是硬盘驱动器上文档文件路径的python列表(假设它们使用UTF-8编码)。

my_text_filesmy_text_documents列表的长度应为n_documents,因此与km.labels_的映射是直接的。

由于scikit学习的不仅仅是对文档进行聚类或分类,所以我们使用名称"sample"而不是"document"。这就是我们使用n_samples而不是n_documents来记录库中所有估计器的参数和属性的预期形状的方式。

dataset.filenames是关键:)

我就是这么做的。

load_files声明为:

def load_files(container_path, description=None, categories=None,
           load_content=True, shuffle=True, charset=None,
           charse_error='strict', random_state=0)

也是

dataset_files = load_files("path_to_directory_containing_category_folders");

然后当我得到结果时:

我把它们放在集群中,这是一个字典

clusters = defaultdict(list)
k = 0;
for i in km.labels_ :
  clusters[i].append(dataset_files.filenames[k])  
  k += 1

然后我打印它:)

for clust in clusters :
  print "n************************n"
  for filename in clusters[clust] :
    print filename

相关内容

  • 没有找到相关文章

最新更新