Python实现K-means聚类算法以及例子

1、聚类是一种无监督的学习,它将相似的对象归到同一个簇中。簇内的对象越相似,聚类的效果越好。总之,聚类即归类。2、基本思想:(1)随机指定需要划分的簇的个数K值(2)随机地选择k个初始数据对象点作为初始的聚类中心(3)计算剩下的每个数据到这k个初始聚类中心的距离,然后把离这个中心点距离最近的归在一起。(4)上面步骤完成后,按照平均法又重新计算各个簇的质心,最后又确定新的聚类中心点(5)...
摘要由CSDN通过智能技术生成

1、聚类是一种无监督的学习,它将相似的对象归到同一个簇中。簇内的对象越相似,聚类的效果越好。总之,聚类即归类。
2、基本思想:
(1)随机指定需要划分的簇的个数K值
(2)随机地选择k个初始数据对象点作为初始的聚类中心
(3)计算剩下的每个数据到这k个初始聚类中心的距离,然后把离这个中心点距离最近的归在一起。
(4)上面步骤完成后,按照平均法又重新计算各个簇的质心,最后又确定新的聚类中心点
(5)一直迭代,直到簇心的移动距离小于你给定的某个 值。

3、基本步骤:
(1)初始化k个聚类中心
(2)计算出每个元素跟这(k)个中心得距离,(相似度计算),距离与其最小(即相似度最大),那他们就归为同一类(即属于这个中心)。
(3)上一步结束后,得到的新的数据,又重新计算新的聚类中心,和第一次的聚类中心相比较,要是不同就继续第二步,直到新旧两个中心相同,就说明聚类不会再变化了。就是聚类已经成功了。
4、流程图
在这里插入图片描述

5、python代码实现
(1)任务:用K-means聚类算法将150个4维样本数据分成3类。
(2)数据集:Iris.txt(想要数据集,可以留言)
(3)代码实现:

# coding=gbk
# python edition: Python3.7
from collections import defaultdict
from random import uniform
from math import sqrt

#第一步读取文件(数据集)
def read_points():     #解析文件
    dataset = []       #文件的最后一个字段是类别标签
    with open('Iris.txt', 'r') as file:
        for line in file:
            if line == '\n':
                continue
            dataset.append(list(map(float, line.split(' '))))
        file.close()
        return dataset

#第二步:将读取的数据读入到dataset列表中去
def write_results(listResult, dataset, k):
    with open('result.txt', 'a') as file:
        for kind in range(k):    
            file.write("CLASSINFO:%d\n" % (kind + 1))
            for j in listResult[kind]:
                file.write('%d\n' % j)
            file.write('\n')
        file.write('\n\n')
        file.close()

#确定的新的聚类中心
def point_avg(points):
    dimensions = len(points[0])
    new_center = []
    for dimension in range(dimensions):
        sum = 0
        for p in points:
            sum += p[dimension]
        new_center.append(float("%.8f" % (sum / float(len
  • 3
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 16
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 16
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值