Kmeans作业

环境配置

java环境,使用原生的Java UI组件JPanel和JFrame

算法原理

基于欧式距离的聚类算法,其认为两个目标的距离越近,相似度越大。

该实验产生的点为二维空间中的点。

欧式距离

n维空间中的两个点X,Y

dist(X,Y)=∑i=1n(xi−yi)2dist(X, Y) = \sqrt{\sum_{i = 1}^{n} (x_{i} - y_{i})^{2}}dist(X,Y)=∑i=1n​(xi​−yi​)2​

算法过程

  1. 选择k,聚类的数量。
  2. 选择k个点作为聚类中心。
  3. 对每个样本点计算到k个聚类中心的距离,采用的是欧氏距离,将其分类到距离最近的类别中。
  4. 根据每个类别,计算被分类在该类别中的所有点的中心。
  5. 如果计算出来的中心和聚类中心相同,则退出循环,否则以新的计算出来的中心为每个聚类的聚类中心,不断重复3 - 4步。

核心代码

设定K

/*Step按钮的监听器*/
jButton2.addActionListener(new ActionListener() {public void actionPerformed(ActionEvent ae) {painting.assign();painting.updateCentroids();/*算法终止的话让按钮变灰并提示算法结束*/if (painting.stop(num++)) {jButton2.setText("End");jButton2.setEnabled(false);}painting.repaint();}
});

计算欧式距离

/*欧式距离*/
double Euc(Point p1, Point p2) {double distance = 0.0;for (int i = 0; i < Dimension; ++i)distance += (p1.x[i] - p2.x[i]) * (p1.x[i] - p2.x[i]);return Math.sqrt(distance);
}

更新中心点

/*更新中心点*/
void updateCentroid(int clusterNum) {//将newCluster数组的那个中心点置空for (int i = 0; i < Dimension; ++i)newCluster[clusterNum].x[i] = 0;int clusterSize = 0;for (int i = 0; i < Nodes; ++i)if (p[i].cluster == clusterNum) {//这个簇中有多少点clusterSize++;for (int j = 0; j < Dimension; ++j)newCluster[clusterNum].x[j] += p[i].x[j];}if (clusterSize == 0)return;for (int i = 0; i < Dimension; ++i)newCluster[clusterNum].x[i] /= (double) clusterSize;
}

计算每个点的分类

