Python3 kmeans 聚类算法
# -*- 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 聚类算法的更多相关文章
- K-Means 聚类算法
K-Means 概念定义: K-Means 是一种基于距离的排他的聚类划分方法. 上面的 K-Means 描述中包含了几个概念: 聚类(Clustering):K-Means 是一种聚类分析(Clus ...
- k-means聚类算法python实现
K-means聚类算法 算法优缺点: 优点:容易实现缺点:可能收敛到局部最小值,在大规模数据集上收敛较慢使用数据类型:数值型数据 算法思想 k-means算法实际上就是通过计算不同样本间的距离来判断他 ...
- K-Means 聚类算法原理分析与代码实现
前言 在前面的文章中,涉及到的机器学习算法均为监督学习算法. 所谓监督学习,就是有训练过程的学习.再确切点,就是有 "分类标签集" 的学习. 现在开始,将进入到非监督学习领域.从经 ...
- Kmeans聚类算法原理与实现
Kmeans聚类算法 1 Kmeans聚类算法的基本原理 K-means算法是最为经典的基于划分的聚类方法,是十大经典数据挖掘算法之一.K-means算法的基本思想是:以空间中k个点为中心进行聚类,对 ...
- 机器学习六--K-means聚类算法
机器学习六--K-means聚类算法 想想常见的分类算法有决策树.Logistic回归.SVM.贝叶斯等.分类作为一种监督学习方法,要求必须事先明确知道各个类别的信息,并且断言所有待分类项都有一个类别 ...
- 转载: scikit-learn学习之K-means聚类算法与 Mini Batch K-Means算法
版权声明:<—— 本文为作者呕心沥血打造,若要转载,请注明出处@http://blog.csdn.net/gamer_gyt <—— 目录(?)[+] ================== ...
- 沙湖王 | 用Scipy实现K-means聚类算法
沙湖王 | 用Scipy实现K-means聚类算法 用Scipy实现K-means聚类算法
- Matlab中K-means聚类算法的使用(K-均值聚类)
K-means聚类算法采用的是将N*P的矩阵X划分为K个类,使得类内对象之间的距离最大,而类之间的距离最小. 使用方法:Idx=Kmeans(X,K)[Idx,C]=Kmeans(X,K) [Idx, ...
- 运用三角不等式加速Kmeans聚类算法
运用三角不等式加速Kmeans聚类算法 引言:最近在刷<数据挖掘导论>,第九章, 9.5.1小节有提到,可以用三角不等式,减少不必要的距离计算,从而达到加速聚类算法的目的.这在超大数据量的 ...
随机推荐
- MFC:ID命名和数字约定
今天早上双击一个刚刚编译完成的应用程序,界面刚刚显示,又自动触发了一个菜单事件,打开了一个网页.真的很意外.关闭窗口,再次双击,又自动打开了一个网页,再关闭,再双击,又不自动打开网页了.这是什么情况? ...
- 收藏:Windows消息机制
百度百科介绍的windows消息机制也不错:http://baike.baidu.com/view/672379.htm Windows的应用程序一般包含窗口(Window),它主要为用户提供一种可视 ...
- P2868 [USACO07DEC]观光奶牛Sightseeing Cows
P2868 [USACO07DEC]观光奶牛Sightseeing Cows [](https://www.cnblogs.com/images/cnblogs_com/Tony-Double-Sky ...
- Nginx的基本配置案例
Nginx的基本配置案例 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.Nginx配置虚拟主机 .操作系统环境 [root@yinzhengjie ~]# cat /etc ...
- SQL语句(七)简单查询
--简单信息查询 --例1 查询所有学生的信息 --学生 -- Student --所有学生 -- 不限定班级.性别.年龄等条件 --所有信息 -- 所有字段,* select * from stud ...
- info replication
主Redis设置值:redis-cli -h 192.168.18.121 -p 63800 -a tinywan123456 登陆从1:redis-cli -h 192.168.18.121 -p ...
- 20155210潘滢昊 2016-2017-2 《Java程序设计》第8周学习总结
20155210 2016-2017-2 <Java程序设计>第8周学习总结 教材学习内容总结 认识NIO Channel: 衔接数据节点(与IO中的流对比) isOpen close R ...
- 20155226 2016-2017-2 《Java程序设计》第6周学习总结
20155226 2016-2017-2 <Java程序设计>第6周学习总结 教材学习内容总结 第十章 输入/输出 10.1 InputStream与OutputStream 1 . 串流 ...
- 【两分钟教程】如何更改Xcode项目名称
注意:视频在最后,还少了一个步骤:将Xcode中的名字叫做<企信通>的虚拟文件夹删掉,然后重新从硬盘中添加进来,这样就彻底完成了更改Xcode项目名称的目的.
- HDU 1229 还是A+B(A+B陶冶情操)
题目连接:http://acm.hdu.edu.cn/showproblem.php?pid=1229 解题报告:A+B #include<cstdio> int main() { int ...