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

article/2025/9/15 4:39:26

Kmeans作业

环境配置

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

算法原理

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

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

欧式距离

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

d i s t ( X , Y ) = ∑ i = 1 n ( x i − y i ) 2 dist(X, Y) = \sqrt{\sum_{i = 1}^{n} (x_{i} - y_{i})^{2}} dist(X,Y)=i=1n(xiyi)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步,从左上角的图开始。

在这里插入图片描述


http://chatgpt.dhexx.cn/article/toDQV5jB.shtml

相关文章

python+dlib的欧式距离算法进行人脸识别

资源下载地址&#xff1a;https://download.csdn.net/download/sheziqiong/85738944 资源下载地址&#xff1a;https://download.csdn.net/download/sheziqiong/85738944 人脸识别的主要算法 其核心算法是 欧式距离算法使用该算法计算两张脸的面部特征差异&#xff0c;一般在…

计算欧式距离和余弦相似度

本文介绍Python计算欧式距离和余弦相似度。为了余弦相似度需要使用欧式距离&#xff0c;我们首先介绍欧式距离。 欧式距离 欧式距离标识两个向量之间的距离&#xff0c;计算公式如下&#xff1a; 欧式距离 Σ ( A i − B i ) 2 \sqrt{Σ(A_i-B_i)^2} Σ(Ai​−Bi​)2 ​ …

欧式距离和马式距离的区别

前言 为什么要讨论这两个距离之间的区别&#xff1f; 因为&#xff0c;距离函数的选择对数据挖掘算法的效果具有很大的影响&#xff0c;使用错误的距离函数对挖掘过程非常有害。有时候&#xff0c;语义非常相似的对象被认为不相似&#xff0c;而语义不相似的对象却被认为是相…

马氏距离(Mahalanobis Distance)与欧式距离

马氏距离(Mahalanobis Distance)是度量学习中一种常用的距离指标&#xff0c;同欧氏距离、曼哈顿距离、汉明距离等一样被用作评定数据之间的相似度指标。但却可以应对高维线性分布的数据中各维度间非独立同分布的问题。 什么是马氏距离 马氏距离(Mahalanobis Distance)是一种距…

欧式距离分割

主要函数&#xff1a; [labels, numClusters] pcsegdist(ptCloud, minDistance) 欧式聚类是一种基于欧式距离的聚类算法 ptCloud pcread(maize.pcd);%两个不同簇之间最小距离 minDistance 0.06%执行欧式距离分割 [labels, numClusters] pcsegdist(ptCloud, minDistance)…

欧式距离转为百分比

1. 说明 项目中生成了每个数据的2048维的向量&#xff0c;计算出不同数据之间的欧式距离值。把这些欧式距离转化为百分比&#xff0c;利于查看。 2. 欧式距离值 0.19806965771678278 0062_04 0.34178271687627493 0062_00 0.35060763229637537 0062_03 0.4269194352275009 00…

马氏距离和欧式距离详解

一般在机器学习模型中会涉及到衡量两个样本间的距离&#xff0c;如聚类、KNN&#xff0c;K-means等&#xff0c;使用的距离为欧式距离。其实&#xff0c;除了欧氏距离之外&#xff0c;还有很多的距离计算标准&#xff0c;本文主要介绍欧氏距离和马氏距离。 欧氏距离 最常见的两…

PCL 的欧式距离聚类

PCL 的欧式距离聚类 &#xff08;感谢前辈&#xff09; 转自&#xff1a;https://zhuanlan.zhihu.com/p/75117664 聚类代码如下&#xff1a; from paper_1_v0.my_ransac import my_ransac_v5 import numpy as npimg_id 1 # 这里读入你的kitti 雷达数据即可 path rD:\KITT…

相似度计算(3)——欧式距离和闵克夫斯基距离

欧式距离和闵克夫斯基距离 一、欧式距离 1、定义 欧式距离&#xff08;欧几里得距离&#xff0c;欧几里得度量&#xff09;&#xff0c;是一个通常采用的距离定义&#xff0c;指在m维空间中两个点之间的真实距离&#xff0c;或者向量的自然长度&#xff08;即该点到原点的距离…

机器学习:欧氏距离(Euclidean Distance)

