【机器学习】——无监督学习:KMeans

文章目录

聚类

将未标记的样本自动划分成多个类簇(无标签数据)

  • 在销售领域,利用聚类分析对客户历史数据进行分析,对客户划分类别,刻画不同客户群体的特征,从而深入挖掘客户潜在需求,改善服务质量,增强客户黏性
  • 在医学领域,对图像进行分析,挖掘疾病的不同临床特征,辅助医生进行临床诊断。聚类算法被用于图像分割,把原始图像分成若干个特定的、具有独特性质的区域并提取目标
  • 在生物领域,将聚类算法用于推导动植物分类,以往对动植物的认知往往是基于外表和习性,应用聚类分析按照功能对基因聚类,获取不同种类物种之间的基因关联。

聚类目标:得到较高的簇内相似度和较低的簇间相似度,使得簇间的距离尽可能大,簇内样本与簇中心的距离尽可能小(簇内距离尽可能小,簇间距离尽可能大)

聚类得到的簇可以用聚类中心、簇大小、簇密度和簇描述等来表示

  1. 聚类中心是一个簇中所有样本点的均值(质心)
  2. 簇大小表示簇中所含样本的数量
  3. 簇密度表示簇中样本点的紧密程度
  4. 簇描述是簇中样本的业务特征

k-均值聚类是基于划分的聚类算法,计算样本点与类簇质心的距离,与类簇质心相近的样本点划分为同一类簇。k-均值通过样本间的距离来衡量它们之间的相似度,两个样本距离越远,则相似度越低,否则相似度越高

k-均值算法聚类步骤如下:

  • 首先选取𝑘个类簇(𝑘需要用户进行指定)的质心,通常是随机选取。
  • 对剩余的每个样本点,计算它们到各个质心的欧式距离,并将其归入到相互间距离最小的质心所在的簇。计算各个新簇的质心。
  • 在所有样本点都划分完毕后,根据划分情况重新计算各个簇的质心所在位置,然后迭代计算各个样本点到各簇质心的距离,对所有样本点重新进行划分。
  • 重复第(2)步和第(3)步, 直到迭代计算后,所有样本点的划分情况保持不变,此时说明k-均值算法已经得到了最优解,将运行结果返回

【【五分钟机器学习】物以类聚的Kmeans】

代码实现:

python 复制代码
#!/usr/bin/python
# -*- coding: utf-8 -*-

import matplotlib.pyplot as plt
from sklearn import datasets
from sklearn.cluster import KMeans
from sklearn.metrics import calinski_harabasz_score

plt.rcParams['font.sans-serif']=['SimHei'] #用来正常显示中文标签
plt.rcParams['axes.unicode_minus']=False #用来正常显示负号

# 加载鸢尾花数据集
iris = datasets.load_iris()
X = iris.data

# 应用k-Means算法
kmeans = KMeans(n_clusters=3)  # 鸢尾花数据集有3个类别
kmeans.fit(X)
y_kmeans = kmeans.predict(X)
print(y_kmeans)
# #效果评估

# 计算Calinski-Harabasz分数
CH = calinski_harabasz_score(X, y_kmeans)
print('Calinski-Harabasz Score:', CH)

# 创建一个3D图形
fig = plt.figure(figsize=(10, 8))
ax = fig.add_subplot(111, projection='3d')

# 提取花瓣宽度、萼片长度、花瓣长度作为x、y、z轴
x = X[:, 2]  # 花瓣宽度
y = X[:, 0]  # 萼片长度
z = X[:, 3]  # 花瓣长度
# 绘制聚类结果
for i in range(3):
    ax.scatter(x[y_kmeans == i], y[y_kmeans == i], z[y_kmeans == i], label=f'Cluster {i}')

# 设置图形标题和轴标签
ax.set_xlabel('花瓣宽度')
ax.set_ylabel('萼片长度')
ax.set_zlabel('花瓣长度')
ax.set_title("鸢尾花数据K-Means聚类")
plt.legend()
plt.show()

# 创建一个3D图形
fig = plt.figure(figsize=(10, 8))
ax = fig.add_subplot(111, projection='3d')
Y=iris.target
# 绘制聚类结果
for i in range(3):
    ax.scatter(x[Y == i], y[Y == i], z[Y == i], label=f'Cluster {i}')

# 设置图形标题和轴标签
ax.set_xlabel('花瓣宽度')
ax.set_ylabel('萼片长度')
ax.set_zlabel('花瓣长度')
ax.set_title("鸢尾花数据")
plt.legend()
plt.show()

#可视化:

注意:

  1. 聚类确实能聚类成你想要的类别数量,但是每个类别标签是啥就不一定了,需要你自己定义或者指定。
  2. 聚类算法由于是非监督学习算法,所以衡量标准也不一样(没有标签数据了),自行百度吧。

练习案例:葡萄酒风格聚类

可视化:

聚类之后的可视化

原始数据可视化:

无监督学习虽然不要标签,但是效果没有监督学习好啊

相关推荐
Damon小智6 分钟前
合合信息DocFlow产品解析与体验:人人可搭建的AI自动化单据处理工作流
图像处理·人工智能·深度学习·机器学习·ai·自动化·docflow
猿类崛起@7 分钟前
百度千帆大模型实战:AI大模型开发的调用指南
人工智能·学习·百度·大模型·产品经理·大模型学习·大模型教程
孤独且没人爱的纸鹤24 分钟前
【机器学习】深入无监督学习分裂型层次聚类的原理、算法结构与数学基础全方位解读,深度揭示其如何在数据空间中构建层次化聚类结构
人工智能·python·深度学习·机器学习·支持向量机·ai·聚类
viperrrrrrrrrr724 分钟前
大数据学习(40)- Flink执行流
大数据·学习·flink
l1x1n027 分钟前
No.35 笔记 | Python学习之旅:基础语法与实践作业总结
笔记·python·学习
yuanbenshidiaos4 小时前
【大数据】机器学习----------强化学习机器学习阶段尾声
人工智能·机器学习
飞的肖4 小时前
日志(elk stack)基础语法学习,零基础学习
学习·elk
dal118网工任子仪6 小时前
66,【6】buuctf web [HarekazeCTF2019]Avatar Uploader 1
笔记·学习
02苏_6 小时前
2025/1/21 学习Vue的第四天
学习
羊小猪~~7 小时前
MYSQL学习笔记(四):多表关系、多表查询(交叉连接、内连接、外连接、自连接)、七种JSONS、集合
数据库·笔记·后端·sql·学习·mysql·考研