当前位置: 首页 > news >正文

机器学习实验六:聚类

系列文章目录

  1. 机器学习实验一:线性回归
  2. 机器学习实验二:决策树模型
  3. 机器学习实验三:支持向量机模型
  4. 机器学习实验四:贝叶斯分类器
  5. 机器学习实验五:集成学习
  6. 机器学习实验六:聚类

文章目录

  • 系列文章目录
  • 一、实验目的
  • 二、实验原理
    • 1.聚类思想
    • 2.K 均值聚类算法 K-Means
  • 三、实验内容
  • 四、实验步骤
    • 1.训练 K-Means 模型
    • 2. 计算聚类纯度、兰德系数和 F1 值,评测聚类效果
  • 总结


一、实验目的

(1)掌握聚类的基本思想;
(2)掌握 K-means 算法,编程实现 K-means;
(3)掌握使用 K-Means 算法对鸢尾花三分类数据集进行聚类操作。

二、实验原理

1.聚类思想

聚类(Clustering)是一种典型的“无监督学习”,是把物理对象或抽象对
象的集合分组为由彼此类似的对象组成的多个类的分析过程。
聚类试图将数据集中的样本划分为若干个通常是不相交的子集,每个子集对
应一个簇。与分类的不同在于,聚类所要求的划分的类别是未知,类别个数也是
未知的。聚类的目标为簇内相似度尽可能高,簇间相似度尽可能低。

2.K 均值聚类算法 K-Means

K-means 是一种常用的基于欧式距离的聚类算法,其认为两个目标的距离越
近,相似度越大。其算法流程如下:在这里插入图片描述

三、实验内容

使用 Python 读取鸢尾花三分类数据集并训练最佳的 K-Means 模型,随后使
用生成的模型将数据进行聚类,并根据使用聚类纯度、兰德系数和 F1 值评测聚
类效果。
由于本次为聚类任务,因此使用聚类相关的混淆矩阵和评价指标。
聚类任务中的混淆矩阵与普通混淆矩阵的意义有一定区别,如下表所示:在这里插入图片描述
其中,TP 为两个同类样本在同一簇的数量;FP 为两个非同类样本在同一簇
的数量;TN 为两个非同类样本分别在两个簇的数量;FN 为两个同类样本分别在
两个簇的数量。
评价指标选择为聚类纯度 Purity、兰德系数 Rand Index(RI)、F1 度量值,
计算公式如下:在这里插入图片描述
代码实现时,可以直接调用 sklearn 库中的 pair_confusion_matrix()获得
混淆矩阵,随后利用公式进行计算。

四、实验步骤

1.训练 K-Means 模型

根据数据,我们已知鸢尾花分3类,因此我们这里的聚类数k=3。利用sklearn
的 KMeans()方法训练 K-Means 模型,并将结果用散点图表示,实现代码如下:

#训练 KMeans 模型
estimator = KMeans(n_clusters=3)
estimator.fit(X) #聚类
#绘制结果散点图
x0 = X[label_pred == 0]
x1 = X[label_pred == 1]
x2 = X[label_pred == 2]
plt.scatter(x0[:, 0], x0[:, 1], c = "red", marker='o', label='label0') 
plt.scatter(x1[:, 0], x1[:, 1], c = "green", marker='*', label='label1') 
plt.scatter(x2[:, 0], x2[:, 1], c = "blue", marker='+', label='label2') 
plt.xlabel('petal length') 
plt.ylabel('petal width') 
plt.legend(loc=2) 
plt.show() 

2. 计算聚类纯度、兰德系数和 F1 值,评测聚类效果

使用 sklearn.metrics 库中提供的 pair_confusion_matrix()方法求得当前
聚类的混淆矩阵,随后利用聚类纯度、兰德系数和 F1 值的计算公式计算得到当
前聚类效果的相应指标值。
以下为该部分代码:

#聚类纯度
def accuracy(labels_true, labels_pred):clusters = np.unique(labels_pred)labels_true = np.reshape(labels_true, (-1, 1))labels_pred = np.reshape(labels_pred, (-1, 1))count = []for c in clusters:idx = np.where(labels_pred == c)[0]labels_tmp = labels_true[idx, :].reshape(-1)count.append(np.bincount(labels_tmp).max())return np.sum(count) / labels_true.shape[0]
#兰德系数、F1 值
def get_rand_index_and_f_measure(labels_true, labels_pred, beta=1.):(tn, fp), (fn, tp) = pair_confusion_matrix(labels_true, labels_pred)ri = (tp + tn) / (tp + tn + fp + fn)p, r = tp / (tp + fp), tp / (tp + fn)f_beta = 2*p*r/(p+r)return ri, f_beta
#输出结果
purity = accuracy(y, y_pred)
ri, f_beta = get_rand_index_and_f_measure(y, y_pred, beta=1.)
print(f"聚类纯度:{purity}\n 兰德系数:{ri}\nF1 值:{f_beta}")

总结

以上就是今天要讲的内容,机器学习实验六:聚类

http://www.lryc.cn/news/259078.html

相关文章:

  • 逆向思考 C. Fence Painting
  • 当当狸AR智能学习图集跨越千年文明传承,邀您“面对面”与虚拟诗人互动对诗
  • CESM笔记——component活动状态+compset前缀解析+B1850,BHIST区别
  • vue 页面跳转时,浏览器上方显示进度条
  • tqdm输出字符串被截断
  • Qt::UniqueConnection和lambda一块用无效
  • 四川技能大赛——2023年四川网信人才技能大赛(网络安全管理员赛项)决赛
  • 死锁(面试常问)
  • GO设计模式——3、抽象工厂模式(创建型)
  • AUTOSAR_PRS_LogAndTraceProtocol文档翻译
  • 自定义比较器
  • 【NLP】如何管理大型语言模型 (LLM)
  • 利用机器学习实现客户细分的实战
  • Tair(4):Tair原理架构
  • SAP UI5 walkthrough step7 JSON Model
  • 智能检测/摄像头监控系统EasyCVR无法启动进程是什么原因?如何解决?
  • export命令详解
  • 十几个软件测试实战项目【外卖/医药/银行/电商/金融】
  • 用python打印出菱形图案
  • k8s 中externalTrafficPolicy应用场景和实践
  • Selenium自动化测试框架(超详细)
  • 蚂蚁SEO实用的网络baidu蜘蛛有哪些
  • 滑动窗口如人生,回顾往事不复还———力扣刷题
  • VM实现方式及其优缺点
  • MySQL——库,表基础操作
  • 文件批量管理方法:100个文件要怎样快速放在100个指定的文件夹中
  • 管理的五大过程和十大知识领域
  • C/C++ 快乐数: 编写一个算法来判断一个数n是不是快乐数
  • 【后端】JVM 远程调试
  • Android Studio中配置Flutter插件,创建小项目“hello world”