机器学习:k均值
所有代码和文档均在golitter/Decoding-ML-Top10: 使用 Python 优雅地实现机器学习十大经典算法。 (github.com),欢迎查看。
在“无监督学习”中,训练样本的标记信息是未知的,目标是通过对无标记训练样本的学习来揭示数据的内在性质及规律,为进一步的数据分析提供基础,较为经典的是聚类。
**聚类试图将数据集中的样本划分为若干个通常是不相交的子集,每个子集称为一个“簇”。**聚类既能作为一个单独过程,用于找寻数据内在的分布结构,也可以作为分类等其他学习任务的前驱过程。
距离计算:
-
连续属性及离散有序属性:闵可夫斯基距离:
∑ u = 1 n ∣ x i u − x j u p ∣ p \sqrt[p]{\sum_{u=1}^n|x_{iu} - x_{ju}}|^p pu=1∑n∣xiu−xju∣p -
无序属性:VDM(Value Difference Metric)
∑ i = 1 k ∣ m u , a , i m u , a − m u , b , i m u , b ∣ p \sum_{i=1}^{k}{|\frac{m_{u,a,i}}{m_{u,a}}-\frac{m_{u,b,i}}{m_{u,b}}|^p} i=1∑k∣mu,amu,a,i−mu,bmu,b,i∣p
K均值算法(k-means):对于给定的样本集,按照样本之间的距离大小,将样本集划分为K个簇。让簇内的点尽量紧密的连在一起,而让簇间的距离尽量的大。给定样本集D,k-means算法针对聚类所得簇划分C最小化平方误差:
E = ∑ i = 1 k ∑ x ∈ C i ∣ ∣ x − u i ∣ ∣ 2 2 E\ =\ \sum_{i=1}^{k}\sum_{x\in C_i}\left|\left|x-u_i\right|\right|_2^2 E = i=1∑kx∈Ci∑∣∣x−ui∣∣22
K-Means聚类算法步骤实质是EM算法(最大期望算法)的模型优化过程,具体步骤如下:
-
随机选择k个样本作为初始簇类的均值向量
-
将每个样本数据集划分到离它距离最近的簇
-
根据每个样本所属的簇,更新簇类的均值向量
-
重复(2)(3)步,当达到最大迭代次数或簇类的均值向量不再改变
代码实现:
数据处理:
import pandas as pd
import numpy as np# https://sci2s.ugr.es/keel/dataset.php?cod=182#inicio
df = pd.read_csv('banana.dat', header=None)def get_data():return np.array(df.iloc[:, :2])
核心代码:
from data_processing import get_data
import numpy as np
import matplotlib.pyplot as plt# 初始化聚类中心
def init_centroids(data: np.array, k: int) -> np.array:return data[np.random.choice(data.shape[0], k, replace=False)]# 欧拉距离
def euclidean_distance(x: np.array, y: np.array) -> float:return np.sqrt(np.sum(np.square(x - y)))# 计算每个样本点到k个聚类中心的距离
def compute_distance(data: np.array, centroids: np.array) -> np.array:distance = np.zeros((data.shape[0], centroids.shape[0]))for i in range(centroids.shape[0]):distance[:, i] = np.apply_along_axis(euclidean_distance, 1, data, centroids[i])return distance# KMeans算法
def kmeans(data: np.array, k: int, max_iter: int = 10):centroids = init_centroids(data, k)for i in range(max_iter):distance = compute_distance(data, centroids)# 每个样本点到k个聚类中心的距离最小值的索引labels = np.argmin(distance, axis=1)for j in range(k):centroids[j] = np.mean(data[labels == j], axis=0)return labels, centroidsif __name__ == '__main__':data = get_data()k = 3centroids = init_centroids(data, k)labels, centroids = kmeans(data, k)# print(labels.shape)plt.title('K-Means Clustering', fontsize=16)plt.xlabel('Feature 1', fontsize=14)plt.ylabel('Feature 2', fontsize=14)plt.scatter(data[:, 0], data[:, 1], c=labels, cmap='viridis')plt.show()

