Esempio n. 1
0
def clusterLinkAgg(dom, para=1):
    md = ldi.linkDistance(dom, para)
    linkList = getLink(dom)
    linkClusterList = []
    for link in linkList:
        linkClusterList.append([link])
    while True:
        if len(linkClusterList) <= 1:
            break
        first = 0
        second = 1
        try:
            minGap = singleLink(linkClusterList[first],
                                linkClusterList[second], md)
            #minGap = singleLink2D(linkClusterList[first], linkClusterList[second], md)
        except:
            print(len(linkClusterList))
            return
        for i in range(0, len(linkClusterList)):
            for j in range(i + 1, len(linkClusterList)):
                gap = singleLink(linkClusterList[i], linkClusterList[j], md)
                #gap = singleLink2D(linkClusterList[i], linkClusterList[j], md)
                if gap < minGap:
                    minGap = gap
                    first = i
                    second = j
        if minGap > md.dt:
            #if minGap > md.dt*1.414:
            break
        linkClusterList[first] += linkClusterList[second]
        linkClusterList.pop(second)
    return linkClusterList
Esempio n. 2
0
def clusterLinkKM(dom, k=2):
    md = ldi.linkDistance(dom, 1)
    linkList = getLink(dom)
    a = [[link['index']] for link in linkList]
    #a = [[link['index'], link.parent['index']] for link in linkList]
    #a = [[link['index'], link['link_color'], link['link_size']] for link in linkList]
    #a = [[link['index'], link['link_color'], link['link_size'], link.parent['index']] for link in linkList]
    if not a:
        return []
    cluster = KMeans(k)
    labelList = cluster.fit_predict(array(a))
    linkClusterList = [[] for i in range(0, k)]
    for i in range(0, len(labelList)):
        linkClusterList[labelList[i]].append(linkList[i])
    return linkClusterList
Esempio n. 3
0
def clusterLink1D(dom, para=1):
    md = ldi.linkDistance(dom, para)
    linkList = getLink(dom)
    if not linkList:
        return []
    linkClusterList = []
    tmp = [linkList[0]]
    for i in range(1, len(linkList)):
        if md.getDis(linkList[i], linkList[i - 1]) > md.dt:
            linkClusterList.append(tmp)
            tmp = []
        else:
            tmp.append(linkList[i])
    if tmp:
        linkClusterList.append(tmp)
    linkClusterList = [
        linkCluster for linkCluster in linkClusterList if linkCluster
    ]
    return linkClusterList
Esempio n. 4
0
def clusterLinkSC(dom,
                  k=2,
                  affinity='nearest_neighbors',
                  n_neighbors=1,
                  gamma=0.021):
    md = ldi.linkDistance(dom, 1)
    linkList = getLink(dom)
    a = [[link['index']] for link in linkList]
    #a = [[link['index'], link.parent['index']] for link in linkList]
    #a = [[link['index'], link['link_color'], link['link_size']] for link in linkList]
    #a = [[link['index'], link['link_color'], link['link_size'], link.parent['index']] for link in linkList]
    if not a:
        return []
    cluster = SpectralClustering(k, gamma=gamma)
    labelList = cluster.fit_predict(array(a))
    linkClusterList = [[] for i in range(0, k)]
    for i in range(0, len(labelList)):
        linkClusterList[labelList[i]].append(linkList[i])
    return linkClusterList
Esempio n. 5
0
def clusterLinkDB(dom, para=0.5):
    md = ldi.linkDistance(dom, para)
    linkList = getLink(dom)
    a = [[link['index']] for link in linkList]
    #a = [[link['index'], link.parent['index']] for link in linkList]
    #a = [[link['index'], link['link_color'], link['link_size']] for link in linkList]
    #a = [[link['index'], link['link_color'], link['link_size'], link.parent['index']] for link in linkList]
    if not a:
        return []
    if not md.dt:
        return linkList
    #cluster = DBSCAN(md.dt*1.414, min_samples=1)
    cluster = DBSCAN(md.dt, min_samples=1)
    labelList = cluster.fit_predict(array(a))
    tmpSet = set()
    for label in labelList:
        tmpSet.add(label)
    linkClusterList = [[] for i in range(0, len(tmpSet))]
    for i in range(0, len(labelList)):
        linkClusterList[labelList[i]].append(linkList[i])
    linkClusterList = [
        linkCluster for linkCluster in linkClusterList if linkCluster
    ]
    return linkClusterList
Esempio n. 6
0
def chdLD(dom, para=1):
    md1 = ldi.linkDistance(dom, para)
    md2 = lde.linkDensity(dom, 1, 0.00001)
    return runClusterLink(dom, md1, md2)