# -*- coding: utf-8 -*-
"""
Created on Wed Jan 10 19:18:56 2018 @author: markli
"""
import numpy as np;
'''
kmeans 算法实现
算法原理
1、随机选择k个点作为聚类中心点,进行聚类
2、求出聚类后的各类的 中心点
3、由中心点作为新的聚类中心点,再次进行聚类
4、比较前后两次的聚类中心点是否发生变化,若没有变化则停止,否则重复2,3,4
''' def Kmeans(X,k,maxiter):
'''
使用Kmeans均值聚类对数据集Data进行聚类
X 数据集
k 聚类中心个数
maxiter 最大迭代次数
'''
m,n = X.shape;
#向数据集中添加一列,用来存放类别号
Dataset = np.zeros((m,n+1));
Dataset[:,:-1] = X; #随机选取k 个聚类中心
randomCenterIndex = np.random.randint(m,size=k);
center = Dataset[randomCenterIndex];
center[:,-1] = range(1,k+1); #初始聚类
oldCenter = np.copy(center);
DataClass(Dataset,center);
center = getCenter(Dataset,k); itertor = 1;
while not isStop(oldCenter,center,itertor,maxiter):
oldCenter = np.copy(center);
DataClass(Dataset,center);
center = getCenter(Dataset,k);
itertor = itertor + 1;
print("数据集聚类结果",Dataset);
print("聚类中心点",center); def DataClass(Dataset,center):
'''
对数据集进行聚类或者类标签更新
Dataset 数据集
center 聚类中心点 最后一列为聚类中心点的分类号
'''
n = Dataset.shape[0];
k = center.shape[0];
for i in range(n):
lable = center[0,-1];
mindistance = np.linalg.norm(Dataset[i,:-1]-center[0,:-1],ord=2);
for j in range(1,k):
distance = np.linalg.norm(Dataset[i,:-1]-center[j,:-1],ord=2);
if(distance < mindistance):
mindistance = distance;
lable = center[j,-1];
Dataset[i,-1] = lable; def getCenter(Dataset,k):
'''
获得数据集的k个聚类中心,数据集的最后一列是当前的分类号
Dataset 数据集
k 聚类中心点个数
'''
center = np.ones((k,Dataset.shape[1]));
for i in range(1,k+1):
DataSubset = Dataset[Dataset[:,-1] == i,:];
center[i-1] = np.mean(DataSubset,axis=0);
return center; def isStop(oldCenter,newCenter,itertor,maxiter):
'''
判断是否停止
oldCenter 前一次聚类的聚类中心
newCenter 新产生的聚类中心
itertor 当前迭代次数
maxitor 最大迭代次数
''' if(itertor >= maxiter):
return True; return np.array_equal(oldCenter,newCenter); X = np.array([[1,1],[2,1],[4,3],[5,4]]);
print(X.shape);
Kmeans(X,2,10);

