# -*- 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. 2017年8道php面试题(真题+答案)

    1.<?php echo count(strlen(“http://php.net”)); ?>的执行结果是? 答案:1 .如果var是普通变量,则返回1.正常情况下返回var中的元素或属 ...

  2. OpenStack 存储服务 Cinder存储节点部署LVM(十六)

    Cinder存储节点部署 部署在192.168.137.12主机 1.安装lvm2软件包 yum install lvm2 -y 2.启动LVM的metadata服务并且设置该服务随系统启动 syst ...

  3. nova-api源码分析(APP的调用)

    调用APIRouter的 __call__函数 nova/wsgi.py class Router(object): def __init__(self, mapper): self.map = ma ...

  4. CF876 D 树状数组

    大意就是放n个硬币,每次放一个计算下这种情况下的操作次数,一个操作为从左到右扫描,如果一个硬币右边是空的,就将硬币后移,否则该次操作停止. 显然发现对于一个情况,我们只要考虑最右边的空位的左侧有几个硬 ...

  5. Spring RedisTemplate操作-事务操作(9)

    @Autowired @Qualifier("redisTemplate") private RedisTemplate<String, String> stringr ...

  6. kombu源码Producer收获一

    celery内置了kombu库,看了一下kombu的源码,从官网最简单的一个例子来分析---消息发布,源码如下: from __future__ import absolute_import, uni ...

  7. [转载]详解主流浏览器多进程架构:Chrome、IE

    http://www.cnbeta.com/articles/109595.htm 随着Web浏览器重要性的日益突出,恶意软件.木马.间谍软件等网络攻击也呈现逐渐的上升.而面对 如此众多的潜在威胁,为 ...

  8. struts的理解

    1.struts是一个按MVC模式设计的Web层框架,其实他就是一个大大的servlet,这个Servlet名为ActionServlet,或是ActionServlet的子类.我们可以在web.xm ...

  9. 使用sso(cas)的时候报单点登录service不匹配问题分析及解决

    最近在使用portal做企业门户网站,其中使用了sso.在集成了多个应用之后在portal中点击集成的应用报错 2017-05-31 08:37:16,950 ERROR [org.jasig.cas ...

  10. shiro登录成功之后跳转原路径

    通过 WebUtils.getSavedRequest(request) 来获取shiro保存在session登录之前的url 1:java Controller代码 @PostMapping(&qu ...