几种常见的聚类分析

聚类分析

指将对象的集合分组为由类似的对象组成的多个类的分析过程,目的是在相似的基础上收集数据来分类。

聚类算法分为:

1)划分聚类:K-means聚类、K-中心点聚类、CLARANS算法

2)层次聚类 :DIANA算法、BIRCH算法、Chameleon算法

3)模糊聚类 :EM算法

4)基于密度聚类:OPTICS算法、DBSCAN算法

K-Means(K均值)聚类

算法步骤:
(1)
首先我们选择一些类/组,并随机初始化它们各自的中心点。中心点是与每个数据点向量长度相同的位置。这需要我们提前预知类的数量(即中心点的数量)。
(2)
计算每个数据点到中心点的距离,数据点距离哪个中心点最近就划分到哪一类中。
(3)
计算每一类中中心点作为新的中心点。
(4)
重复以上步骤,直到每一类中心在每次迭代后变化不大为止。也可以多次随机初始化中心点,然后选择运行结果最好的一个。

 

 

 

 

K-Modes算法

X-01 为什么要用k-modes算法

传统的k-means算法只适用于连续属性的数据集,但对于离散属性的数据集,计算簇的均值以及点之间的欧式距离就变得不合适了。k-modes作为k-means的一种扩展,适用于离散属性的数据集。

 

X-02 k-modes算法介绍

假设有N个样本,M个属性且全是离散的,簇的个数为k

 

步骤一:随机确定k个聚类中心C1,C2...CkC1,C2...Ck,CiCi是长度为M的向量,Ci=[C1i,C2i,...,CMi]Ci=[Ci1,Ci2,...,CiM]

 

步骤二:对于样本xj(j=1,2,...,N)xj(j=1,2,...,N),分别比较其与k个中心之间的距离(这里的距离为不同属性值的个数,假如x1=[1,2,1,3],C1=[1,2,3,4]那么x1x1与C1C1之间的距离为2)

 

步骤三:将xjxj划分到距离最小的簇,在全部的样本都被划分完毕之后,重新确定簇中心,向量CiCi中的每一个分量都更新为簇ii中的众数

 

步骤四:重复步骤二和三,直到总距离(各个簇中样本与各自簇中心距离之和)不再降低,返回最后的聚类结果。

 

算例

假设有7个样本,每个样本有4个属性,表示为矩阵X

 

随机确定2个聚类中心C1=[1,5,1,3],C2=[2,5,1,2]

 

划分结果用Y表示

即第1、2、3、5个样本划分到,第4、6个样本被划分到C2

接下来更新C1、C2

即第1、2、3、5个样本被划分到C1,即第4、6个样本被划分到C2

接下来更新C1和C2

C1=[1,6,0,3],     C2=[2,7,0,4]

不断重复步骤二和三了

 

安装k-modes参考官方网站:https://pypi.org/project/kmodes/

安装kmodes算法遇到的版本兼容问题

from kmodes.kmodes import Kmodes

ImportError: No module named 'kmodes'

Python中K-modes算法

# -*- coding: utf-8 -*-

"""

Created on Fri Oct 12 15:47:15 2018

 

@author: Administrator

"""

 

import numpy as np

 

from kmodes.kmodes import KModes

 

import pandas as pd

 

#反恐数据集

fileAdress = 'E:\\1MyProject\\python\\classificationModel\\data\\fankongData_1.xlsx'

 

data = pd.read_excel(fileAdress)#读取数据

 

km = KModes(n_clusters=4, init='Huang', n_init=5, verbose=1)

 

clusters = km.fit_predict(data)

 

# Print the cluster centroids

print(km.cluster_centroids_)

 

'''计算正确归类率'''

score = np.sum(clusters[:int(len(clusters)/2)])+(len(clusters)/2-np.sum(clusters[int(len(clusters)/2):]))

 

score = score/len(clusters)

 

if score >= 0.5:

    print('正确率:'+ str(score))

else:

    print('正确率:'+ str(1-score))

 

posted @ 2018-10-17 17:36  程序媛墨禾  阅读(5639)  评论(0编辑  收藏  举报