K-means算法

算法描述输入:簇的数目k;包含n个对象的数据集D。输出:k个簇的集合。
摘要由CSDN通过智能技术生成
算法描述

输入:簇的数目k;包含n个对象的数据集D。

输出:k个簇的集合。

K-means算法接受输入量k,然后将n种数据对象划分为 k组聚类,使得所获得的聚类满足:同一聚类中的对象相似度较高;而不同聚类中的对象相似度较小。

聚类相似度是利用各聚类中对象的均值所获得一个“中心对象”来进行计算的。

无监督学习算法

算法基本步骤
  1. 从 n个数据对象任意选择 k 个对象作为初始聚类中心;
  2. 根据每个聚类对象的均值,计算每个对象k个中心点的距离,并根据最小距离重新对相应对象进行划分,把对象划分到与他们最近的中心所代表的类别中去;
  3. 对于每一个中心点,遍历他们所包含的对象,计算这些对象所有维度的和的均值,获得新的中心点;
  4. 计算当前状态下的损失(用来计算损失的函数叫做Cost Function,即价值函数),如果当前损失比上一次迭代的损失相差大于某一值(如1),则继续执行第2、3步,知道连续两次的损失差为某一设定值为止(即达到最优,通常设为1)
距离函数

这里使用的是最简单的欧氏距离。计算公式如下:


损失函数(Cost Function)

每一次选取好新的中心点,我们就要计算一下当前选好的中心点损失为多少,这个损失代表着偏移量,越大说明当前聚类的效果越差,计算公式称为(Within-Cluster Sum of Squares, WCSS):

其中,xi表示某一对象,ck表示该对象所属类别的中心点。整个式子的含义就是对各个类别下的对象,求对象与中心点的欧式距离的平方,把所有的平方求和就是L(C)。

评价标准

采用聚类的数据,通常没有已知的数据分类标签,所以通常就不能用监督学习中的正确率、精确度、召回度来计算了(如果有分类标签的话,也是可以计算的)。

常用于聚类效果评价的指标为:Davies Bouldin Index,它的表达式可以写为:


其中,ρi和 ρj 都表示i,j两个分类中的所有对象到中心点的平均距离。而分母中的ci和cj分别表示i,j两个分类的中心点之间的距离。

整个表达式的含义就是,聚类效果越好,两个分类间的距离应该越远,分类内部越密集。

函数扫盲:

zeros(shape[,dtype,order]):依据给点形状和类型返回一个新的元素全为0的数组。

zeros((k,dim))……k行dim列[0.]

map(func,seq1[,seq2...]):将函数func作用于给定序列的每个元素,并用一个列表来提供返回值。如果func为None,func表现为身份函数,返回一个含有每个序列元素集合的n个元组的列表

kmeans算法实践

先建立kmeans.py的脚本文件,里面有四个函数:欧氏距离的计算、初始化类聚中心、k-means类聚、可视化函数。代码如下:

from numpy import *
import time
import matplotlib.pyplot as pyplot
from math import sqrt
#caculate Euclidean distance
def eucDistance(vec1,vec2):
	return sqrt(sum(pow(vec2-vec1,2)))

#init centroids with 
  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值