K-meas聚类算法

1、K-means算法简介

k-means算法是一种聚类算法,所谓聚类,即根据相似性原则,将具有较高相似度的数据对象划分至同一类簇,将具有较高相异度的数据对象划分至不同类簇。聚类与分类最大的区别在于,聚类过程为无监督过程,即待处理数据对象没有任何先验知识,而分类过程为有监督过程,即存在有先验知识的训练数据集。

2、K-means算法原理

k-means算法中的k代表类簇个数,means代表类簇内数据对象的均值(这种均值是一种对类簇中心的描述),因此,k-means算法又称为k-均值算法。k-means算法是一种基于划分的聚类算法,以距离作为数据对象间相似性度量的标准,即数据对象间的距离越小,则它们的相似性越高,则它们越有可能在同一个类簇。数据对象间距离的计算有很多种,k-means算法通常采用欧氏距离来计算数据对象间的距离。流程图如下:

3、k-means算法优缺点分析

  • 优点: 算法简单易实现;
  • 缺点: 需要用户事先指定类簇个数; 聚类结果对初始类簇中心的选取较为敏感; 容易陷入局部最优; 只能发现球形类簇;

4、算法过程如下

1)从N个样本随机选取K个样本作为中心点
2)对剩余的每个样本测量其到每个中心点的距离,并把它归到最近的中心点的类
3)重新计算已经得到的各个类的中心点
4)迭代2~3步直至新的中心点与原中心点相等或小于指定阈值,算法结束

5、c语言代码实现

#include"stdio.h"
#include"stdlib.h"
#include<iostream>
#include<math.h>
using namespace std;
#define N 11
#define k 3
typedef struct{float x;float y;
}Point;
Point point[N] = {{ 2.0, 9.0 }, { 1.0, 5.0 }, { 8.0, 4.0 }, { 5.0, 8.0 }, {7.0,5.0},{ 6.0, 4.0 }, { 1.0, 2.0 }, { 4.0, 9.0 }, { 7.0, 3.0 }, { 1.0, 3.0 }, {3.0,9.0}
};
int center[N];
Point mean[k];
float getdistance(Point point1, Point point2);
void cluster();
float gete();
void getmean(int center[N]);
int main()
{//初始化k个中心点,这里选择给定中心点,而不是随机生成,需要更多的先验知识//若没有相关先验知识,可选择随机生成初始中心点mean[0].x = point[0].x;mean[0].y = point[0].y;mean[1].x = point[3].x;mean[1].y = point[3].y;mean[2].x = point[6].x;mean[2].y = point[6].y;int number=0;float temp1, temp2;//第一次聚类cluster();number++;//number统计进行了几次聚类//对第一次聚类的结果进行误差平方和的计算   temp1 = gete();printf("the error1 is:%f\n", temp1);//针对第一次聚类的结果,重新计算聚类中心getmean(center);//第二次聚类cluster();number++;temp2 = gete();printf("the error2 is:%f\n", temp2);//迭代循环,直到两次迭代误差的差值在一定阈值范围内,则迭代停止while (fabs(temp1 - temp2) > 0.5){temp1 = temp2;getmean(center);cluster();temp2 = gete();number++;printf("the error%d is:%f\n", number,temp2);}printf("the total number of cluster is:%d\n", number);system("pause");return 0;
}
//计算距离函数,欧式距离
float getdistance(Point point1, Point point2)
{float d;d = sqrt((point1.x - point2.x)*(point1.x - point2.x) + (point1.y - point2.y)*(point1.y - point2.y));return d;
}
//聚类函数
void cluster()
{float distance[N][k];for (int i = 0; i < N; i++){for (int j = 0; j < k; j++){distance[i][j] = getdistance(point[i], mean[j]);}float min = 9999.0;for (int j = 0; j < k; j++){if (distance[i][j] < min){min = distance[i][j];center[i] = j;}}printf("(%.0f,%.0f)\t in cluster-%d\n", point[i].x, point[i].y, center[i] + 1);}
}
//聚类后误差计算函数
float gete()
{float cnt=0, sum=0;for (int i = 0; i < N; i++){for (int j = 0; j < k; j++){if (center[i] == j){cnt = getdistance(point[i], mean[j]);}}sum += cnt;     }return sum;
}
//重新计算聚类中心
void getmean(int center[N])
{Point sum;int count;for (int i = 0; i < k; i++){sum.x = 0.0;sum.y = 0.0;count = 0;for (int j = 0; j < N; j++){if (center[j] == i){sum.x += point[j].x;sum.y += point[j].y;count++;}}mean[i].x = sum.x / count;mean[i].y = sum.y / count;}for (int i = 0; i < k; i++){printf("the new center point of %d is:\t(%f,%f)\n", i + 1, mean[i].x, mean[i].y);}
}

结果显示:

