[机器学习]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度全景影像、立体声音、交互元素等手段,创造出沉浸式的虚拟现实环境。该技术不仅在娱乐领域有着广泛应用,还可…...
《基于Apache Flink的流处理》笔记
思维导图 1-3 章 4-7章 8-11 章 参考资料 源码: https://github.com/streaming-with-flink 博客 https://flink.apache.org/bloghttps://www.ververica.com/blog 聚会及会议 https://flink-forward.orghttps://www.meetup.com/topics/apache-flink https://n…...
NLP学习路线图(二十三):长短期记忆网络(LSTM)
在自然语言处理(NLP)领域,我们时刻面临着处理序列数据的核心挑战。无论是理解句子的结构、分析文本的情感,还是实现语言的翻译,都需要模型能够捕捉词语之间依时序产生的复杂依赖关系。传统的神经网络结构在处理这种序列依赖时显得力不从心,而循环神经网络(RNN) 曾被视为…...
使用 SymPy 进行向量和矩阵的高级操作
在科学计算和工程领域,向量和矩阵操作是解决问题的核心技能之一。Python 的 SymPy 库提供了强大的符号计算功能,能够高效地处理向量和矩阵的各种操作。本文将深入探讨如何使用 SymPy 进行向量和矩阵的创建、合并以及维度拓展等操作,并通过具体…...
在QWebEngineView上实现鼠标、触摸等事件捕获的解决方案
这个问题我看其他博主也写了,要么要会员、要么写的乱七八糟。这里我整理一下,把问题说清楚并且给出代码,拿去用就行,照着葫芦画瓢。 问题 在继承QWebEngineView后,重写mousePressEvent或event函数无法捕获鼠标按下事…...
CVE-2020-17519源码分析与漏洞复现(Flink 任意文件读取)
漏洞概览 漏洞名称:Apache Flink REST API 任意文件读取漏洞CVE编号:CVE-2020-17519CVSS评分:7.5影响版本:Apache Flink 1.11.0、1.11.1、1.11.2修复版本:≥ 1.11.3 或 ≥ 1.12.0漏洞类型:路径遍历&#x…...
Go语言多线程问题
打印零与奇偶数(leetcode 1116) 方法1:使用互斥锁和条件变量 package mainimport ("fmt""sync" )type ZeroEvenOdd struct {n intzeroMutex sync.MutexevenMutex sync.MutexoddMutex sync.Mutexcurrent int…...
iview框架主题色的应用
1.下载 less要使用3.0.0以下的版本 npm install less2.7.3 npm install less-loader4.0.52./src/config/theme.js文件 module.exports {yellow: {theme-color: #FDCE04},blue: {theme-color: #547CE7} }在sass中使用theme配置的颜色主题,无需引入,直接可…...
破解路内监管盲区:免布线低位视频桩重塑停车管理新标准
城市路内停车管理常因行道树遮挡、高位设备盲区等问题,导致车牌识别率低、逃费率高,传统模式在复杂路段束手无策。免布线低位视频桩凭借超低视角部署与智能算法,正成为破局关键。该设备安装于车位侧方0.5-0.7米高度,直接规避树枝遮…...
Vue ③-生命周期 || 脚手架
生命周期 思考:什么时候可以发送初始化渲染请求?(越早越好) 什么时候可以开始操作dom?(至少dom得渲染出来) Vue生命周期: 一个Vue实例从 创建 到 销毁 的整个过程。 生命周期四个…...
游戏开发中常见的战斗数值英文缩写对照表
游戏开发中常见的战斗数值英文缩写对照表 基础属性(Basic Attributes) 缩写英文全称中文释义常见使用场景HPHit Points / Health Points生命值角色生存状态MPMana Points / Magic Points魔法值技能释放资源SPStamina Points体力值动作消耗资源APAction…...



