机器学习实战笔记——k-means算法

本文详细介绍了k-均值算法的原理,包括簇的定义、算法流程,并通过实例展示了代码实现。还探讨了算法的敏感性问题,如初始值选择、噪声和离群点的影响。此外,介绍了二分k-均值算法作为改进方法,以解决局部最优解的问题,提高聚类效率。
摘要由CSDN通过智能技术生成

一、算法原理

    k-均值算法是一种无监督学习算法。在输入数据集中不包括标签,通过k-均值算法为每个样本添加标签,相同标签样本具有共同特征。

    对于数据集D={x1,x2,...,xm},划分为k个簇C1,C2,...,Ck。对象与该簇的距离用dist(p,Ci)表示,其中dist(x,y)是两点x和y之间的欧式距离。最小化平方差

也就是对于每个簇中的每个对象,求对象到簇中心距离的平方,然后求和。E越小说明簇越紧凑,聚类效果越好。


k-均值算法流程如下:

(1)先在D中随机选取k个对象,作为k个簇的初始值;

(2)对剩下的每个对象,按照欧氏距离最小原则,将它分配到最相似的一个簇(用距离刻画);

(3)重新计算每个簇的均值作为新的聚类中心

(4)重复(2)(3)步骤,直到中心值不再变化或者变化很小时,聚类完成。

输入:
  k:簇的数目
  D:包含n个对象的数据集
输出:k个簇的集合
方法:
(1)从D中任意选择k个对象作为初始簇中心;
(2)repeat
(3)  根据簇中对象的均值,将每个对>象分配到最相似的簇;
(4)  更新簇均值,即重新计算每个簇中对象的均值;
(5)util不在发生变化;

2、代码部分



import numpy as np

def loadDataSet(fileName):      #general function to parse tab -delimited floats
    dataMat = []                #assume last column is target value
    fr = open(fileName)
    for line in fr.readlines():
        curLine = line.strip().split('\t')
        #fltLine = map(flo
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值