机器学习——聚类算法

news/2024/5/20 6:59:17 标签: 机器学习, 算法, 聚类

0、前言:

  • 机器学习聚类算法主要就是两类:K-means和DBSCAN
  • 聚类:一种无监督的学习,事先不知道类别(相当于不用给数据提前进行标注),自动将相似的对象归到同一个簇中

1、K-means:

  • 原理:先根据预先提供的k值,随机从数据中选k个点,然后分别计算所有点到这k个点之间的距离。根据它们距离k个点距离的远近对所有点进行分类,然后计算k个聚类簇的中心(用欧氏距离计算),再次对所有点计算它们距离k个聚类簇中心的距离,再次依据远近程度分类,直至k个聚类簇的中心不再变化为止。
    在这里插入图片描述
  • 优缺点:优点是简单、快速,适合常规数据集,缺点是k值难确定,很难发现任意形状的簇。
  • 重要参数:n_clusters:聚类簇的个数(相当于k值)
  • 重要属性:cluster_centers_:聚类中心点的坐标;labels_:每个样本点的标签
  • 应用实例:图片压缩
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from sklearn.cluster import KMeans, DBSCAN
from sklearn.datasets import load_sample_image
# 生成多个分类图:2、4、16、64
# 1、导入图片数据
china = load_sample_image('china.jpg')
# 2、数据预处理改变维度保留颜色通道变为二位数据
china = china.reshape(-1,3)
display(china.shape) # (273280, 3)
# 3、随机选取10000个点作为训练数据
data_train = china.copy()
np.random.shuffle(data_train)
data_train = data_train[:10000]
display(data_train.shape) # (10000, 3)
# 4、训练绘制子图
plt.figure(figsize=(2*3,2*3))
for i,k in enumerate([2,4,16,64]):
    ax = plt.subplot(2,2,i+1)
    # 训练
    km = KMeans(k,n_init='auto')
    km.fit(data_train)
    # 获取所有簇中心的RGB值
    centers = km.cluster_centers_
    # 通过预测获取原图每个位置的分类标签
    label = km.predict(china)
    # 生成预测图
    final_img = centers[label]
    # 将预测图所有位置RGB值转化为0~256范围
    final_img = final_img/256
    ax.imshow(final_img.reshape(427,640,3))
    ax.set_title(f'K = {k}',fontsize=15)
    plt.imsave(f'./tupian{i}.png',final_img.reshape(427,640,3))
    

在这里插入图片描述
在这里插入图片描述


2、DBSCAN:

  • 原理:给定算法聚类半径和最小生成簇的样本数量,算法就会挨个计算所有样本周围的数据直到找到在聚类半径中所有的点,然后看这些点能否满足最小生成簇的样本数量,如果可以就是一个簇,否则就是噪点。
    在这里插入图片描述

3、轮廓系数

  • 1、聚类算法的评估指标:轮廓系数,其计算公式如下,bi代表当前点到其他簇内的距离中最小的距离,ai代表当前点到所属簇内最大的距离。如果最终s值接近1,说明样本i聚类合理,接近-1,说明样本i更应该分类到另外的簇,接近0,表示样本在两个簇的边界。
    在这里插入图片描述
  • 2、轮廓系数的求法:一般选用平均轮廓系数得分,轮廓系数中需要两个参数(data和labels):数据样本和数据样本对应的标签,所以一般是训练完聚类模型之后才能算出轮廓系数的得分。
    在这里插入图片描述
  • 轮廓系数作用:对于K-means算法,通过遍历可能的k值,然后比较k值大小,轮廓系数越大说明k值越合适。对于DBSCAN算法,可以通过遍历半径参数,同理轮廓系数越大说明参数越合适。


http://www.niftyadmin.cn/n/5035207.html

相关文章

搞嵌入式属于程序员吗?

今日解答问题,搞嵌入式属于程序员吗?有这类疑惑也正常,搞嵌入式写不了多少代码,大多是移植,还要看电路图,用示波器,有的还想电路设计。所以到底算不算呢?那当然的,而且我特别赞同另一位朋友所说的:嵌入式程…

网络通信:基本原理、协议与技术趋势

网络通信:基本原理、协议与技术趋势 随着信息技术的飞速发展,网络通信已成为日常生活中不可或缺的一部分。从社交媒体到电子商务,从在线视频会议到远程教育,网络通信技术为这些应用提供了强大的支持。本文将深入探讨网络通信的基…

2020-2023小样本学习(FSL)顶会论文及开源代码合集(已分类整理)

这次分享的是近四年(2020-2023)各大顶会中的小样本学习(FSL)论文,有160篇,涵盖了FSL三大类方法:数据、模型、算法,以及FSL的应用、技术、理论等领域。 由于论文数量太多&#xff0c…

构建工具vite/webpack

一、vite 快速开始 全局安装vite npm i -g vite创建vite npm create vite安装依赖 npm i运行项目 npm run dev 二、webpack 1、使用步骤 初始化项目npm init -y安装依赖webpack、webpack-cli在项目中创建src目录,然后编写代码(默认主文件index.js&a…

BMS电池管理系统的蓝牙芯片 国产高性能 低功耗蓝牙Soc芯片PHY6222

电池管理系统是对电池进行监控与控制的系统,将采集的电池信息实时反馈给用户,同时根据采集的信息调节参数,充分发挥电池的性能。但是,前技术中,在管理多个电池时,需要人员现场调试与设置,导致其…

APP自动化之Poco框架

今天给大家介绍一款自动化测试框架Poco,其脚本写法非常简洁、高效,其元素定位器效率更快,其本质基于python的第三方库,调试起来也会非常方便,能够很好的提升自动化测试效率,节省时间。 (一)背景…

武汉市中级工程师职称水平能力测试考试题型有哪些呢?

目前湖北中级职称评审,很多地方都需要组织水平能力测试,武汉市、襄阳、孝感、宜昌、荆州、鄂州、十堰等地级市都需要参加水平能力测试,但是水平能力测试每个地方要求又是不一样,目前湖北全省都没有统一的水平能力测试题库。 关于武…

3.6 重载其它makefile文件

一、重载其它Makefile文件 有时一个m akefile文件和另一个m akefile文件相近也是很有用的。您可以使用‘include’指令把更多的m akefile文件包含进来,如 此可加入更多的目标和定义的变量。然而如果两个m akefile文件对相同的目标给出了不同的命令,m ak…