[机器学习]K-means——聚类算法
一.K-means算法概念
二.代码实现
# 0. 引入依赖
import numpy as np
import matplotlib.pyplot as plt # 画图依赖
from sklearn.datasets import make_blobs # 从sklearn中直接生成聚类数据# 1. 数据加载
# 生成(n_samples:样本点,centers:中心点,random_state:随机种子,cluster_std:聚类标准差)
x, y = make_blobs( n_samples=100, centers=6, random_state=1234, cluster_std=0.6 )
"""
print(x)
# 画原始图
plt.figure(figsize=(6,6))
plt.scatter(x[:,0], x[:,1], c=y)
plt.show()
"""# 2. 算法实现
# 引入scipy中的距离函数,默认欧式距离
from scipy.spatial.distance import cdistclass K_Means(object):# 初始化,每一类均值参数:n_clusters(K),迭代次数:max_iter,初始质心:centroidsdef __init__(self, n_clusters=6, max_iter=300, centroids=[]):self.n_clusters = n_clustersself.max_iter = max_iterself.centroids = np.array(centroids, dtype=np.float64)# 训练模型方法,k-means聚类过程,传入原始数据(x本身就有两个坐标)def fit(self, data):# 假如没有指定初始质心,就随机选取data中的点作为初始质心if (len(self.centroids) == 0):# 从data中随机生成0到data行数的6个整数,作为索引值# 从0到len(data)中随机选取n_clusters个self.centroids = data[np.random.randint(0, len(data), self.n_clusters), :]# 开始迭代for i in range(self.max_iter):# 1. 计算距离矩阵,得到的是一个100*6的矩阵,每一行为该样本点到6个质心的距离distances = cdist(data, self.centroids)# 2. 对距离按有近到远排序,选取最近的质心点的类别,作为当前点的分类c_ind = np.argmin(distances, axis=1)# 3. 对每一类数据进行均值计算,更新质心点坐标for i in range(self.n_clusters):# 排除掉没有出现在c_ind里的类别if i in c_ind:# 选出所有类别是i的点,取data里面坐标的均值,更新第i个质心self.centroids[i] = np.mean(data[c_ind == i], axis=0)# 实现预测方法def predict(self, samples):# 跟上面一样,先计算距离矩阵,然后选取距离最近的那个质心的类别distances = cdist(samples, self.centroids)c_ind = np.argmin(distances, axis=1)return c_ind"""
dist = np.array([[121, 221, 32, 43],[121, 1, 12, 23],[65, 21, 2, 43],[1, 221, 32, 43],[21, 11, 22, 3], ])
c_ind = np.argmin(dist, axis=1)
print(c_ind)
x_new = x[0:5]
print(x_new)
print(c_ind == 2)
print(x_new[c_ind == 2])
np.mean(x_new[c_ind == 2], axis=0)
"""# 3. 测试
# 定义一个绘制子图函数
def plotKMeans(x, y, centroids, subplot, title):# 分配子图,121表示1行2列的子图中的第一个plt.subplot(subplot)plt.scatter(x[:,0], x[:,1], c='red')# 画出质心点plt.scatter(centroids[:,0], centroids[:,1], c=np.array(range(6)), s=100)plt.title(title)# centroids指定质心初始点
kmeans = K_Means(max_iter=300, centroids=np.array([[2,1],[2,2],[2,3],[2,4],[2,5],[2,6]]))plt.figure(figsize=(16, 6))
plotKMeans( x, y, kmeans.centroids, 121, 'Initial State' )# 开始聚类
kmeans.fit(x)plotKMeans( x, y, kmeans.centroids, 122, 'Final State' )# 预测新数据点的类别
x_new = np.array([[0,0],[10,7]])
y_pred = kmeans.predict(x_new)print("经过训练的质心为:",kmeans.centroids)
print("这些点的预测为:",y_pred)plt.scatter(x_new[:,0], x_new[:,1], s=100, c='black')plt.show()
经过训练的质心为: [[ 5.76444812 -4.67941789]
[-2.89174024 -0.22808556]
[-5.89115978 2.33887408]
[-4.53406813 6.11523454]
[-1.15698106 5.63230377]
[ 9.20551979 7.56124841]]
这些点的预测为: [1 5]
相关文章:
[机器学习]K-means——聚类算法
一.K-means算法概念 二.代码实现 # 0. 引入依赖 import numpy as np import matplotlib.pyplot as plt # 画图依赖 from sklearn.datasets import make_blobs # 从sklearn中直接生成聚类数据# 1. 数据加载 # 生成(n_samples:样本点,centers&…...
并发编程 java锁机制
1、什么是锁,为什么需要锁? 并发环境下,会存在多个线程对同一个资源进行争抢的情况,假设线程A对资源正在进行修改,此时线程B又对同一资源进行了修改,就会导致数据不一致的问题。为了解决这个问题ÿ…...
Onerugged三防平板厂家丨三年质保承诺丨三防平板PAD
行业领先产品——Onerugged三防平板。凭借着十年的经验,我们深知终端设备在各个行业中的重要性,因此致力于为用户提供高可靠性的解决方案。 Onerugged三防平板以其卓越的性能和全方位的保护功能,在市场上脱颖而出。首先,它拥有IP…...
Android 系统启动流程
一.Android系统启动流程基本框架 Android系统完整的启动过程,从系统层次角度可分为 Linux 系统层、Android 系统服务层、Zygote进程模型三个阶段;从开机到启动 Home Launcher 完成具体的任务细节可分为七个步骤,下面就从具体的细节来解读 And…...
鸿蒙学习-app.json5配置文件
官网文档参考:https://developer.harmonyos.com/cn/docs/documentation/doc-guides-V3/app-configuration-file-0000001427584584-V3 位于AppScope下的app.json5配置文件 一、基础属性 {"app": {/*包名*/"bundleName": "com.example.dem…...
华为OD机试 - 智能成绩表( Python C C++ JavaGo JS PHP)
题目描述 小明是一名新老师,他需要将学生按考试总分或单科分数进行排名。学生的信息包括姓名、科目和对应的分数。帮助小明完成这个任务吧! 输入描述 第一行包含两个整数 n 和 m,分别代表学生人数和科目数量。 0 < n < 1000 < m &…...
训练集,验证集,测试集比例
三者的区别 训练集(train set) —— 用于模型拟合的数据样本。验证集(validation set)—— 是模型训练过程中单独留出的样本集,它可以用于调整模型的超参数和用于对模型的能力进行初步评估。 通常用来在模型迭代训练时…...
Altium Designer(AD)加载常用元器件库到工程图文教程及视频演示
🏡《专栏目录》 目录 视频演示1,概述2,加载方法3,总结视频演示 Altium Designer(AD)加载常用元器件库到工程 欢迎点击浏览更多高清视频演示 1,概述...
Java学习笔记2024/2/8
面向对象 //面向对象介绍 //面向: 拿、找 //对象: 能干活的东西 //面向对象编程: 拿东西过来做对应的事情 //01-如何设计对象并使用 //1.类和对象 //2.类的几个不错注意事项 1. 类和对象 1.1 类和对象的理解 客观存在的事物皆为对象 ,所以我们也常常说万物皆对…...
【安防】三个问题:IPC和ITC主要的差异点和相同点 、影响图像成像效果的因素有哪些、摩尔纹如何产生的和消除方法
问题一、IPC和ITC主要的差异点和相同点 差异点 1、应用场景:IPC主要应用于普通安防监控领域,如广场、商场、公园、写字楼等。它们通常被用于监控室内或有限区域的安全,例如,监控办公室、仓库、门口等。而ITC则主要应用于交通领…...
Windows 安装 MySQL 最新最简教程
Windows 安装 MySQL 最新最简教程 官网地址 https://dev.mysql.com/downloads/mysql/下载 MySQL zip 文件 配置 MySQL1、解压文件 2、进入 bin 目录 搜索栏输入 cmd 回车进入命令行 C:\Users\zhong\Desktop\MySQL\mysql-8.3.0-winx64\mysql-8.3.0-winx64\bin 注意这里是你自己…...
uniapp 本地存储的方式
1. uniapp 本地存储的方式 在uniapp开发中,本地存储是一个常见的需求。本地存储可以帮助我们在客户端保存和管理数据,以便在应用程序中进行持久化存储。本文将介绍uniapp中本地存储的几种方式,以及相关的代码示例。 1.1. 介绍 在移动应用开发…...
25、数据结构/二叉树相关练习20240207
一、二叉树相关练习 请编程实现二叉树的操作 1.二叉树的创建 2.二叉树的先序遍历 3.二叉树的中序遍历 4.二叉树的后序遍历 5.二叉树各个节点度的个数 6.二叉树的深度 代码: #include<stdlib.h> #include<string.h> #include<stdio.h> ty…...
数据结构——D/二叉树
🌈个人主页:慢了半拍 🔥 创作专栏:《史上最强算法分析》 | 《无味生》 |《史上最强C语言讲解》 | 《史上最强C练习解析》 🏆我的格言:一切只是时间问题。 1.树概念及结构 1.1树的概念 树是一种非线性的…...
redis:七、集群方案(主从复制、哨兵模式、分片集群)和面试模板
redis集群方案 在Redis中提供的集群方案总共有三种(一般一个redis节点不超过10G内存) 主从复制哨兵模式分片集群 主从复制(主从数据同步) replid和offset Replication Id:简称replid,是数据集的标记&a…...
没有事情做 随手写的小程序
Qt 代码包 在百度网盘里 链接: https://pan.baidu.com/s/17yjeAkzi18upfqfD7KxXOQ?pwd6666 dialog.h : #ifndef DIALOG_H #define DIALOG_H#include <QDialog> #include <mythread.h>QT_BEGIN_NAMESPACE namespace Ui { class Dialog; } QT_END_NAMESPACEclas…...
简单说网络:TCP+UDP
TCP和UPD: (1)都工作在传输层 (2)目的都是在程序之中传输数据 (3)数据可以是文本、视频或者图片(对TCP和UDP来说都是一堆二进制数没有太大区别) 一、区别:一个基于连接一个基于非连接 将人与人之间的通信比喻为进程和进程之前的通信:基本上有两种方式(1)写信;(2)打电话;这…...
Containerd 的前世今生和保姆级入门教程
Containerd 的前世今生 很久以前,Docker 强势崛起,以“镜像”这个大招席卷全球,对其他容器技术进行致命的降维打击,使其毫无招架之力,就连 Google 也不例外。Google 为了不被拍死在沙滩上,被迫拉下脸面&…...
分享78个行业PPT,总有一款适合您
分享78个行业PPT,总有一款适合您 78个行业PPT下载链接:https://pan.baidu.com/s/19UL58I5Z1QZidVrq50v6fg?pwd8888 提取码:8888 Python采集代码下载链接:采集代码.zip - 蓝奏云 学习知识费力气,收集整理更不易…...
VR全景技术可以应用在哪些行业,VR全景技术有哪些优势
引言: VR全景技术(Virtual Reality Panorama Technology)是一种以虚拟现实技术为基础,通过360度全景影像、立体声音、交互元素等手段,创造出沉浸式的虚拟现实环境。该技术不仅在娱乐领域有着广泛应用,还可…...
Infiniband网络排错指南:从`ibstatus`异常到OpenSM日志分析,一次搞定常见连接问题
Infiniband网络排错实战:从基础诊断到高级调优的全链路指南 当40Gbps的Infiniband链路突然降速到10Gbps,或者关键节点的OpenSM服务频繁崩溃时,每个运维工程师都能体会到那种指尖发凉的焦虑。本文将带你穿越Infiniband故障迷雾,构建…...
Qwen3-4B-Instruct-2507从入门到精通:Chainlit界面定制化教程
Qwen3-4B-Instruct-2507从入门到精通:Chainlit界面定制化教程 1. 引言:为什么选择Qwen3-4B-Instruct-2507? 如果你正在寻找一个既强大又轻量、既能快速部署又能灵活定制界面的AI模型,那么Qwen3-4B-Instruct-2507绝对值得你深入了…...
如何用Sunshine打造个人游戏串流中心:跨设备畅玩的终极指南
如何用Sunshine打造个人游戏串流中心:跨设备畅玩的终极指南 【免费下载链接】Sunshine Sunshine: Sunshine是一个自托管的游戏流媒体服务器,支持通过Moonlight在各种设备上进行低延迟的游戏串流。 项目地址: https://gitcode.com/GitHub_Trending/su/S…...
LangGPT:革新自然语言编程的结构化提示词框架
LangGPT:革新自然语言编程的结构化提示词框架 【免费下载链接】LangGPT LangGPT: Empowering everyone to become a prompt expert!🚀 Structured Prompt,Language of GPT, 结构化提示词,结构化Prompt 项目地址: https://gitcod…...
PDF24 Creator离线版隐藏技巧:5个连官网都没说的自动化妙用
PDF24 Creator离线版隐藏技巧:5个连官网都没说的自动化妙用 如果你经常需要处理PDF文档,可能已经听说过PDF24 Creator这款免费工具。但大多数人仅仅停留在基础功能的使用上,比如简单的PDF合并、分割或转换。今天我要分享的是PDF24 Creator离线…...
3种激活方案:解决IDM弹窗问题的开源工具应用指南
3种激活方案:解决IDM弹窗问题的开源工具应用指南 【免费下载链接】IDM-Activation-Script IDM Activation & Trail Reset Script 项目地址: https://gitcode.com/gh_mirrors/id/IDM-Activation-Script 一、问题溯源:解析IDM激活弹窗的技术本质…...
Zotero终极指南:高效文献管理的开源解决方案
Zotero终极指南:高效文献管理的开源解决方案 【免费下载链接】zotero Zotero is a free, easy-to-use tool to help you collect, organize, annotate, cite, and share your research sources. 项目地址: https://gitcode.com/gh_mirrors/zo/zotero Zotero是…...
AIGC时代,程序员会被取代吗?我的看法与行动建议
AIGC时代,程序员会被取代吗?我的看法与行动建议 随着AI生成内容(AIGC)技术的迅猛发展,许多人开始担忧:程序员这一职业是否会被AI取代?从代码生成工具GitHub Copilot到对话式编程助手ChatGPT&am…...
大量文件夹能一键改名吗?怎么改?4个干货技巧教你快速搞定
每次整理电脑文件时,面对成百上千个命名混乱的文件夹,手动逐个修改不仅耗时费力,还容易出现重复或格式错误。本文汇总了4种实用的批量重命名方法,从简单的系统自带功能到专业软件、插件工具,再到进阶的批处理脚本&…...
量子行走:从理论到Python实现——4. 量子算法设计与实现
目录 4. 量子算法设计与实现 4.1 基础量子算法 4.1.1 Deutsch-Jozsa算法 4.1.2 量子傅里叶变换 4.1.3 Grover搜索算法 4.2 Shor因数分解与离散对数 4.2.1 算法框架与经典预处理 4.2.2 量子相位估计的精度分析 4.3 变分量子算法 4.3.1 变分量子本征求解器 4.3.2 量子近…...



