Python实现-Kmeans聚类算法

Python实现-Kmeans聚类算法

1. Kmeans聚类算法

Kmeans聚类算法: k均值聚类算法(k-means clustering algorithm)是一种迭代求解的聚类分析算法,其步骤是随机选取K个对象作为初始的聚类中心,然后计算每个对象与各个种子聚类中心之间的距离,把每个对象分配给距离它最近的聚类中心。聚类中心以及分配给它们的对象就代表一个聚类。每分配一个样本,聚类的聚类中心会根据聚类中现有的对象被重新计算。这个过程将不断重复直到满足某个终止条件。来自 百度百科
本人理解: k均值聚类算法(k-means clustering algorithm)即通过随机得到的K个聚类对象作为聚类中心,把每个对象分配给距离它最近的聚类中心。每次迭代聚类求解都是对不同的聚类中心进行聚类分组求解,直到满足某个条件,不在进行迭代。


2. 问题描述

问题描述: 随机生成100个点,分成N类(N),在100个点中随机出N个点作为初始的分类中心点,计算其他点和这N个点之间的距离,将整个点分给距离最近的点.
收敛条件: 计算新的中心点(质心):通过新生成的聚类求取想x,y平均值 。当本次的聚类中心点和上次的聚类中心点距离差小于threshold(限制条件)时,迭代结束。


3. 代码实现

import random
import matplotlib.pyplot as plt
class Kmeans():
    def __init__(self, k):
        '''
        初始化
        :param k:代表聚类中心的个数
        '''
        self.__k = k
        self.__data = []  #存放原始数据,初次生成的100个点
        self.__pointCenter = []   #存放聚类中心点
        self.__result = []      #存放最后的聚类结果
        for i in range(k):      #默认有5个聚类,即生成[[],[],[],[],[]]
            self.__result.append([])   #五个子列表,存放分类的点
            pass
        pass

    def calDistance(self,points1,points2):
        '''
        欧式距离:sprt((x1-x2)^2+(y1-y2)^2)
        :param points1: 一维列表
        :param points2: 一维列表
        :return: 两个点之间的直线距离
        '''
        distance=(sum([(x1-x2)**2 for x1,x2 in zip(points1,points2)]))**0.5  #开平方等于乘以1/2次方
        return distance
        pass

    def randomCenter(
  • 16
    点赞
  • 82
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值