KMeans算法——python实现

KMeans是一种迭代求解的无监督学习算法,用于将相似对象归类。其优点是原理简单,易于实现,但缺点是对K值和初始中心点选择敏感。算法基于欧式距离,首先随机选取K个中心点,然后将数据分配到最近的中心点所在类别,更新中心点,直到满足停止条件。代码实现中,由于初始中心点的随机性,相同数据的运行结果可能不同。
摘要由CSDN通过智能技术生成

KMeans介绍

最基础的,常用的机器学习算法
k均值聚类算法是一种迭代求解聚类分析算法。
聚类是无监督学习,将相似的对象归到一簇中,簇的对象越相似,效果越好。

优点

原理简单,容易实现

缺点

需要对K值进行指定,对初始的中心点选取较为敏感,初始的中心点影响了分类的结果

算法推导

本例子采用欧式距离算法,即两点之间的直线距离


用户需要对k值进行指定,k代表簇的个数
传入需要处理的数据,数据可以是任意维度的,个数可以是不确定的


对传入的数据随机选取k个作为中心点
遍历数据,把每个数据与中心点进行计算,把它归类为与之距离最近的点


计算每一类点的平均值,算出新的中心点
计算新的中心点与旧的中心点的平均距离,看平均距离是否符合误差范围,
符合就输出结果,不符合,就继续遍历


代码实现

import random
import copy
import matplotlib.pyplot as plt
class KMeans():
    def __init__(self,data,k=1):
        self.__data = data  # 存放输入点数据
        self.__k = k  # 中心点个数
        self.__centerPoint = []  # 中心点
        self.__result = []  # 对输入点进行分类的结果
        for i in range(k):
            self.__result.append([])   #[[] [] [] [] [] ]

    # 随机取k个中心点
    def randomCenterPoint(self):
        for i in range(self.__k):
            # 随机出k个下标
            index = random.randint(0,len(self.__data)-1)
            # 判断取出的数是否在中心点中  防止取重复数  使中心点重复
            if self.__data[
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值