相关文章链接&#xff1a;算法文章汇总 欧式距离也称欧几里得距离&#xff0c;是最常见的距离度量&#xff0c;衡量的是多维空间中两个点之间的 绝对距离 。 以古希腊数学家欧几里得命名的距离&#xff0c;也就是我们直观的两点之间直线最短的直线距离。 欧氏距离定义&#…

距离度量 —— 欧式距离(Euclidean Distance)

Python学习系列文章&#xff1a;&#x1f449; 目录 &#x1f448; 文章目录 一、概述二、计算公式① 二维平面上的欧式距离② 三维空间上的欧式距离③ n维空间上的欧式距离 一、概述 欧式距离&#xff0c;也称为 欧几里得距离&#xff0c;是我们从小学、初中、高中等等乃至现…

[机器学习-概念] 什么是欧式距离、标准化欧式距离、马氏距离、余弦距离

1.欧式距离(Euclidean Distance) 欧式距离源自N维欧氏空间中两点 x 1 , x 2 x_1,x_2 x1​,x2​间的距离公式&#xff1a; 2.标准化欧式距离&#xff08;Standardized Euclidean distance&#xff09; 引入标准化欧式距离的原因是一个数据 x i x_i xi​ 的各个维度之间的尺…

PHPStorm使用PHP7新特性出现红色波浪错误

今天在项目中使用PHP7新特性时PHPStorm出现了如下红色错误&#xff0c;看着让人很不舒服&#xff0c;明明没有错 本地配置LNMP的PHP版本是7.2所以不是安装的PHP版本过低的问题&#xff0c;而是PHPStorm默认支持的PHP版本语法问题&#xff0c;通过在偏好设置中查看发现默认是PHP…

PHP8.X的新特性

PHP8.X的新特性 随着2020年的PHP开发者峰会结束&#xff0c;8.X将在11月26发布 一、JIT JIT的新特性&#xff0c;则是将PHP代码转化为传统的机器码&#xff0c;而并非通过zend虚拟机来运行&#xff0c;这大大增加了运行速度。但是缺点是向下不兼容。 # JIT 可以通过php.ini中…

PHP 7.4 新特性

PHP 7.4 计划在2019年11月21日发布&#xff0c;它主要新增了以下几个特性&#xff1a; 短闭包函数 短闭包函数可以减少冗余代码&#xff1a; array_map(function (User $user) { return $user->id; }, $users) array_map(fn(User $user) > $user->id, $users) 需要…

PHP7.0至PHP8部分特性总结

PHP7.0特性 2015年6月11日&#xff0c;PHP开发团队宣布将立即提供PHP 7.0.0 Alpha1。此版本标志着PHP 7主要系列的开始。我们有许多原因&#xff0c;应该对PHP7.0感到兴奋&#xff0c;接下来让我们来看一下它全新的语言特性! 性能&#xff1a; PHP7.0采用下一代由PHP核心团队开…

php8新特性全览【超详细】

题外话&#xff1a; PHP 8.0 是 PHP 语言的重大更新。 它包含许多新功能和优化&#xff0c;包括命名参数、联合类型、属性、构造函数属性提升、匹配表达式、空安全运算符、JIT&#xff0c;以及类型系统、错误处理和一致性方面的改进。 废话不多说&#xff0c;开车 1.便利的命名…

php 7新特性(一):类型的限定

1、标量类型声明&#xff1a; a.默认&#xff1a;以前的弱类型 b.严格&#xff1a;declare(strict_types1) //strict_types的值&#xff08;1或者0&#xff09;&#xff0c;1表示严格类型, 0表示弱类型 可以使用的类型参数有&#xff1a;int float bool string inte…

PHP8所有新特性

PHP 8 正式版即将发布&#xff0c;是时候来看看 PHP 8 即将推出的新特性了 首先来安装PHP8 下载地址 https://www.php.net/downloads 本地编译安装 PHP 8 RC2 版本(MAC操作系统) # 0、下载解压源码 wget https://downloads.php.net/~pollita/php-8.0.0RC2.tar.gz tar zxvf p…

PHP8新特性解读

本文主要内容为解读PHP8.0的主要新特性 解读PHP8特性 前言一、给小皮面板下载PHP8二、部分下载PHP8会出现502解决方案三、介绍特性1. 联合类型2. 匹配表达式3. null安全运算符4. 构造函数属性提升5. 注解6. 命名参数 四、总结 前言 PHP8在2020年11月26日正式发布&#xff0c;又…