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小节有提到,可以用三角不等式,减少不必要的距离计算,从而达到加速聚类算法的目的.这在超大数据量的 ...
随机推荐
- python---基础知识回顾(一)(引用计数,深浅拷贝,列表推导式,lambda表达式,命名空间,函数参数逆收集,内置函数,hasattr...)
一:列表和元组(引用计数了解,深浅拷贝了解) 序列:序列是一种数据结构,对其中的元素按顺序进行了编号(从0开始).典型的序列包括了列表,字符串,和元组 列表是可变的(可以进行修改),而元组和字符串是不 ...
- 51nod 1258 序列求和 V4
http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1258 1258 序列求和 V4 基准时间限制:8 秒 空间限制:131 ...
- day63_SpringMVC学习笔记_01
1.JAVAEE体系结构 JAVAEE体系结构图如下所示: 2.什么是springmvc? 什么是mvc? Model1 Model2 SpringMVC是什么? SpringMVC是一个web层mv ...
- Sublime Text 之运行 js 方法[2015-5-6更新mac下执行js]
昨天说完<Sublime Text 2 绿化与汉化 [Windows篇]>,今天我们来说说怎么用st直接运行 js 吧.群里的小伙伴一直对我的 ST 能直接运行js感到非常好奇,今天我就公 ...
- CS229 笔记08
CS229 笔记08 Kernel 回顾之前的优化问题 原始问题为: \[ \min_{w,b} \frac{1}{2}||w||^2\\[1.5em] {\text{s.t.}}y^{(i)}\le ...
- HttpClient与HttpUrlConnection下载速度比较
Android有两套http的API,刚开始使用网络编程时多少有些迷惑到底用哪个好呢?其实孰优孰劣无需再争论,google已经指出HttpUrlConnection是Android更优的选择,并在SD ...
- Codeforces 237 div2 B. Marathon(关于精度损失的教训)
题目链接:http://codeforces.com/contest/404/problem/B?csrf_token=6292hf3e1h4g5e0d16a996ge6bgcg7g2 解题报告:一个 ...
- 面积并+扫描线 覆盖的面积 HDU - 1255
题目链接:https://cn.vjudge.net/problem/HDU-1255 题目大意:中文题目 具体思路:和上一篇的博客思路差不多,上一个题求的是面积,然后我们这个地方求的是啊覆盖两次及两 ...
- lucene查询索引之QueryParser解析查询——(八)
0.语法介绍:
- 【ARTS】01_06_左耳听风-20181217~1223
ARTS: Algrothm: leetcode算法题目 Review: 阅读并且点评一篇英文技术文章 Tip/Techni: 学习一个技术技巧 Share: 分享一篇有观点和思考的技术文章 Algo ...