机器学习之K-Means(k均值)算法_k-means算法-CSDN博客
相关文章:
机器学习:k均值
所有代码和文档均在golitter/Decoding-ML-Top10: 使用 Python 优雅地实现机器学习十大经典算法。 (github.com),欢迎查看。 在“无监督学习”中,训练样本的标记信息是未知的,目标是通过对无标记训练样本的学习来揭示数据的内在性质及规律&…...
保姆级GitHub大文件(100mb-2gb)上传教程
GLF(Git Large File Storage)安装使用 使用GitHub desktop上传大于100mb的文件时报错 The following files are over 100MB. lf you commit these files, you will no longer beable to push this repository to GitHub.com.term.rarWe recommend you a…...
1.【BUUCTF】[SUCTF 2019]EasyWeb
进入题目页面如下 给出源码开始代码审计 <?php // 定义一个名为 get_the_flag 的函数,该函数主要处理文件上传逻辑 function get_the_flag(){// 构造用户上传文件的目录,目录名是 "upload/tmp_" 加上客户端 IP 地址的 MD5 哈希值$userdir…...
CloudberryDB(七)二级索引
在CloudberryDB中,二级索引的概念与PostgreSQL中的类似。但是,由于分布式特性,创建和使用二级索引需要考虑一些额外的因素。以下是关于二级索引的一些要点: 1. **创建索引**:在Greenplum中,可以使用CREATE…...
P1878 舞蹈课(详解)c++
题目链接:P1878 舞蹈课 - 洛谷 | 计算机科学教育新生态 1.题目解析 1:我们可以发现任意两个相邻的都是异性,所以他们的舞蹈技术差值我们都要考虑,4和2的差值是2,2和4的差值是2,4和3的差值是1,根…...
何须付费免费它不香吗
聊一聊 又是一年开学季。 开学了发一些应时期的小软件。 今天给大家分享一款学校班级课程表工具。 这款工具可以投放在学校电子大屏上。 支持学校的白板软件。 软件介绍 学校班级课程表 工具界面清爽,信息能一目了然。 虽然看感觉功能简单,但每个…...
ELK组成及实现原理
ELK是由三个主要组件组成的日志处理和搜索平台,分别是: Elasticsearch:Elasticsearch 是一个基于Lucene构建的开源搜索引擎,提供强大的搜索、分析功能。它负责存储和索引所有数据,并提供实时搜索能力。数据可以通过HTT…...
【Vue3源码解析】响应式原理
源码环境搭建 【Vue3源码解析】应用实例创建及页面渲染-CSDN博客 写文章时的Vue 版本: "version": "3.5.13",针对单个包进行开发环境打包、测试。 pnpm run dev reactivityreactive 创建响应式对象 packages/reactivity/src/reactive.ts …...
servlet中的ServletContext
设置、获取ServletContext配置信息 与ServletConfig不同的是,所有Servlet共享一份ServletContext 在web.xml中设置配置信息 <?xml version"1.0" encoding"UTF-8"?> <web-app xmlns"https://jakarta.ee/xml/ns/jakartaee"x…...
第1825天 | 我的创作纪念日:缘起、成长经历、大方向
目录 缘起一、成为创作者的初心(一)好记性不如烂笔头(二)文档可以帮助多个人解决同一个问题(三)加深自己对问题的理解,对技术的研究 二、实战项目中的经验分享(一)项目背…...
如何在 Mac 上解决 Qt Creator 安装后应用程序无法找到的问题
在安装Qt时,遇到了一些问题,尤其是在Mac上安装Qt后,发现Qt Creator没有出现在应用程序中。通过一些搜索和操作,最终解决了问题。以下是详细的记录和解决方法。 1. 安装Qt后未显示Qt Creator 安装完成Qt后,启动应用程…...
Java 设计模式之迭代器模式
文章目录 Java 设计模式之迭代器模式概述UML代码实现Java的迭代器 Java 设计模式之迭代器模式 概述 迭代器模式(Iterator),提供一种方法顺序访问一个聚合对象中的各个元素,而又不暴露该对象的内部表示。 UML Iterator:迭代器接口ÿ…...
登录演示和功能拆解
登录演示和功能拆解 表单基础校验实现 1. 基础双向绑定 <template><el-form><el-form-item label"账号"><el-input v-model"formData.username" /></el-form-item><el-form-item label"密码"><el-inpu…...
DeepSeek深度求索API多线程批量写原创文章软件-ai痕迹极低
DeepSeek是一款由国内人工智能公司研发的大型语言模型,拥有强大的自然语言处理能力,能够理解并回答问题,还能辅助写代码、整理资料和解决复杂的数学问题。 与OpenAI开发的ChatGPT相比,DeepSeek不仅率先实现了媲美OpenAI-o1模型的…...
Redis进阶使用
在日常工作中,使用Redis有什么需要注意的? 设置合适的过期时间。尽量避免大key问题,避免用字符串存储过大的数据;避免集合的数据量太大,要定期清除。 常用的数据结构有哪些?用在什么地方? 按…...
Python常见面试题的详解6
1. 按字典 value 值排序 要点:对于给定字典,使用 sorted() 函数结合 items() 方法,依据 value 进行排序,也可以定义一个通用函数,支持按 value 升序或降序排序。示例: python d {a: 1, b: 2, c: 3, d: …...
Linux基础之文件权限的八进制表示法
1. Linux 文件权限概述 在 Linux 中,每个文件或目录都有三种基本权限,分别是: 读权限 - r:允许查看文件内容。写权限 - w:允许修改文件内容。执行权限 - x:允许执行文件或进入目录。 每个文件或目录的权…...
数据结构与算法面试专题——堆排序
完全二叉树 完全二叉树中如果每棵子树的最大值都在顶部就是大根堆 完全二叉树中如果每棵子树的最小值都在顶部就是小根堆 设计目标:完全二叉树的设计目标是高效地利用存储空间,同时便于进行层次遍历和数组存储。它的结构使得每个节点的子节点都可以通过简…...
《On Java进阶卷》阅读笔记(五)
第7章 IO系统 I/O流: IO有很多不同的来源和去处,如文件、控制台网络连接等,而且还涉及需求以很多种方式,如顺序读取、随机访问、缓冲、字符、按行读取、按字读取等。 Java8的函数式流相关的类和IO流之间并无关联。 IO流隐藏了…...
《代码随想录》刷题笔记——回溯篇【java实现】
文章目录 组合组合总和 III电话号码的字母组合组合总和组合总和II思路代码实现 分割回文串※思路字符串分割回文串判断效率优化※ 复原 IP 地址优化版本 子集子集 II使用usedArr辅助去重不使用usedArr辅助去重 递增子序列※全排列全排列 II重新安排行程题意代码 N 皇后解数独直…...
三极管装反了还能用吗?我用8050和12V电源实测,结果有点意外
三极管装反后的真实表现:从8050实测到电路设计启示 引言 面包板上的三极管突然冒烟了——这是我作为电子爱好者入门时最难忘的"学费"之一。当时怎么也没想到,那个看似无害的小错误(把8050三极管的集电极和发射极接反)会…...
保姆级教程:用C++从零实现SGM立体匹配的代价计算(附OpenCV 4.8+代码)
从零实现SGM立体匹配的代价计算:C与OpenCV实战指南 立体视觉是计算机视觉领域的核心技术之一,而半全局匹配(Semi-Global Matching, SGM)算法因其在精度和效率间的平衡成为工业界首选方案。本文将带您深入SGM算法的核心环节——代价计算,通过C…...
LanzouAPI深度解析:蓝奏云直链生成技术实现与实践
LanzouAPI深度解析:蓝奏云直链生成技术实现与实践 【免费下载链接】LanzouAPI 蓝奏云直链,蓝奏api,蓝奏解析,蓝奏云解析API,蓝奏云带密码解析 项目地址: https://gitcode.com/gh_mirrors/la/LanzouAPI LanzouAP…...
告别命令行!用C语言封装AD9361 IIO驱动,在Vitis里实现一键读写(附完整代码)
告别命令行!用C语言封装AD9361 IIO驱动,在Vitis里实现一键读写(附完整代码) 在嵌入式射频系统开发中,AD9361作为一款高性能射频捷变收发器,其配置过程往往需要频繁操作Linux IIO接口。传统方式通过命令行手…...
IronEngine架构解析:多角色协作AI助手的设计与实践
1. IronEngine架构设计解析:多角色协作的AI助手系统IronEngine作为一款面向通用场景的AI助手系统,其核心创新在于采用了"规划-审查-执行"的三角色分离架构。这种设计理念源于对现有单一模型架构局限性的深刻洞察——当单个模型同时承担规划、评…...
TranslucentTB实战避坑:深度解决Microsoft.UI.Xaml.2.8缺失问题终极指南
TranslucentTB实战避坑:深度解决Microsoft.UI.Xaml.2.8缺失问题终极指南 【免费下载链接】TranslucentTB A lightweight utility that makes the Windows taskbar translucent/transparent. 项目地址: https://gitcode.com/gh_mirrors/tr/TranslucentTB 嘿&a…...
利用 Taotoken 统一 API 简化多智能体系统的模型管理
利用 Taotoken 统一 API 简化多智能体系统的模型管理 在构建一个包含多种职能智能体的复杂系统时,一个常见的工程挑战是模型管理。不同的智能体可能根据其任务特性,需要调用不同的大语言模型。如果每个智能体都直接对接多个原厂 API,开发团队…...
NCMDump终极指南:三步实现网易云音乐NCM转MP3免费转换
NCMDump终极指南:三步实现网易云音乐NCM转MP3免费转换 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 你是否曾经从网易云音乐下载了心爱的歌曲,却发现只能在特定应用中播放?那些扩展名为.ncm的文…...
基于IMRaD结构的本科毕业论文完稿指南:从实验数据到学术呈现的系统性方法
目录 1 引言 1.1 研究背景与问题提出 1.2 研究目的与意义 1.3 论文结构安排 2 文献综述与理论基础 2.1 IMRaD学术写作结构溯源与演进 2.2 AI辅助学术写作与提示词工程研究现状 2.3 理论基础:从数据到叙事的学术转化理论 3 研究方法与实验设计 3.1 基于IMRa…...
Proteus仿真STM32蓝牙小车,手把手教你用VSPD虚拟串口搞定HC-05模块通讯
基于Proteus的STM32蓝牙小车仿真开发实战指南 在嵌入式系统学习与开发过程中,硬件资源的限制常常成为阻碍项目进展的瓶颈。特别是对于学生和电子爱好者而言,购置各种传感器模块、通信设备不仅成本高昂,还可能面临物流等待和兼容性问题。本文将…...
