机器学习——聚类算法

0、前言:

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

1、K-means:

  • 原理:先根据预先提供的k值,随机从数据中选k个点,然后分别计算所有点到这k个点之间的距离。根据它们距离k个点距离的远近对所有点进行分类,然后计算k个聚类簇的中心(用欧氏距离计算),再次对所有点计算它们距离k个聚类簇中心的距离,再次依据远近程度分类,直至k个聚类簇的中心不再变化为止。
  • 优缺点:优点是简单、快速,适合常规数据集,缺点是k值难确定,很难发现任意形状的簇。
  • 重要参数:n_clusters:聚类簇的个数(相当于k值)
  • 重要属性:cluster_centers_:聚类中心点的坐标;labels_:每个样本点的标签
  • 应用实例:图片压缩
python 复制代码
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算法,可以通过遍历半径参数,同理轮廓系数越大说明参数越合适。

相关推荐
yyt_cdeyyds8 分钟前
FIFO和LRU算法实现操作系统中主存管理
算法
alphaTao34 分钟前
LeetCode 每日一题 2024/11/18-2024/11/24
算法·leetcode
kitesxian43 分钟前
Leetcode448. 找到所有数组中消失的数字(HOT100)+Leetcode139. 单词拆分(HOT100)
数据结构·算法·leetcode
VertexGeek1 小时前
Rust学习(八):异常处理和宏编程:
学习·算法·rust
石小石Orz1 小时前
Three.js + AI:AI 算法生成 3D 萤火虫飞舞效果~
javascript·人工智能·算法
罗小罗同学1 小时前
医工交叉入门书籍分享:Transformer模型在机器学习领域的应用|个人观点·24-11-22
深度学习·机器学习·transformer
孤独且没人爱的纸鹤2 小时前
【深度学习】:从人工神经网络的基础原理到循环神经网络的先进技术,跨越智能算法的关键发展阶段及其未来趋势,探索技术进步与应用挑战
人工智能·python·深度学习·机器学习·ai
羊小猪~~2 小时前
tensorflow案例7--数据增强与测试集, 训练集, 验证集的构建
人工智能·python·深度学习·机器学习·cnn·tensorflow·neo4j
jiao_mrswang2 小时前
leetcode-18-四数之和
算法·leetcode·职场和发展
qystca2 小时前
洛谷 B3637 最长上升子序列 C语言 记忆化搜索->‘正序‘dp
c语言·开发语言·算法