K-means算法

K-means算法

特点

优点:容易实现
缺点:可能收敛到局部最小值,在大规模数据集上收敛较慢
适用数据类型:数值型数据

步骤

  1. 适当给出聚类簇数k
  2. 根据k,随机选择k个簇质心
  3. 对任意一个样本,求其到各个簇质心的距离,将其归到距离最近的簇质心
  4. 用均值等方法更新每个簇的质心
  5. 重复3、4,直到各个簇质心恒定不变,则聚类完成

选择适当的簇数

肘部法则–Elbow Method

在这里插入图片描述

畸变程度:每个簇质心与簇内样本点的平方距离误差和,畸变程度越低,代表簇内成员越紧密,反之则越松散
平均畸变程度:各个簇的畸变程度之和除以簇数

簇的个数越多,总畸变程度越低,但违背了聚类的目标:在保持簇数目不变的情况下提高簇的质量,所以为了保持簇总数不变,可以将最近的两个簇进行合并,或者合并两个使总畸变程度增幅最小的簇质心,必须在所有可能的两个簇上进行操作,直到找到合并最佳的两个簇为止

轮廓系数–Silhouette Coefficient

在这里插入图片描述
a:同簇样本彼此距离的均值
b:样本到除自身所在簇外的最近簇的样本的均值
轮廓系数越大,代表聚类的效果越合理

K-means算法代码实现

import numpy as np

# 读取文件
def loadDataSet(filename):
    # 用以储存数据
    dataMat = []
    fr = open(filename)
    for line in fr.readline():
        # 去掉首尾空格后,按制表符分割每行,返回列表
        curLine = line.strip().split('\t')
        # 将列表中每一个元素转化为float类型
        fltLine =
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值