python模块之scipy的层次聚类简单测试与使用

    scipy模块是很强大,里面很多有用的函数,这里先花一点时间使用一下scipy模块中的层次聚类,下面是简单的使用:


#!usr/bin/env python
#encoding:utf-8

'''
__Author__:沂水寒城
功能:scipy测试使用
'''

import scipy
import json
import scipy.cluster.hierarchy as sch
from scipy.cluster.vq import vq,kmeans,whiten
import numpy as np
import matplotlib.pylab as plt


def cluster_test(datafile='data/shop_test/vector.json'):
    '''
    简单的层次聚类实验
    '''
    with open(datafile) as f:
        file_list=json.load(f)
    matrix=[]
    for one_dict in file_list:
        matrix.append(one_dict['vector'])
    #距离度量包括:
    '''
    'euclidean'、'minkowski'、'cityblock'、'seuclidean'、'sqeuclidean'
    'cosine'、'correlation'、'hamming'、'jaccard'、'chebyshev'、 'canberra'
    'braycurtis'、'mahalanobis'、'yule'、'matching'、'dice'、'kulsinski'
    'rogerstanimoto'、'russellrao'、'sokalmichener'、'sokalsneath'
    'wminkowski'
    '''
    disMat = sch.distance.pdist(matrix,'euclidean') 
    #距离计算方法包括:
    '''
    'single'、'complete'、'average'、'weighted'、'centroid'、
    '''
    Z=sch.linkage(disMat,method='average') 
    #可视化处理
    P=sch.dendrogram(Z)
    plt.savefig('pictures/result.png')
    #聚类准则包括:
    '''
    'inconsistent'、'distance'、'maxclust'、'monocrit'、'maxclust_monocrit'
    '''
    cluster= sch.fcluster(Z, criterion='inconsistent',t=1) 
    print "层次聚类结果为:\n",cluster
    #白化处理
    data=whiten(matrix)
    #kmeans聚类
    '''
    聚类数确定方法:
    1.借助层次聚类方法初步确定
    2.手动设定,尝试法
    '''
    centroid=kmeans(data,max(cluster))[0]  
    #使用vq函数
    cluster2=vq(data,centroid)[0] 
    print "kmeans聚类结果为:\n", cluster2


def cluster_test2(datafile='data/shop_test/vector.json'):
    '''
    简单的层次聚类实验
    '''
    with open(datafile) as f:
        file_list=json.load(f)
    matrix=[]
    for one_dict in file_list:
        matrix.append(one_dict['vector'])
    #距离度量包括:
    '''
    'euclidean'、'minkowski'、'cityblock'、'seuclidean'、'sqeuclidean'
    'cosine'、'correlation'、'hamming'、'jaccard'、'chebyshev'、 'canberra'
    'braycurtis'、'mahalanobis'、'yule'、'matching'、'dice'、'kulsinski'
    'rogerstanimoto'、'russellrao'、'sokalmichener'、'sokalsneath'
    'wminkowski'
    '''
    disMat = sch.distance.pdist(matrix,'cityblock') 
    #距离计算方法包括:
    '''
    'single'、'complete'、'average'、'weighted'、'centroid'、
    '''
    Z=sch.linkage(disMat,method='complete') 
    #可视化处理
    P=sch.dendrogram(Z)
    plt.savefig('pictures/result2.png')
    #聚类准则包括:
    '''
    'inconsistent'、'distance'、'maxclust'、'monocrit'、'maxclust_monocrit'
    '''
    cluster= sch.fcluster(Z, criterion='distance',t=1) 
    print "层次聚类结果为:\n",cluster
    #白化处理
    data=whiten(matrix)
    #kmeans聚类
    '''
    聚类数确定方法:
    1.借助层次聚类方法初步确定
    2.手动设定,尝试法
    '''
    centroid=kmeans(data,max(cluster))[0]  
    #使用vq函数
    cluster2=vq(data,centroid)[0] 
    print "kmeans聚类结果为:\n", cluster2


if __name__=='__main__':
    cluster_test(datafile='data/shop_test/vector.json')
    cluster_test2(datafile='data/shop_test/vector.json')


结果如下:


层次聚类结果为:
[ 4 12  1  9  9  1  4 16  7 19  2 12 10  2  7  5 18  8  7 11 10  2  5  4 12
  6  6  5  7 12  3 13  3 13 17  2 14  1 15  8 13 12 15]
kmeans聚类结果为:
[ 9  0 16 15 15  2  9  9  3 14  7 17 15 12  3  5  9  9  3 15 15  6  1  8 17
  9  9  5  3 17  4  0  4 13 11 12 10  2  9  9 13  0  9]
层次聚类结果为:
[ 9 18  3 23 24  1 10 30 13 34  7 17 25  6 13 12 33 15 13 27 26  4 12 11 17
 31 31 12 14 17  8 21  8 20 32  5 22  2 28 16 20 19 29]
kmeans聚类结果为:
[12 15  0 13 13  0  7  7 23  7 17 15  4  3 23  2 22 10 23 20 18  3  2  1 15
 21 21  2 23 15 11 15  9 19  6  3 14  0  8  5 15 15 16]
[Finished in 2.5s]



其中result.png如下:




result2.png如下:




    纯属新手尚在学习,如果有兴趣的欢迎交流哈!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Together_CZ

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值