K均值算法代码

#include<iostream>

#include<math.h>

using namespace std;

//distance函数通过欧几里得计算两点间的距离

double distance(double x1,double y1,double x2,double y2)

{

double result;

result=pow((pow((x1-x2),2)+pow((y1-y2),2)),(double)1.0/2);

return result;

}

int main(){

int k,n,m=1;//k为输入的点的个数,n为聚类中心的个数,m为聚类次数

cout<<"please input the number of the points and cluster center:";

cin>>k>>n;

double a[k][2];//a数组用来存储各个点坐标

double b[n][2];//b数组用来存储聚类中心坐标

for(int i=0;i<k;i++)

{

for(int j=0;j<=1;j++)

{

cin>>a[i][j];

}

}

// cout<<"默认选用k个点中的前n个作为第一次聚类中心坐标"<<endl;

cout<<"The number of cluster: "<<m<<endl;

for(int i=0;i<n;i++)

{

for(int j=0;j<=1;j++)

{

b[i][j]=a[i][j];

}

}

int flag[k];//用来判断每个点是属于哪个聚类中心

double len[k][n];//用来计算每个点到每个聚类中心的距离

double min;//作为计算最短距离的变量

for(int i=0;i<k;i++)

{

min=distance(a[i][0],a[i][1],b[0][0],b[0][1]);

for(int j=0;j<n;j++)

{

len[i][j]=distance(a[i][0],a[i][1],b[j][0],b[j][1]);

if (len[i][j]<=min)

{

min=len[i][j];

flag[i]=j;

}

}

}

for(int i=0;i<n;i++)

{

cout<<"the cluster center:"<<b[i][0]<<","<<b[i][1];

cout<<endl;

cout<<"category"<<i+1<<": ";

for(int g=0;g<k;g++)

{

if(flag[g]==i){

cout<<a[g][0]<<","<<a[g][1]<<" ";

}

}

cout<<endl;

}

m++;

bool p=true;

while(p)

{

double c[n][2];

for (int i = 0; i < n; i++)

{

c[i][0]=b[i][0];

c[i][1]=b[i][1];

}

for(int i=0;i<n;i++)

{

double sum1=0,sum2=0,num=0.0;

for(int j=0;j<k;j++)

{

if(flag[j]==i){

num++;

sum1+=a[j][0];

sum2+=a[j][1];

}

}

b[i][0]=sum1/num;

b[i][1]=sum2/num;

}

cout<<"The number of cluster: "<<m<<endl;

for(int i=0;i<k;i++)

{

min=distance(a[i][0],a[i][1],b[0][0],b[0][1]);

for(int j=0;j<n;j++)

{

len[i][j]=distance(a[i][0],a[i][1],b[j][0],b[j][1]);

if (len[i][j]<=min)

{

min=len[i][j];

flag[i]=j;

}

}

}

for(int i=0;i<n;i++)

{

cout<<"the cluster center:"<<b[i][0]<<","<<b[i][1];

cout<<endl;

cout<<"category"<<i+1<<": ";

for(int g=0;g<k;g++)

{

if(flag[g]==i){

cout<<a[g][0]<<","<<a[g][1]<<" ";

}

}

cout<<endl;

}

for (int i = 0; i < n; i++)

{

if((b[i][0]!=c[i][0])||(b[i][1]!=c[i][1])){

p=true;

break;

}

p=false;

}

m++;

}

return 0;

}

