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

访问【WRITE-BUG数字空间】_[内附完整源码和文档]

基于欧式距离的聚类算法,其认为两个目标的距离越近,相似度越大。 该实验产生的点为二维空间中的点。

环境配置
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

算法过程
选择k,聚类的数量。
选择k个点作为聚类中心。
对每个样本点计算到k个聚类中心的距离,采用的是欧氏距离,将其分类到距离最近的类别中。
根据每个类别,计算被分类在该类别中的所有点的中心。
如果计算出来的中心和聚类中心相同,则退出循环,否则以新的计算出来的中心为每个聚类的聚类中心,不断重复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;
}在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/20935.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

macOS Monterey 12.6.6 (21G646) 正式版发布,ISO、IPSW、PKG 下载

macOS Monterey 12.6.6 (21G646) 正式版发布&#xff0c;ISO、IPSW、PKG 下载 本站下载的 macOS 软件包&#xff0c;既可以拖拽到 Applications&#xff08;应用程序&#xff09;下直接安装&#xff0c;也可以制作启动 U 盘安装&#xff0c;或者在虚拟机中启动安装。另外也支持…

【Jmeter第二章】将Jmeter界面切换为中文显示

1、Jmeter临时切换为中文显示 注意&#xff1a;上面的配置只能保证本次运行是中文&#xff0c;如果要永久中文&#xff0c;需要修改Jmeter的配置文件 2、通过修改Jmeter配置文件设置为中文显示 1、在 Jmeter/bin目录下&#xff0c;找到&#xff1a;jmeter.properties 文件 2…

【达梦数据库】达梦数据库windows安装

目录 1.选择语言与时区 2.安装向导 3.许可证协议 4.验证 Key 文件 5.选择安装组件 6.选择安装目录 7.目录确认 8.开始安装 9.安装过程 10.安装完成 11.创建数据库实例 12.创建数据库模板 13.数据库目录 14.数据库标识 15.数据库文件 16.初始化参数 17.口令管理…

【算法学习系列】01 - 求某个数组中的任意两个位置之间的累加和

文章目录 背景解决思路代码实现 背景 已经呆在自己的舒适圈有很长一段时间了&#xff08;公司快3年了&#xff0c;业务都熟的差不多了&#xff09;&#xff0c;决定开始改变&#xff08;任何时候都不晚&#xff09;&#xff0c;尝试学习解决一些算法题&#xff0c;给自己一些适…

使用Rust构建一个kvm用户空间实例

最近在学习虚拟化相关的内容&#xff0c;想着使用Rust构建一个最小的kvm用户空间实例。也就是直接调用kvm的api&#xff0c;然后创建虚拟机。网络上关于kvm的内容大部分是使用libvirt的&#xff0c;然后kvm用户空间实例也是使用C编写的。因此想着使用Rust写一个简单的。 思路 …

Android PickerView简单应用

1. Android-PickerView Android-PickerView这是一款仿iOS的PickerView控件&#xff0c;有时间选择器和选项选择器。 添加依赖项 implementation com.contrarywind:Android-PickerView:4.1.92. 时间选择器 Android-PickerView时间选择器使用Build模式来创建 var timePicker…

鲲鹏昇腾开发者峰会开幕 星辰天合发布新一代天合翔宇一体机

近日&#xff0c;主题为“创未来 享非凡”的鲲鹏昇腾开发者峰会 2023 在东莞松山湖开幕&#xff0c;此次大会旨在帮助开发者深入了解鲲鹏、昇腾全栈技术&#xff0c;加速行业数智化的技术、产品和解决方案创新。 作为鲲鹏生态重要合作伙伴&#xff0c;XSKY星辰天合获邀参加此次…

1053 Path of Equal Weight(超级无敌详细注释+45行代码)

分数 30 全屏浏览题目 切换布局 作者 CHEN, Yue 单位 浙江大学 Given a non-empty tree with root R, and with weight Wi​ assigned to each tree node Ti​. The weight of a path from R to L is defined to be the sum of the weights of all the nodes along the pa…

亲水性Sulfo-Cyanine3 NHS ester水溶性CY3标记活性脂

Sulfo-Cy3是一种荧光染料&#xff0c;可用于生物成像和细胞标记等应用。Sulfo-Cy3是一种含有硫酸基的Cy3染料&#xff0c;具有高度的水溶性和稳定性。Sulfo-Cy3可以与NHS&#xff08;N-羟基琥珀酰亚胺&#xff09;结合&#xff0c;形成Sulfo-Cy3 NHS&#xff0c;这种结合物可以…

