使用python3分层聚类从非对称距离矩阵生成聚类组

时间:2018-06-22 06:59:37

标签: python-3.x hierarchical-clustering

我正在尝试使用分层聚类将一组点分类到给定的数字聚类中。我的输入数据采用非对称距离矩阵的形式。例如,如果我有一个数据的nxn矩阵,其中I(x,y)可能不同于I(y,x),并且一个条目可能具有零值,则表明您无法从x-> y中获得。

我希望提供距离矩阵NxN并生成类似列表

集群1 I(1,2),I(2,3) 群集2 I(3,2)

我正在尝试计算AgglomerativeClustering是否支持不对称? 我正在尝试计算AgglomerativeClustering的返回格式,我想知道哪个集群。

我的距离矩阵是

t1,t2,10
t1,t3,20
t1,t4,30
t1,t5,100
t2,t1,2
t2,t3,10
t2,t4,20
t2,t5,50
t3,t1,4
t3,t2,6
t3,t4,10
t3,t5,20
t4,t1,9
t4,t2,10
t4,t3,20
t4,t5,10
t5,t1,10
t5,t2,20
t5,t3,0
t5,t4,200

我的代码是(读入一个csv文件,转换为距离矩阵,生成簇)

from numpy import loadtxt
from collections import defaultdict
import csv
import functools
import itertools
import sklearn.cluster
import numpy as np
from sklearn.cluster import AgglomerativeClustering
from scipy import ndimage
name_to_id = defaultdict(functools.partial(next, itertools.count()))
with open('foo.csv') as f:
    reader = csv.reader(f)
for src_port, target_port,distance in reader:
    idx_source=name_to_id[src_port]
    idx_target=name_to_id[target_port]
n_elem = len(name_to_id)
distances=np.zeros((n_elem,n_elem))
f.seek(0)
for src_port, target_port,distance in reader:
    idx_source=name_to_id[src_port]
    idx_target=name_to_id[target_port]
    distances[(idx_source,idx_target)  if idx_source < idx_target else (idx_target,idx_source)] = distance
id_to_name = dict((id, name) for name, id in name_to_id.items())  
ret=AgglomerativeClustering(connectivity=distances,n_clusters=2,
    linkage='complete',compute_full_tree=True,affinity='precomputed')

我想弄清楚什么是ret类型?

0 个答案:

没有答案