使用Julia语言和R语言实现K-均值

K-均值算法基础

  K-均值聚类算法属于一种无监督学习的方法,通过迭代的方式将数据划分为K个不重叠的子集(簇),每个子集由其内部数据点的平均值来表示。计算方法大体如下:

1.初始化簇中心

选择K个数据点作为初始的簇中心,簇中心可以随机选择的,也可以基于某种启发式方法选择,初始簇中心的选择对算法的最终结果有很大影响,不同的初始选择可能会导致完全不同的聚类结果

2.计算欧几里得距离

对于数据集中的每个点x_{i},计算它到各个簇中心\mu _j的距离d_{ij},通常使用欧几里得距离来计算。欧几里得距离衡量了数据点在多维空间中的实际距离,在K-均值算法中,数据点被分配给距离其最近的簇中心所在的簇。

d_{ij} = \sqrt{(x_i - \mu_j)^T(x_i - \mu_j)}

3.分配数据点

根据计算出的距离,将数据点分配给最近的簇。对于每个数据点x_i,找到距离它最近的簇中心\mu_{j^*},并将其分配给该簇。

4.更新簇中心

重新计算每个簇中所有数据点的平均值,并将该平均值设置为新的簇中心。对于每个簇C_j,新的簇中心\mu_j'计算如下:

5.终止迭代

重复步骤2、3和4,直到簇中心不再发生显著变化,或者达到预定的迭代次数。迭代终止条件可以表示为:

R语言数据集iris 

iris 数据集是 R 语言的内置数据集,其中包含了 3 种不同类型的鸢尾花(Iris flower)的观测数据,每种鸢尾花有 50 个样本,总共有 150 个样本。每个样本都包含了 4 个关于花萼(sepal)和花瓣(petal)的测量数据,以及鸢尾花的种类信息。

iris 数据集中的每个样本都包含以下 4 个数值型特征:

  1. Sepal.Length(花萼长度,单位是厘米)
  2. Sepal.Width(花萼宽度,单位是厘米)
  3. Petal.Length(花瓣长度,单位是厘米)
  4. Petal.Width(花瓣宽度,单位是厘米)

此外还有一个分类变量 Species,表示鸢尾花的种类,包含三个水平:setosaversicolor 和 virginica,分别对应山鸢尾、杂色鸢尾和维吉尼亚鸢尾。

在RStudio里可以输入 iris 来查看这个数据集的内容。

iris数据集内容:

Julia语言实现

  先进入Julia REPL导入需要的Julia包:

] # 进入包管理模式
add RDatasets # R语言的数据集
add DataFrames # 数据处理包
add Clustering # 提供 K-均值 功能包  
add Gadfly #绘图包

Julia语言实现K-均值代码:

using RDatasets  
using DataFrames  
using Clustering  
using Gadfly  # 使用的R语言的iris 数据集  
iris = dataset("datasets", "iris")  # 提取数据集的前四列作为特征矩阵,使用Matrix()函数把DataFrame的子集进行矩阵转换  
features = Matrix(iris[:, 1:4])# 执行 K-means 聚类, 分成 3 个簇
k = 3 
results = kmeans(features, k)  # 提取聚类分配结果  
assignments = results.assignments  plot = Gadfly.plot(iris, x=:SepalLength, y=:SepalWidth, color=assignments, Geom.point)    
display(plot)

 代码运行后生成HTML图像

  

教材中旧版本代码 