K-meas聚类算法相关推荐

  1. 【模式识别】K均值聚类算法应用实验报告及MATLAB仿真

    一. 实验目的 1.掌握K均值聚类算法的原理和实现过程: 2.掌握K均值聚类算法的应用方法. 二. 实验内容 1.彩色图像分割 选择一幅图像,分别按三种颜色数进行彩色图像分割的结果(原图和分割图).步 ...

  2. k均值聚类算法优缺点_Grasshopper实现K均值聚类算法

    本文很长很长,有很多很多图,包含以下部分: 1.算法简介 2.如何分类平面点 3.如何分类空间点 4.如何分类多维数据 5.后记 提醒:以下内容包括:智障操作,无中生友,重复造轮子 等 1.算法简介 ...

  3. K-Means(K均值聚类算法)

    K-Means(K均值聚类算法) 1.前言 要学习聚类算法就要知道聚类学习算法是什么,为什么要学习聚类学习聚类学习算法,有什么用途,下面就简单的做一下介绍,并且详细的说明k-means均值聚类学习算法 ...

  4. K均值聚类算法(HCM,K-Means)

    K均值聚类核心思想如下: 算法把n个向量分为个组,并求每组的聚类中心,使得非相似性(或距离)指标的价值函数(或目标函数)达到最小.当选择欧几里德距离为组j中向量与相应聚类中心间的非相似性指标时,价值函 ...

  5. K均值聚类算法(Kmeans)讲解及源码实现

    K均值聚类算法(Kmeans)讲解及源码实现 算法核心 K均值聚类的核心目标是将给定的数据集划分成K个簇,并给出每个数据对应的簇中心点.算法的具体步骤描述如下. 数据预处理,如归一化.离群点处理等. ...

  6. k均值聚类算法python_K均值和其他聚类算法:Python快速入门

    k均值聚类算法python This post was originally published here 这篇文章最初发表在这里 Clustering is the grouping of obje ...

  7. python(scikit-learn)实现k均值聚类算法

    k均值聚类算法原理详解 示例为链接中的例题 直接调用python机器学习的库scikit-learn中k均值算法的相关方法 from sklearn.cluster import KMeans imp ...

  8. 机器学习之无监督学习-K均值聚类算法

    机器学习之无监督学习-K均值聚类算法 对于无监督学习,有两类重要的应用,一个是聚类,一个是降维.我们今天主要学习聚类中的K均值聚类. 我们先看看下图,图a为原始的数据点,我们想要对图a的数据点进行分类 ...

  9. Thinking in SQL系列之五:数据挖掘K均值聚类算法与城市分级

    原创: 牛超   2017-02-21   Mail:10867910@qq.com 引言:前一篇文章开始不再介绍简单算法,而是转到数据挖掘之旅.感谢CSDN将我前一篇机器学习C4.5决策树算法的博文 ...

  10. 机器学习实战-61:K均值聚类算法(K-Means)

    K均值聚类算法(K-Means) 深度学习原理与实践(开源图书)-总目录,建议收藏,告别碎片阅读! 机器学习分为监督学习.无监督学习和半监督学习(强化学习).无监督学习最常应用的场景是聚类(clust ...

最新文章

  1. html自定义datajs,科技常识:HTML5的自定义属性data-*详细介绍和JS操作实例
  2. python实现三叉树_使用python代码实现三叉搜索树高效率”自动输入提示”功能
  3. 下载的VS2017工程编译出错的问题
  4. 深入理解Java类加载器:Java类加载原理解析
  5. Redis 主从集群搭建及哨兵模式配置
  6. Java的并发编程中的多线程问题到底是怎么回事儿?
  7. 解决:build_attrs() takes at most 2 arguments (3 given)
  8. GC算法-分代垃圾回收
  9. 【Python】Python实战从入门到精通之七 -- 教你深入理解异常处理
  10. conda配置环境变量并且激活
  11. npm 安装axios和使用增删改查
  12. SQL Server 2008中SQL之WaitFor
  13. 图片压缩的另一种实现(3)
  14. Nutanix超融合基础架构和桌面虚拟化解决方案助力新松机器人加速数字化转型
  15. java byte to integer_Java中的Byte转为无符号的Integer
  16. LoadRunner启动自带例子Web Tours报错
  17. 转换大师swf转html,iPixSoft SWF to HTML5 Converter
  18. python alpha_python 给图像添加透明度(alpha通道)
  19. Bugly热更新最详细的使用教程
  20. 故宫的首夜,一票难求,网站遭“围攻”宕机

热门文章

  1. 三个月跳槽2次,我经历了什么?
  2. c语言中锁的作用,c 互斥锁
  3. win10下使用ISE软件时PlanAhead闪退问题
  4. Pytorch随机抽样
  5. 利用facebook pop进行数字的动画显示。
  6. Mediator模式
  7. 腿关节疼痛,不可小觑!
  8. 用python绘制爱心
  9. tzhsoj1589 set
  10. 2009年成都的第一场雪