机器学习(九)聚类

一、K-means

(一)思想

  • 优化目标


    17368230-a34f96690ff02729.png

(二)流程

  • 随机选择k个点作为初始质心
  • 将每个点指派到最近的质心,形成k个簇,重新计算每个簇的质心
  • 簇不发生变化或达到最大迭代次数停止。

(三)缺点

  • k值需要指定
  • 初始聚类中心敏感
  • 对离群点敏感
  • 需要对数据做标准化
  • 对于类别数据无法聚类
  • 可能收敛于局部最小值,在大规模数据集上收敛慢
  • 任意形状的簇无法聚类
  • 和样本呈线性关系

(四)实战

from sklearn.cluster import KMeans
kmeans = KMeans(n_clusters=5, n_init=10, max_iter=200)
kmeans.fit(data)
clusters = np.asarray(kmeans.cluster_centers_, dtype=np.unit8)
labels = np.asarray(kmeans.labels_, dtype=np.unit8)

二、K-modes

(一)解决问题

对分类属性型数据进行聚类

(二)步骤

  • 假设有N个样本,M个属性,均为离散的,随机确定k个聚类中心C1,C2...Ck,Ci是长度为M的向量
  • 对于样本xj,分别比较其与k个中心之间的距离(不同属性值的个数,如x1=[1,2,1,3]和C1=[1,2,3,4]之间的距离为2)
  • 将xj划分到距离最小的簇,在全部的样本都被划分完毕之后,重新确定簇中心,向量Ci中的每一个分量都更新为簇i中的众数
  • 重复直到总距离(各个簇中样本与各自簇中心距离之和)不再降低,返回最后的聚类结果

三、K-medoids

(一)解决问题

对异常值敏感

(二)简介

与K-means算法类似,区别在于中心点的选取

  • K-means:当前类中所有点的重心
  • K-medoids:当前类中所有其他点到该点的距离之和最小

在一定程度上削弱了异常值的影响,但计算较为复杂。

(三)步骤

  • 任意选取k个点作为medoids
  • 将剩余的n-k个点分配到最佳的类中
  • 对于第i个类中除对应medoids点外的所有其他点,按顺序计算当其为新的medoids时,准则函数的值,遍历所有可能,选取准则函数最小时对应的点作为新的medoids
  • 重复,直到所有的medoids点不再发生变化或已达到设定的最大迭代次数

四、层次聚类

(一)两种

层次聚类试图在不同层次对数据集进行划分,形成树形的聚类结果

  • 分裂法:由上向下把大的类别分割
  • 凝聚法:由下向上对小的类别聚合

(二)分裂法

  • 将所有样本归为1类
  • 在同一类中计算两两样本之间的距离,找出最远的两个点a,b
  • 将样本a,b分配到不同的类簇c1和c2中
  • 计算原类簇c中其他样本点与a,b之间的距离,归到c1或c2中
  • 重复,达到聚类数据或设定条件停止

(三)凝聚法

  • 将所有样本作为一个独立的类簇
  • 计算两两类簇之间的距离,找到距离最小的c1和c2
  • 把c1和c2合并为一个类
  • 重复直至达到聚类数据或设定条件停止

五、DBSCAN

(一)基本概念

  • 核心对象:r领域内点数量不少于minPts的点
  • 直接密度可达:p在q的领域内,q是核心对象,p-q直接密度可达
  • 密度可达:q0,q1,...,qn,qi-qi-1密度可达,则q0-qn密度可达
  • 边界点:非核心点,不能再发展
  • 噪声点:无论哪个核心对象都密度不可达

(二)流程

17368230-1130cbafef8127b6.png
DBSCAN流程
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值