# GGboy版本再次之上增加了数据集转换
using RDatasets
using Clustering
using Gadflymydata1 = dataset("datasets", "iris")
myf = convert(Array, mydata1[:,1:4])
myl = convert(Array, mydata1[:,5])x = initseeds(:rand, convert(Matrix, myf'), 3)myres = kmeans(myf, 3)
Gadfly.plot(mydata1, x = :PetalLength, y = PetalWidth, color = myres.assignments,Geom.point)

R语言实现

先导入 ggplot2包用于绘图

install.packages("ggplot2")

R语言实现K-均值代码: 

library(ggplot2)  data(iris) # 提取前四列特征矩阵
features <- iris[, 1:4]  
k <- 3  # 执行 K-means 聚类, 分成 3 个簇
set.seed(123) # 设置随机种子以获得可重复的结果  
results <- kmeans(features, centers = k)  iris$cluster <- as.factor(results$cluster)  ggplot(iris, aes(x = Sepal.Length, y = Sepal.Width, color = cluster)) +  geom_point(size = 3, alpha = 0.8) +  theme_minimal() +  labs(title = "K-means Clustering",  x = "Sepal Length",  y = "Sepal Width",  color = "Cluster")

生成图像:
 

 Markdown版本计算公式及说明

# K-均值算法公式## 1. 初始化簇中心选择K个数据点作为初始的簇中心(质心)。这些点可以是随机选择的,也可以是基于某种启发式方法选择的。初始簇中心的选择对算法的最终结果有很大影响。不同的初始选择可能会导致完全不同的聚类结果。因此,在实际应用中,通常会多次运行算法并使用不同的初始簇中心,然后选择其中最好的结果。## 2. 计算欧几里得距离对于数据集中的每个点\(x_i\),计算它到各个簇中心\(\mu_j\)的距离\(d_{ij}\)。通常使用欧几里得距离来计算。\[d_{ij} = \sqrt{(x_i - \mu_j)^T(x_i - \mu_j)}\]欧几里得距离是最常用的距离度量方法之一,它衡量了数据点在多维空间中的实际距离。在K-均值算法中,数据点被分配给距离其最近的簇中心所在的簇。## 3. 分配数据点根据计算出的距离,将数据点分配给最近的簇。对于每个数据点\(x_i\),找到距离它最近的簇中心\(\mu_{j^*}\),并将其分配给该簇。\[j^* = \arg\min_{j=1,2,...,K} d_{ij}\]这一步是根据距离度量将数据点划分到不同的簇中。每个数据点都被分配给距离其最近的簇中心所在的簇。这样,数据集就被划分成了K个不重叠的子集。## 4. 更新簇中心重新计算每个簇中所有数据点的平均值,并将该平均值设置为新的簇中心。对于每个簇\(C_j\),新的簇中心\(\mu_j'\)计算如下:\[\mu_j' = \frac{1}{|C_j|} \sum_{x_i \in C_j} x_i\]这一步是更新簇中心的过程。通过计算每个簇中所有数据点的平均值来得到新的簇中心。这些新的簇中心将用于下一轮的迭代计算中。## 5. 终止迭代重复步骤2、3和4,直到簇中心不再发生显著变化,或者达到预定的迭代次数。迭代终止条件可以表示为:\[\|\mu_j' - \mu_j\| < \epsilon\]其中,\(\epsilon\)是一个很小的正数,表示簇中心变化的阈值。当簇中心的变化小于该阈值时,算法停止迭代。

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

分布式系统互斥性与幂等性问题的分析解决

前言 随着互联网信息技术的飞速发展&#xff0c;数据量不断增大&#xff0c;业务逻辑也日趋复杂&#xff0c;对系统的高并发访问、海量数据处理的场景也越来越多。 如何用较低成本实现系统的高可用、易伸缩、可扩展等目标就显得越发重要。为了解决这一系列问题&#xff0c;系…

2024年最新指南:如何订阅Midjourney(详尽步骤解析)

前言&#xff1a; Midjourney是一个基于人工智能的图像生成工具&#xff0c;它使用高级算法来创建独特和复杂的图像。这个工具能够根据用户输入的文字描述生成对应的图片。Midjourney的特点在于它能够处理非常抽象或者具体的描述&#xff0c;生成高质量、富有创意的视觉内容。M…

高频:spring知识

1、bean的生命周期&#xff1f; 主要阶段 初始化 org.springframework.context.support.ClassPathXmlApplicationContext prepareRefresh 信息: Refreshing org.springframework.context.support.ClassPathXmlApplicationContext67424e82: startup date []; root of context hi…

宝妈在家带孩子还是出去工作?足不出户,两者如何兼顾?

我是电商珠珠 很多女性生完孩子之后&#xff0c;就在家当家庭主妇带孩子。部分人舍不得吃穿&#xff0c;把从老公那里要来的钱都给孩子买了东西。自己也想过要出去工作&#xff0c;但是空窗期太久&#xff0c;觉得自己什么都不会&#xff0c;没有企业会要。 前段时间有一个硕…

采购代购系统独立站,接口采集商品上货

采购代购系统独立站的建设与商品上货接口的采集是一个综合性的项目&#xff0c;涉及前端开发、后端开发、数据库设计以及API接口的对接等多个环节。以下是一个大致的步骤和考虑因素&#xff1a; 一、系统规划与需求分析 明确业务需求&#xff1a;确定代购系统的核心功能&…

爬虫与DataFrame对象小小结合

import pandas as pd import requests from lxml import etree #数据请求 url"https://www.maigoo.com/brand/list_1715.html" headers{User-Agent:} #数据响应 resrequests.get(url,headersheaders) tree etree.HTML(res.text) #数据解析 titletree.xpath(.//div[c…

金现代产品方案部部长王宁,将出席“ISIG-低代码/零代码技术与应用发展峰会”

3月16日&#xff0c;第四届「ISIG中国产业智能大会」将在上海中庚聚龙酒店拉开序幕。本届大会由苏州市金融科技协会指导&#xff0c;企智未来科技&#xff08;LowCode低码时代、RPA中国、AIGC开放社区&#xff09;主办。大会旨在聚合每一位产业成员的力量&#xff0c;深入探索低…

冥想与AI:打造定制的放松体验

如今&#xff0c;在浏览网页或社交网络时&#xff0c;您似乎很难对一条条心理健康信息无动于衷。遇到这种情况的可不只是您。当今不断变化的时代给人们平添压力&#xff0c;企业纷纷利用智能技术满足人们的减压需求&#xff0c;让人们的生活多一些平和从容。 冥想就是一种练习呼…

计算机缺失vcruntime140_1.dll文件如何修复?解析5种修复方法

​其实大部分人在使用计算机的过程中&#xff0c;我们常常遇到各种问题&#xff0c;比如程序无法执行、文件无法打开等等。其中&#xff0c;找不到vcruntime140_1.dll无法执行这个问题是比较常见的。那么&#xff0c;我们该如何解决这个问题呢&#xff1f;本文将详细介绍几种简…

day3 菜品

文章目录 公众字段填充1. 自定义注解标识需要用的方法定义注解定义枚举 2. 自定义类拦截用了上面注释的方法3. 在方法上使用注解 获取yml自定义数据生成 UUID.randomUUID().toString()文件上传到本地七牛云 oss https://developer.qiniu.com/kodo/1239/java#server-upload本地文…

excel批量数据导入时用poi将数据转化成指定实体工具类

1.实现目标 excel进行批量数据导入时&#xff0c;将批量数据转化成指定的实体集合用于数据操作&#xff0c;实现思路&#xff1a;使用注解将属性与表格中的标题进行同名绑定来赋值。 2.代码实现 2.1 目录截图如下 2.2 代码实现 package poi.constants;/*** description: 用…

SEO优化的特点及其重要性(提升网站排名和流量)

随着互联网的发展&#xff0c;网站竞争日益激烈&#xff0c;如何让自己的网站在众多同类网站中脱颖而出&#xff1f;SEO优化成为了现代网站经营不可或缺的一部分。本文将为您介绍SEO优化的特点和重要性&#xff0c;以及如何利用SEO技巧提升网站的排名和流量。 一&#xff1a;S…

3d场景重建图像渲染 | 神经辐射场NeRF(Neural Radiance Fields)

神经辐射场NeRF&#xff08;Neural Radiance Fields&#xff09; 概念 NeRF&#xff08;Neural Radiance Fields&#xff0c;神经辐射场&#xff09;是一种用于3D场景重建和图像渲染的深度学习方法。它由Ben Mildenhall等人在2020年的论文《NeRF: Representing Scenes as Neur…

matplotlib-柱状图

日期&#xff1a;2024.03.14 内容&#xff1a;将matplotlib的常用方法做一个记录&#xff0c;方便后续查找。 # from matplotlib import pyplot as plt# 设置画布大小 plt.figure(figsize(20,8),dpi 300)# 全局设置中文字体 plt.rcParams[font.sans-serif] [Simhei]# 绘制三…

【深度学习实践】HaGRID,YOLOv5,手势识别项目,目标检测实践项目

文章目录 数据集介绍下载数据集将数据集转换为yolo绘制几张图片看看数据样子思考类别是否转换下载yolov5修改数据集样式以符合yolov5创建 dataset.yaml训练参数开始训练训练分析推理模型转换onnx重训一个yolov5s后记 数据集介绍 https://github.com/hukenovs/hagrid HaGRID&a…

可视化Relay IR

目标 为Relay IR生成图片形式的计算图。 实现方式 使用RelayVisualizer可视化Relay&#xff0c;RelayVisualizer定义了一组接口&#xff08;包括渲染器、解析器&#xff09;将IRModule可视化为节点和边&#xff0c;并且提供了默认解析器和渲染器。 首先需要安装依赖&#x…

可视化表单流程编辑器为啥好用?

想要提升办公率、提高数据资源的利用率&#xff0c;可以采用可视化表单流程编辑器的优势特点&#xff0c;实现心中愿望。伴随着社会的进步和发展&#xff0c;提质增效的办公效果一直都是很多职场办公团队的发展需求&#xff0c;作为低代码技术平台服务商&#xff0c;流辰信息团…

(黑马出品_05)SpringCloud+RabbitMQ+Docker+Redis+搜索+分布式

&#xff08;黑马出品_05&#xff09;SpringCloudRabbitMQDockerRedis搜索分布式 微服务技术分布式搜索 今日目标1.初识elasticsearch1.1.了解ES1.1.1.elasticsearch的作用1.1.2.ELK技术栈1.1.3.elasticsearch和lucene1.1.4.为什么不是其他搜索技…

【李沐论文精读】CLIP改进工作串讲精读

参考&#xff1a;CLIP改进工作串讲&#xff08;上&#xff09;、CLIP改进工作串讲&#xff08;下&#xff09;、李沐精读系列、CLIP 改进工作串讲&#xff08;上&#xff09;笔记 由于是论文串讲&#xff0c;所以每个链接放在每一个小节里。 CLIP的应用如下&#xff1a; 回顾&a…

计算机设计大赛 目标检测-行人车辆检测流量计数

文章目录 前言1\. 目标检测概况1.1 什么是目标检测&#xff1f;1.2 发展阶段 2\. 行人检测2.1 行人检测简介2.2 行人检测技术难点2.3 行人检测实现效果2.4 关键代码-训练过程 最后 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 行人车辆目标检测计数系统 …