/*分配数据点到哪个簇*/
void assignPoint(int x) {double minDistance = 99999999;int nodeClassify = 1;for (int i = 0; i < K; ++i) {//计算欧式距离double newDistance = Euc(p[x], newCluster[i]);if (newDistance < minDistance) {minDistance = newDistance;nodeClassify = i;}}p[x].cluster = nodeClassify;
}

判断终止条件

/*判断算法是否终止*/
Boolean stop(int currentTime) {//超过迭代次数if (currentTime > range) {int num = 1;System.out.println("超过迭代次数");for (Point i : oldCluster) {System.out.println("中心点" + num + "坐标:(" + i.x[0] + "," + i.x[1] + ")");num++;}return true;}/*如果每一个中心点都与上一次的中心点相同,则算法终止,否则更新oldCentroid*/for (int i = 0; i < K; ++i)if (!samePoint(oldCluster[i], newCluster[i])) {for (int j = 0; j < K; ++j)copy(oldCluster[j], newCluster[j]);return false;}int num = 1;System.out.println("迭代完成");for (Point i : oldCluster) {System.out.println("中心点" + num + "坐标:(" + i.x[0] + "," + i.x[1] + ")");num++;}return true;
}

实验结果

点击start之后,产生新的随机点与初始聚类中心




点击step,将每一步的迭代展示出来,这里展示了4步,从左上角的图开始。

Java实现的基于欧式距离的聚类算法的Kmeans作业相关推荐

  1. 1.(基于欧式距离聚类实现的点云分割)

    首先在获取的大场景范围下,点云中不可避免地存在大量的噪声信息,为了防止这些噪声点在对点云数据进行特征提取时造成干扰,对点云数据进行预处理排除噪声干扰.噪声通常是个数较少且散乱分布的离群点,以前尝试过先 ...

  2. 基于欧式距离分类问题的数据标准化处理

    机器学习中的分类模型,有一些是基于欧式距离的,如K-means模型.当样本的特征较多时, 即使上万的数据分布在较高维数空间中,其样本仍会显得比较稀疏. 为了不使得样本间的距离过大,需要对数据进行标准化 ...

  3. 基于改进层次凝聚聚类算法的垃圾收运跨区域调度策略

    1引言: 垃圾收运的各个环节是控制垃圾回收成本的关键,当前分区域运营模式存在以下问题: 运营成本高:分区域运营模式限制了城市生活垃圾收集和运输的各个环节.从一个区域的特定街道收集的垃圾只能在该区域街道 ...

  4. WKmeans一种基于特征权重的聚类算法

    1 引例 在前面两篇文章中,我们首先介绍了KmeansKmeansKmeans聚类算法的原理:然后又介绍了一种基于KmeansKmeansKmeans进行改进的Kmeans++Kmeans++Kmea ...

  5. [Python从零到壹] 六十一.图像识别及经典案例篇之基于纹理背景和聚类算法的图像分割

    祝大家新年快乐,阖家幸福,健康快乐! 欢迎大家来到"Python从零到壹",在这里我将分享约200篇Python系列文章,带大家一起去学习和玩耍,看看Python这个有趣的世界.所 ...

  6. java计算机毕业设计基于ssm的协同过滤算法的电影推荐系统(源代码+数据库+Lw文档)

    项目介绍 "互联网+"的战略实施后,很多行业的信息化水平都有了很大的提升.但是目前很多行业的管理仍是通过人工管理的方式进行,需要在各个岗位投入大量的人力进行很多重复性工作,使得对人 ...

  7. 【聚类算法】基于matlab改进的粒子群算法优化K-means算法【含Matlab源码 1946期】

    ⛄一.获取代码方式 获取代码方式1: 完整代码已上传我的资源:[聚类算法]基于matlab改进的粒子群算法优化K-means算法[含Matlab源码 1946期] 点击上面蓝色字体,直接付费下载,即可 ...

  8. 聚类算法:K-Means

    1.K-Means定义: K-Means是一种无监督的基于距离的聚类算法,简单来说,就是将无标签的样本划分为k个簇(or类).它以样本间的距离作为相似性的度量指标,常用的距离有曼哈顿距离.欧几里得距离 ...

  9. 机器学习实战(Machine Learning in Action)学习笔记————06.k-均值聚类算法(kMeans)学习笔记...

    机器学习实战(Machine Learning in Action)学习笔记----06.k-均值聚类算法(kMeans)学习笔记 关键字:k-均值.kMeans.聚类.非监督学习 作者:米仓山下 时 ...

最新文章

  1. thinkphp框架细节
  2. 基于深度学习的恶意样本行为检测(含源码) ----采用CNN深度学习算法对Cuckoo沙箱的动态行为日志进行检测和分类...
  3. 租不起房!你离逃离北上广还有多长时间?
  4. Linux2.6内核驱动与2.4的区别 .
  5. Java黑皮书课后题第10章:*10.5(显示素数因子)编写一个程序,提示用户输入一个正整数,然后以降序显示它的所有最小因子
  6. 文件操作(stat函数)
  7. [css] 什么是逐帧动画?
  8. EasyUI:导出datagrid数据到桌面
  9. java调用iec61850_IEC61850开发实战(三)
  10. oneno浏览器插件_谷歌浏览器插件Send to OneNote 让Chrome也拥有OneNote的快捷保存功能...
  11. [摩斯密码表]摩斯密码对照表
  12. 模电、数电、电路面试题
  13. 计算机应用项目概述,计算机应用包括哪些项目?
  14. processing实现图像碎片化
  15. 正态分布与泊松分布的关系
  16. 齐二TK6916/20/26/32系列数控落地铣镗床简介7
  17. 如何玩转信用卡 银行不会告诉你的十个秘密
  18. ios 往 Library的cache目录下 存放缓存数据的方法
  19. 7年沉淀之作--滴滴Logi日志服务套件
  20. # HNOI2012 ~ HNOI2018 题解

热门文章

  1. 2008中国软件百强企业名录
  2. java基于springboot口腔牙科诊所管理系统
  3. 高性能微服务网关APISIX - API文档
  4. 爱站seo工具包 v1.11.23.1官方版
  5. macbookpro m1 docker安装mysql主从
  6. 二级联动动态下拉列表
  7. 一文搞懂Vue Diff算法
  8. element vue 点击一边拖拽改变宽度 解决拖动会选中文字的问题
  9. 自动加载zrx文件的四种方法
  10. oracle转trs,ORACLE常规恢复之应用数据文件丢失