机器学习——聚类分析相关知识

聚类分析

概述

分类与聚类

  • 分类:学习/训练过程有监督,训练样本有明确标签
  • 聚类:学习/训练过程无监督,样本无明确标签

聚类的概念

  • 聚类是把各不相同的个体分割为有更多相似性子集合的工作。
  • 聚类生成的子集合称为簇

聚类的要求

  • 生成的簇内部的任意两个对象之间具有较高的相似度
  • 属于不同簇的两个对象间具有较高的相异度

聚类与分类的区别在于聚类不依赖于预先定义的类,没有预定义的类和样本——聚类是一种无监督的数据挖掘任务
聚类通常作为其他数据挖掘或建模的前奏。

在一个簇内的距离最小化,簇之间的距离最大化。

应用领域

  1. 客户价值分析
  2. 文本分类
  3. 基因识别
  4. 空间数据处理
  5. 卫星图片分析

数据分析、统计学、机器学习、空间数据库技术、生物学和市场学也推动了聚类分析研究的进展

常用的聚类算法

  1. K-均值聚类(K-Means)
  2. K-中心点聚类(K-Medoids)
  3. 密度聚类(Densit-based Spatial Clustering of Application with Noise, DBSCAN)
  4. 层次聚类(系谱聚类 Hierarchical Clustering, HC)
  5. 期望最大化聚类(Expectation Maximization, EM)

需要说明的是,这些算法本身无所谓优劣,而最终运用于数据的效果却存在好坏差异,这在很大程度上取决于数据使用者对于算法的选择是否得当。

相似性度量

扫描二维码关注公众号,回复: 11100949 查看本文章

相似度的衡量:距离

变量大致可以分为两类:

  1. 定量变量,也就是通常所说的连续变量。
  2. 定性变量,这些量并非真有数量上的变化,而只有性质上的差异。这些量可以分为两种,一种是有序变量,另一种是名义变量。

连续型变量距离:

典型的距离定义
在这里插入图片描述

相似系数

两个仅包含二元属性的对象之间的相似性度量也称相似系数

两个对象的比较有四种情况:
f00 = x取0并且y取0的属性个数;
f01 = x取0并且y取1的属性个数;
f10 = x取1并且y取0的属性个数;
f11 = x取1并且y取1的属性个数.

简单匹配系数:SMC = 值匹配的属性个数 / 属性个数= (f11 +f00) / (f01 + f10 + f11 + f00)

Jaccard(杰卡德) 系数 :J = 匹配的个数 / 不涉及0-0匹配的属性个数= (f11) / (f01 + f10 +f11)

例: 两个二元向量:x=(1,0,0,0,0,0,0,0,0,0)
y=(0,0,0,0,0,0,1,0,0,1)

f00 =7 (x取0并且y取0的属性个数)
f01 =2 (x取0并且y取1的属性个数)
f10 =1 (x取1并且y取0的属性个数)
f11 =0 (x取1并且y取1的属性个数)

简单匹配系数:SMC= (f11 +f00) / (f01 + f10 +f11 + f00)=(0+7)/(2+1+0+7)=0.7
Jaccard系数:J = (f11) / (f01 + f10+f11) =0/2+1+0 =0

余弦相似系数(如计算两文档间相似系数):
cos( x1, x2 ) = (x1 · x2) / ||x1|| ||x2|| ,

其中 · 表示向量的点积(内积),||x||表示向量的范数。
例:向量:x1 = (3,2,0,5,0,0,0,2,0,0)
x2 = (1,0,0,0,0,0,0,1,0,2)
则余弦相似系数为:cos( x1, x2 ) = 5/(6.481*2.245)=0.3436

K-Means
算法步骤

  1. 随机选取K个样本作为类中心;
  2. 计算各样本与各类中心的距离;
  3. 将各样本归于最近的类中心点;
  4. 求各类的样本的均值,作为新的类中心;
  5. 判定:若类中心不再发生变动或达到迭代次数,算法结束,否则回到第2步。

在这里插入图片描述
图中的计算分析:
Center1 = 1
Center2 = 2

Center1 = 1
Center2 = (class为2之和)/(class为2个数) = (2+4+5)/3 = 11/3

Center1 = (1+2)/2 = 3/2
Center2 = (4+5)/2 = 9/2

Center1 = 3/2
Center = 9/2

性能度量:簇内相似度与簇间相似度

  • 外部指标:将聚类结果与实际结果进行比较
  • 内部指标:不依赖于任何参考模型,直接考察聚类结果
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    优点:
  1. 算法简单,易于理解
  2. 对球形簇样本聚类效果好
  3. 二分k均值等变种算法运行良好,不受初始化问题的影响。

缺点:

  1. 不能处理非球形簇、不同尺寸和不同密度的簇
  2. 对离群点、噪声敏感

K-Medoids
算法步骤
1、随机选取K个样本作为类中心;
2、计算各样本与各类中心的距离;
3、将各样本归于最近的类中心点;
4、在各类别内选取到其余样本距离之和最小的样本作为新的类中心;
5、判定:若类中心不再发生变动或达到迭代次数,算法结束,否则回到第2步。

优点:

  1. 算法简单,易于理解
  2. 对球形簇样本聚类效果好
  3. 对离群点、噪声不敏感

缺点:

  • 不能处理非球形簇、不同尺寸和不同密度的簇
  • 算法复杂度较高

层次聚类(系谱聚类 Hierarchical Clustering, HC)

  • 不需事先设定类别数k
  • 每次迭代过程仅将距离最近的两个样本/簇聚为一类
  • 得到k=n至k=1(n为待分类样本总数)个类别的聚类结果

优点

  1. 某些应用领域需要层次结构。如:系统发生树,基因芯片
  2. 有些研究表明,这种算法能够产生较高质量的聚类

缺点

  1. 计算量、存储量大
  2. 对噪声、高维数据敏感

Python自编代码实现K-Means聚类分析算法对鸢尾花样本进行聚类

from sklearn.datasets import load_iris      #导入库
import numpy as np

iris = load_iris()     #鸢尾花数据
data = iris.data
# print(data)
n = len(data)
k = 2    #确定k值
dist = np.zeros([n, k+1])    #生成一个[n,k+1]的数组

#1、选中心
center = data[:k, :]
center_new = np.zeros([k, data.shape[1]])    #新的类中心
# print(center)
# print(center_new)

while True:
    #2、求距离
    for i in range(n):
        for j in range(k):
            dist[i, j] = np.sqrt(sum((data[i, :] - center[j, :])**2))
            # print(dist)
        dist[i, k] = np.argmin(dist[i, :k]) #最小值位置   #3、归类

    for i in range(k):             #4、求新类中心(所有样本的均值)
        index = dist[:, k] == i     #标签类别是0的索引
        center_new[i, :] = data[index, :].mean(axis=0)

        # print(index)
        # print(center_new)

    if np.all(center == center_new):    #5、判定结束
        break
    center = center_new

print(dist)

Python使用sklearn实现K-Means聚类分析算法对鸢尾花样本进行聚类

from sklearn.datasets import load_iris
from sklearn.cluster import KMeans

iris = load_iris()
model = KMeans(n_clusters=3).fit(iris.data)

#查看聚类结果
print(model.labels_)
发布了22 篇原创文章 · 获赞 11 · 访问量 1121

猜你喜欢

转载自blog.csdn.net/SartinL/article/details/105218130