Python3 kmeans 聚类算法的更多相关文章

  1. K-Means 聚类算法

    K-Means 概念定义: K-Means 是一种基于距离的排他的聚类划分方法. 上面的 K-Means 描述中包含了几个概念: 聚类(Clustering):K-Means 是一种聚类分析(Clus ...

  2. k-means聚类算法python实现

    K-means聚类算法 算法优缺点: 优点:容易实现缺点:可能收敛到局部最小值,在大规模数据集上收敛较慢使用数据类型:数值型数据 算法思想 k-means算法实际上就是通过计算不同样本间的距离来判断他 ...

  3. K-Means 聚类算法原理分析与代码实现

    前言 在前面的文章中,涉及到的机器学习算法均为监督学习算法. 所谓监督学习,就是有训练过程的学习.再确切点,就是有 "分类标签集" 的学习. 现在开始,将进入到非监督学习领域.从经 ...

  4. Kmeans聚类算法原理与实现

    Kmeans聚类算法 1 Kmeans聚类算法的基本原理 K-means算法是最为经典的基于划分的聚类方法,是十大经典数据挖掘算法之一.K-means算法的基本思想是:以空间中k个点为中心进行聚类,对 ...

  5. 机器学习六--K-means聚类算法

    机器学习六--K-means聚类算法 想想常见的分类算法有决策树.Logistic回归.SVM.贝叶斯等.分类作为一种监督学习方法,要求必须事先明确知道各个类别的信息,并且断言所有待分类项都有一个类别 ...

  6. 转载: scikit-learn学习之K-means聚类算法与 Mini Batch K-Means算法

    版权声明:<—— 本文为作者呕心沥血打造,若要转载,请注明出处@http://blog.csdn.net/gamer_gyt <—— 目录(?)[+] ================== ...

  7. 沙湖王 | 用Scipy实现K-means聚类算法

    沙湖王 | 用Scipy实现K-means聚类算法 用Scipy实现K-means聚类算法

  8. Matlab中K-means聚类算法的使用(K-均值聚类)

    K-means聚类算法采用的是将N*P的矩阵X划分为K个类,使得类内对象之间的距离最大,而类之间的距离最小. 使用方法:Idx=Kmeans(X,K)[Idx,C]=Kmeans(X,K) [Idx, ...

  9. 运用三角不等式加速Kmeans聚类算法

    运用三角不等式加速Kmeans聚类算法 引言:最近在刷<数据挖掘导论>,第九章, 9.5.1小节有提到,可以用三角不等式,减少不必要的距离计算,从而达到加速聚类算法的目的.这在超大数据量的 ...

随机推荐

  1. (转)java中使用memcache

    背景:公司项目中使用java和memcache相结合来搭建缓存,所以要了解下缓存的基础知识! 1 了解memcache 1.1 基础知识 什么是Memcache? Memcache集群环境下缓存解决方 ...

  2. Eclipse启动项目正常,放到tomcat下单独启动就报错的 一例

    一个老的ssh的项目,进行二次开发(增加一些新功能)后, 首先用Eclipse中集成的Tomcat启动没有任何问题,但是把启动后的webapps下得目录放到 windows的普通tomcat下单独启动 ...

  3. div 内table 居中实现代码

    有时候在一个div里面添加一个表格,如想让它居住排列,需要做如下的操作. css代码:   代码如下: #dlgReply { /*display: table-cell; text-align: c ...

  4. Java流程控制---个人参考资料

    前言:我写博客的目的很简单,很单纯,把自己平时学的东西,放到博客上,空闲的时间,就可以看看自己曾经看到过得东西. Java流程控制语句:判断结构.选择结构.循环结构 一.判断结构 判断结构包括if 分 ...

  5. Spring Boot 1.4 单元测试

    在1.3中单元测试这样子的类似代码: // SpringJUnit支持,由此引入Spring-Test框架支持! @RunWith(SpringJUnit4ClassRunner.class) // ...

  6. CentOS搭建Vsftpd服务器

    转自:http://alca0126.blog.51cto.com/7826974/1754906 一.安装vsftpd服务相关组件 需要安装组件vsftpd pam db4 db4-utils [r ...

  7. eclipse 关闭控制台 自动弹出

    Eclipse的控制台console有时候经常的跳出来,非常的烦人! 尤其是在调试期间跳出,以下是分享一下设置操作: 让它不经常的调出来,可以按下面的操作去掉它: windows  ->   p ...

  8. git 查看一个分支是否被合并过

    1.查看该分支的提交历史 git log 分支名 2.git log master |grep comitid 如果包含,就证明已经合并过 3.git branch -d 分支名,如果报错,就是没合并 ...

  9. Extending Markov to Hidden Markov

    Extending Markov to Hidden Markov a tutorial on hidden markov models, Hidden Markov Models, hidden m ...

  10. 关于Asp.Net中的编程实现下载

    经常在论坛看见有人求Asp.Net中编程实现下载的代码,有些还希望能断点续传什么的.其实问题的关键在于权限.B/S和C/S不仅仅是外观上的区别而已. 下载,顾名思义是客户端要下,所以载.你硬塞給人家那 ...