前端开发之函数式编程实践 | 京东云技术团队

作者&#xff1a;京东科技 牛志伟 函数式编程简介 常见应用场景 1、ES6中的map、filter、reduce等函数 [1,2,3,4,5].map(x > x * 2).filter(x > x > 5).reduce((p,n) > p n);2、React类组件 -> 函数式组件hooks、Vue3中的组合式API 3、RxJS、Lodash和Ramd…

华为基于dhcp snooping表的各种攻击防御

所有的前提是必须开启了dhcp snooping功能 一、dhcp 饿死攻击&#xff1a; 接口下或vlan下开启 dhcp snooping check dhcp-chaddr enable 开启二层源mac和chaddr一致性检测 dhcp snooping max-user-number 1 接口上手动配置的绑定成员数量&#xff08;可选择项&#xff09; …

亚马逊云科技作为中国出海力量之一,为中国企业提供技术桥梁

这是一个真实的故事&#xff1a;一家出海企业的项目交付需要在非洲吉布提部署上云&#xff0c;企业负责人在地图上找了半天才找到吉布提&#xff0c;而亚马逊云科技仅用了3天的时间就为企业在当地的业务开展&#xff0c;交付了IT基础设施。对于出海企业来说&#xff0c;这种效率…

文本三剑客awk

awk 工作原理&#xff1a; 逐行读取文本&#xff0c;默认以空格或tab键为分隔符进行分隔&#xff0c;将分隔所得的各个字段保存到内建变量中&#xff0c;并按模式或者条件执行编辑命令。 sed命令常用于一整行的处理&#xff0c;而awk比较倾向于将一行分成多个“字段”然后再进…

如何高效搭建影视及游戏工业化管线?

影视和游戏工业化是指制作流程上呈现出标准化、自动化、平台化、数智化的特征。工业化趋势会让制作影视和游戏门槛变高&#xff0c;让其进入精品对决时代。 不进行迭代&#xff0c;就面临被淘汰的危险。 随着受众对于影视和游戏质量的要求越发“苛刻”&#xff0c;精品化是整…

python:随机森林分类器的性能评估(决策树数量的影响)

作者:CSDN @ _养乐多_ 随机森林(Random Forest)是一种强大的机器学习算法,常用于分类和回归任务。它由多个决策树构成,通过集成学习的方式进行预测。在本篇博客中,我们将探讨随机森林分类器在不同决策树数量下的性能,并绘制相应的图表进行可视化分析。OOB误差,0被误判为…

Kubernetes 二进制部署高可用集群 失败 看报错

概述 openssl证书有问题导致失败&#xff0c;未能解决openssl如何创建私钥&#xff0c;可参考ansible 在私有局域网内完成Kubernetes二进制高可用集群的部署 ETCD Openssl > ca 证书 Haproxy Keepalived Kubernetes 主机规划 序号名字功能VMNET 1备注 1备注 2备注 3 备注…

【C++】-static在类和对象中的作用和细节(下)

&#x1f496;作者&#xff1a;小树苗渴望变成参天大树 ❤️‍&#x1fa79;作者宣言&#xff1a;认真写好每一篇博客 &#x1f4a8;作者gitee:gitee &#x1f49e;作者专栏&#xff1a;C语言,数据结构初阶,Linux,C 文章目录 前言 前言 今天我们来讲一个static对类的对象的作用…

C++模板template

我们现在有几个变量&#xff0c;我们向要实现他们的交换&#xff0c;所以我们现在写了一个swap函数 我们现在可以实现对这两个变量之间的交换&#xff0c; 那么我们有有两个变量需要交换呢&#xff1f;&#xff1f; 我们刚才的Swap函数的参数是int类型的&#xff0c;我们现在的…

SOME/IP 草稿

SOME/IP 名词解释 SOME/IP 全称是 Scalable service-Oriented MiddlewarE over IP。也就是基于 IP 协议的面向服务的可扩展性通信中间件协议。 面向服务 SOA基于 IP 协议之上的通信协议中间件 SOME/IP 功能 服务发现 (Service Discovery)远程服务调用 &#xff08;RPC,rem…

ConvTranspose2d 的简单例子理解

文章目录 参考基础概念output_padding 简单例子&#xff1a; stride2step1step2step3 参考 逆卷积的详细解释ConvTranspose2d&#xff08;fractionally-strided convolutions)nn.ConvTranspose2d的参数output_padding的作用torch.nn.ConvTranspose2d Explained 基础概念 逆卷…