# -*- 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. 解题:CF1055F Tree and XOR

    题面 树上路径是可以通过到根的路径和LCA差出来的,所以建立一棵Trie树按位贪心即可......吗? 发现空间并不够,需要我们每层现建,要记录每个数和它异或答案之后在这一层插进去的编号 #inclu ...

  2. (转)灵活控制 Hibernate 的日志或 SQL 输出,以便于诊断

    背景:项目开发需要.之前对于hibernate日志输出,log4j的绑定,之间的关系一直不是很清楚.终于找到一篇介绍的很详细的文章. 文章出处:https://unmi.cc/hibernate-lo ...

  3. 如何获取codeforces的完整数据

    推荐: 如何获取codeforces的完整数据?(玄学方法) http://www.cnblogs.com/Saurus/p/6220513.html

  4. python的WSGI接口

    WSGI:Web Server Gateway Interface. WSGI是为python语言定义的web服务器和web应用程序或框架之间的一种简单而实用的接口.wsgi是一个web组件的接口规范 ...

  5. java基础基础总结----- 随机数(产生四个随机数)

    前言:在开发的时候经常会遇见,一些验证码登录,其实这些东西,很简单.我曾经开发过一个验证码登录的页面,那时用的插件.但是作为一个合格的开发者,要了解其内部的核心知识,有些东西,可以不深入了解,但是要做 ...

  6. KVM安装、镜像创建(一)

    环境准备 VMware Workstation Pro启动虚拟化 查看启动的系统是否支持vmx或svm grep -E '(vmx|svm)' /proc/cpuinfo 备注:操作系统centos ...

  7. Hadoop源码阅读-HDFS-day2

    昨天看到了AbstractFileSystem,也知道应用访问文件是通过FileContext这个类,今天来看这个类的源代码,先看下这个类老长的注释说明 /** * The FileContext c ...

  8. telegraf、influxDB、Grafana的安装与基本使用

    目的理解influxDB的数据收集原理和方法为使用grafana分析数据及展示结作好准备介绍[收集数据] Telegraf 是一个用 Go 编写的代理程序,可收集系统和服务的统计数据,并写入到 Inf ...

  9. shape-outside 矩形之外的另一种思路

    http://docs.webplatform.org/wiki/css/properties/shape-outside

  10. mybatis动态sql——(六)

    0     什么是动态sql mybatis核心 对sql语句进行灵活操作,通过表达式进行判断,对sql进行灵活拼接.组装. 通过mybatis提供的各种标签方法实现动态拼接sql.