机器学习——聚类算法

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算法,可以通过遍历半径参数,同理轮廓系数越大说明参数越合适。

相关推荐
睡觉狂魔er7 分钟前
自动驾驶控制与规划——Project 3: LQR车辆横向控制
人工智能·机器学习·自动驾驶
Lenyiin8 分钟前
第146场双周赛:统计符合条件长度为3的子数组数目、统计异或值为给定值的路径数目、判断网格图能否被切割成块、唯一中间众数子序列 Ⅰ
c++·算法·leetcode·周赛·lenyiin
郭wes代码15 分钟前
Cmd命令大全(万字详细版)
python·算法·小程序
scan72429 分钟前
LILAC采样算法
人工智能·算法·机器学习
菌菌的快乐生活1 小时前
理解支持向量机
算法·机器学习·支持向量机
爱喝热水的呀哈喽1 小时前
《机器学习》支持向量机
人工智能·决策树·机器学习
大山同学1 小时前
第三章线性判别函数(二)
线性代数·算法·机器学习
axxy20001 小时前
leetcode之hot100---240搜索二维矩阵II(C++)
数据结构·算法
苏言の狗1 小时前
Pytorch中关于Tensor的操作
人工智能·pytorch·python·深度学习·机器学习
黑客Ash1 小时前
安全算法基础(一)
算法·安全