k 邻近算法和决策树

Python实现-Kmeans聚类算法

1. Kmeans聚类算法

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

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

K-Means算法步骤

    (1)、第一步是为待聚类的点寻找聚类中心;

    (2)、第二步是计算每个点到聚类中心的距离,将每个点聚类到离该点最近的聚类中去;

    (3)、第三步是计算每个聚类中所有点的坐标平均值,并将这个均值作为新的聚类中心。

    反复执行(2)、(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(self):
        '''
        生成self.__pointCenter:初次聚类中心点列表
        :return:
        '''
        while len(self.__pointCenter)<self
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值