K均值算法(继续优化中)相关推荐

  1. k均值算法的优化目标和随机初始化

    这里我们来学习k均值算法的优化目标(代价函数): 优化目标的值等于每一个训练集数据到该所属的聚类中心距离的平方的平均值 其实在我们进行之前所循环进行的聚类分簇和移动聚类中心的操作,都是在不断的最小化J ...

  2. k-modes算法mysql_第十一章 K-Means(K均值)算法模型实现(中)

    python2 代码实现: from numpy import * import numpy def loadDataSet(fileName): #general function to parse ...

  3. 一句话总结K均值算法

    一句话总结K均值算法 核心:把样本分配到离它最近的类中心所属的类,类中心由属于这个类的所有样本确定. k均值算法是一种无监督的聚类算法.算法将每个样本分配到离它最近的那个类中心所代表的类,而类中心的确 ...

  4. k均值算法 二分k均值算法_如何获得K均值算法面试问题

    k均值算法 二分k均值算法 数据科学访谈 (Data Science Interviews) KMeans is one of the most common and important cluste ...

  5. 我的K均值算法的matlab实现

    这是我的第一篇博客: K-Means算法过程,略: 这是一次课程的任务2333,是利用所学K-means聚类分析方法,对iris数据集进行聚类分析,并利用已知的样本类别标 签进行聚类分析评价: 我的K ...

  6. 基于SPSS的K均值算法

    文章目录 前言 一.K均值算法是什么? 二.动画演示 1.网站 2.示例 三.缺点解决(K-means++算法) 四.SPSS实现 总结 前言 菜鸡学习数学建模 一.K均值算法是什么? K-means ...

  7. 百面机器学习—7.K均值算法、EM算法与高斯混合模型要点总结

    文章目录 一.总结K均值算法步骤 二.如何合理选择K值? 三.K均值算法的优缺点是什么? 四.如何对K均值算法进行调优? 五.EM算法解决什么问题? 六.EM算法流程是什么? 六.EM算法能保证收敛嘛 ...

  8. R语言 k均值算法(k-means)

    k均值算法针对聚类所得簇划分求得最小平方误差,k均值算法采用了贪心策略,通过迭代优化来近似求解 算法如下: kmeans的计算方法如下: 1 随机选取k个中心点 2 遍历所有数据,将每个数据划分到最近 ...

  9. 数据挖掘--“聚类”详解、K-means、K-平均值算法、K均值算法

    一. 什么是聚类 二. 聚类步骤 三. 聚类算法有哪些 1 层次聚类算法 2 划分聚类算法 3 基于密度的聚类算法 4 基于网格的聚类算法 5 基于模型的聚类算法 一. 什么是聚类? 物以类聚,人以群 ...

最新文章

  1. 1059 Prime Factors
  2. Github 的 Pull Request 教程
  3. Codeforces Round #542 [Alex Lopashev Thanks-Round] (Div. 1)
  4. ubuntu下tftp的安装、配置、使用
  5. NSFetchedResultsController和UITableView显示CoreData的数据时用relationship分组的方法
  6. 文本挖掘(part2)--分词
  7. Oracle开发常用知识
  8. 渲染服务器位置,如何用服务器做渲染
  9. C语言(CED)最长公共子序列----动态规划第一题
  10. 程序人家:你的老板逼你上微服务了吗??
  11. std::auto_ptr简单使用
  12. java多线程异步调用别的系统接口代码_60 多个实例讲解,彻底搞懂 Java 多线程!
  13. 自动控制原理(来自于b站的笔记整理,深入理解自动控制框架)
  14. Mstar的Monitor方案OSD 菜单制作(五)——icon绘制
  15. 朝花夕拾 —— 重温《花田半亩》
  16. java -1%3_Java_SE 流程控制
  17. 浅谈响应式开发与自适应布局!
  18. 中水是什么?有什么用途呢?
  19. 图形学 (-)数学基础
  20. 从这里,开始屌丝的逆袭

热门文章

  1. StorageEngine
  2. STM32F103 内部温度传感器实验
  3. Huggingface Transformers库学习笔记(二):使用Transformers(上)(Using Transformers Part 1)
  4. 言语如何成为交互设计的基础
  5. Android软件开发之获取通讯录联系人信息
  6. ES Module在nodeJS下与CommonJS的交互
  7. nginx启动、关闭、重启及常用的命令
  8. DNA核苷酸含量计算
  9. 2018 ACM/ICPC 北京赛区网络赛 D 80 Days 线段树
  10. Localization of Classified Objects in SLAM using NonparametricStatistics and Clustering(2018,IROS)