k means sse python_python实现kMeans算法

本文介绍了k均值聚类算法的原理和Python实现,包括随机初始化质心、数据点分配到最近的簇、更新质心的过程。同时,探讨了k均值可能陷入局部最优的问题,并提出二分k均值算法,通过不断分裂降低误差平方和(SSE)以寻找更优聚类。最后给出了Python代码示例和数据集下载链接。
摘要由CSDN通过智能技术生成

聚类是一种无监督的学习,将相似的对象放到同一簇中,有点像是全自动分类,簇内的对象越相似,簇间的对象差别越大,则聚类效果越好。

1、k均值聚类算法

k均值聚类将数据分为k个簇,每个簇通过其质心,即簇中所有点的中心来描述。首先随机确定k个初始点作为质心,然后将数据集分配到距离最近的簇中。然后将每个簇的质心更新为所有数据集的平均值。然后再进行第二次划分数据集,直到聚类结果不再变化为止。

伪代码为

随机创建k个簇质心

当任意一个点的簇分配发生改变时:

对数据集中的每个数据点:

对每个质心:

计算数据集到质心的距离

将数据集分配到最近距离质心对应的簇

对每一个簇,计算簇中所有点的均值并将均值作为质心

python实现

import numpy as np

import matplotlib.pyplot as plt

def loadDataSet(fileName):

dataMat = []

with open(fileName) as f:

for line in f.readlines():

line = line.strip().split('\t')

dataMat.append(line)

dataMat = np.array(dataMat).astype(np.float32)

return dataMat

def distEclud(vecA,vecB):

return np.sqrt(np.sum(np.power((vecA-vecB),2)))

def randCent(dataSet,k):

m = np.shape(dataSet)[1]

center = np.mat(np.ones((k,m)))

for i in range(m):

centmin = min(dataSet[:,i])

centmax = max(dataSet[:,i])

center[:,i] = centmin + (centmax - centmin) * np.random.rand(k,1)

return center

def kMeans(dataSet,k,distMeans = distEclud,crea

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值