kmeans算法
KMeans算法
基本思想是初始随机给定K个簇中心,按照最邻近原则把待分类样本点分到各个簇。然后按平均法重新计算各个簇的质心,从而确定新的簇心。一直迭代,直到簇心的移动距离小于某个给定的值。
k-means 算法基本步骤
算法分析和评价
# coding:utf-8
import numpy as np
import matplotlib.pyplot as plt def dis(x, y): #计算距离
return np.sum(np.power(y - x, 2)) def dataN(length,k):#生成数据
z=range(k)
c=[5]*length
a1= [np.sin(i*2*np.pi/k) for i in range(k)]
a2= [np.cos(i*2*np.pi/k) for i in range(k)]
x=[[[i*j + np.random.uniform(0,5)]for i in c]for j in a1]
y=[[[i*j + np.random.uniform(0,5)]for i in c]for j in a2]
return x,y,z def showP(x,y,z):#原始点作图
plt.figure(1)
color=['or', 'ob', 'og', 'ok', '^r', '+r', 'sr', 'dr', '<r', 'pr']
for j in z:
for i in xrange(length):
plt.plot(x[j][i], y[j][i],color[j]) def initCentroids(dataSet, k):#初始化中心点
n, d = dataSet.shape
centroids = np.zeros((k, d))
for i in range(k):
index = int(np.random.uniform(0, n))
centroids[i] = dataSet[index]
return centroids def kmeans(dataSet, k): #kmeans算法
n = dataSet.shape[0]
clusterAssment = np.mat(np.zeros((n, 2)))
clusterChanged = True
centroids = initCentroids(dataSet, k)
while clusterChanged:
clusterChanged = False
for i in xrange(n):
distance=[[dis(centroids[j], dataSet[i])] for j in range(k)]
minDist= min(distance)
minIndex=distance.index(minDist)
if clusterAssment[i, 0] != minIndex:
clusterChanged = True
clusterAssment[i] = minIndex, minDist[0]
for j in range(k):
pointsInCluster = dataSet[np.nonzero(clusterAssment[:, 0]== j)[0]]
centroids[j] = np.mean(pointsInCluster, axis = 0)
return centroids, clusterAssment def showCluster(dataSet, k, centroids, clusterAssment):#结果作图
plt.figure(2)
n=len(dataSet)
mark = ['or', 'ob', 'og', 'ok', '^r', '+r', 'sr', 'dr', '<r', 'pr']
for i in xrange(n):
markIndex = int(clusterAssment[i, 0])
plt.plot(dataSet[i, 0], dataSet[i, 1], mark[markIndex])
mark = ['Dr', 'Db', 'Dg', 'Dk', '^b', '+b', 'sb', 'db', '<b', 'pb']
for i in range(k):
plt.plot(centroids[i, 0], centroids[i, 1], mark[i], markersize =8)
plt.show() length=200
k=8 #k<=8
x,y,z=dataN(length,k)
showP(x,y,z) dataSet=np.mat(zip(np.reshape(x,(1,length*k))[0],np.reshape(y,(1,length*k))[0]))
centroids, clusterAssment = kmeans(dataSet, k)
showCluster(dataSet, k, centroids, clusterAssment)
kmeans算法的更多相关文章
- kmeans算法并行化的mpi程序
用c语言写了kmeans算法的串行程序,再用mpi来写并行版的,貌似参照着串行版来写并行版,效果不是很赏心悦目~ 并行化思路: 使用主从模式.由一个节点充当主节点负责数据的划分与分配,其他节点完成本地 ...
- 【原创】数据挖掘案例——ReliefF和K-means算法的医学应用
数据挖掘方法的提出,让人们有能力最终认识数据的真正价值,即蕴藏在数据中的信息和知识.数据挖掘 (DataMiriing),指的是从大型数据库或数据仓库中提取人们感兴趣的知识,这些知识是隐含的.事先未知 ...
- kmeans算法c语言实现,能对不同维度的数据进行聚类
最近在苦于思考kmeans算法的MPI并行化,花了两天的时间把该算法看懂和实现了串行版. 聚类问题就是给定一个元素集合V,其中每个元素具有d个可观察属性,使用某种算法将V划分成k个子集,要求每个子集内 ...
- kmeans算法实践
这几天学习了无监督学习聚类算法Kmeans,这是聚类中非常简单的一个算法,它的算法思想与监督学习算法KNN(K近邻算法)的理论基础一样都是利用了节点之间的距离度量,不同之处在于KNN是利用了有标签的数 ...
- 二分K-means算法
二分K-means聚类(bisecting K-means) 算法优缺点: 由于这个是K-means的改进算法,所以优缺点与之相同. 算法思想: 1.要了解这个首先应该了解K-means算法,可以看这 ...
- 视觉机器学习------K-means算法
K-means(K均值)是基于数据划分的无监督聚类算法. 一.基本原理 聚类算法可以理解为无监督的分类方法,即样本集预先不知所属类别或标签,需要根据样本之间的距离或相似程度自动进行分类.聚 ...
- EM算法(1):K-means 算法
目录 EM算法(1):K-means 算法 EM算法(2):GMM训练算法 EM算法(3):EM算法运用 EM算法(4):EM算法证明 EM算法(1) : K-means算法 1. 简介 K-mean ...
- K-means算法及文本聚类实践
K-Means是常用的聚类算法,与其他聚类算法相比,其时间复杂度低,聚类的效果也还不错,这里简单介绍一下k-means算法,下图是一个手写体数据集聚类的结果. 基本思想 k-means算法需要事先指定 ...
- K-means算法和矢量量化
语音信号的数字处理课程作业——矢量量化.这里采用了K-means算法,即假设量化种类是已知的,当然也可以采用LBG算法等,不过K-means比较简单.矢量是二维的,可以在平面上清楚的表示出来. 1. ...
- [聚类算法] K-means 算法
聚类 和 k-means简单概括. 聚类是一种 无监督学习 问题,它的目标就是基于 相似度 将相似的子集聚合在一起. k-means算法是聚类分析中使用最广泛的算法之一.它把n个对象根据它们的属性分为 ...
随机推荐
- ios上架
1.登录developer.apple.com 2.点击member center后 进下图 3.点击certificates Identifiers进下图 4.点击Certificates进下图,首 ...
- Ubuntu 14.10 下查看系统硬件信息(实例详解)
linux查看系统的硬件信息,并不像windows那么直观,这里我罗列了查看系统信息的实用命令,并做了分类,实例解说. cpu lscpu命令,查看的是cpu的统计信息. blue@blue-pc:~ ...
- Hash索引和B树索引
要知道磁盘结构优化访问的关键在于以block为单位(比如每次读取一个页面) 这两种索引差别也就在聚集到一个block的标准: B树聚集到一个block是因为关键字在一个范围内,关键字在block内的排 ...
- HDOJ-三部曲一(搜索、数学)-1005-Dungeon Master
Dungeon Master Time Limit : 2000/1000ms (Java/Other) Memory Limit : 131072/65536K (Java/Other) Tot ...
- PHP Filter
PHP filters are used to validate and sanitize external input. Validating data is determine if the da ...
- PHP extract() 函数
PHP extract() 函数从数组中把变量导入到当前的符号表中. 对于数组中的每个元素,键名用于变量名,键值用于变量值. 第二个参数 type 用于指定当某个变量已经存在,而数组中又有同名元素时, ...
- 解决spring-mvc @responseBody注解返回json 乱码问题
在使用spring-mvc的mvc的时候既享受它带来的便捷,又头痛它的一些问题,比如经典的中文乱码问题.现在是用json作为客户端和服务端 的数据交换格式貌似很流行,但是在springmvc中有时候会 ...
- word文档快速取消图片的链接
快捷键Ctrl+Shift+F9 首先,Ctrl+A全选文章或者用鼠标拖动的方法选中部分文中: 批量删除word文档中的超级链接然后,同时按下键盘上的Ctrl+Shift+F9. 效果就出现了! 宏方 ...
- suse linux修改hostname
SUSELinux中修改hostname需要修改以下两个文件 $vi /etc/HOSTNAME $vi /etc/hosts 然后重启系统即可.
- Web应用开发工具及语言需要具备的功能探索
1 前言 最近一个多月在做Web项目,用到的技术有(也不算泄漏公司机密吧): 后台:Struts 2(with JSP/FreeMarker).Spring.Hibernate.MySQL.Web S ...