机器学习实验六:聚类

系列文章目录

  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}")

总结

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/222600.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

1.3角色设计精要

一、角色设计流程 二、确定角色关键词 OW角色小美 关键词: 中国防守英雄冰与雪聪明的邻家大姐姐探索与冒险南极科考航天科技 OW角色猎空 关键词: 英国敏捷飞行员进攻英雄年轻动感活泼 三、收集素材和灵感 概念设计 由分析用户需求到生成概念产品一系…

CompletableFuture异步执行

CompletableFuture异步执行 概念 Java 8引入了一个强大的类:CompletableFuture,它在java.util.concurrent包中。CompletableFuture是Future的增强版本,主要用于实现异步编程。 首先,我们要理解什么是Future。Future是Java5引入的一个接口,代表一个异步计算的结果。你可…

反序列化漏洞详解(二)

目录 pop链前置知识,魔术方法触发规则 pop构造链解释(开始烧脑了) 字符串逃逸基础 字符减少 字符串逃逸基础 字符增加 实例获取flag 字符串增多逃逸 字符串减少逃逸 延续反序列化漏洞(一)的内容 pop链前置知识,魔术方法触…

Linux之进程(二)

目录 一、进程优先级 1、基本概念 2、Linux中的优先级 1、PRI和NI 2、通过top命令更改进程NI值 3、四个特性 二、进程切换 一、进程优先级 1、基本概念 什么是优先级?优先级:进程获取cpu资源分配的先后顺序,就是指进程的优先权。优先…

JVM 虚拟机(一)导学与字节码文件组成

一、实战 JVM - 基础篇 初识 JVM 什么是 JVM? Java Virtual Machine(JVM),中文翻译为 Java 虚拟机 JVM 的功能 解释和运行:对字节码文件中的指令进行实施的解释成机器码,让计算机执行。自动为对象和方法…

Python版本与opencv版本的对应关系

python版本要和opencv版本相对应,否则安装的时候会报错。 可以到Links for opencv-python上面查看python版本和opencv版本的对应关系,如图,红框内是python版本,绿框内是opencv版本。 查看自己的python版本后,使用下面…

时序数据库TDengine安装及c#连接读写数据

物联网数据采集,需写入大量数据,这时就用到时序数据库来存储和快速读取 我个人使用感觉国产的开源项目TDengine,比InfluxDB操作方便很多,容易上手,支持使用SqlSugar进行数据操作,跟操作mysql数据库一样的体…

分部积分法

1.形式:u对v求积分uv-v对u求积分,一前一后,一般把三角函数,反三角函数,In,e的x次方提到d里面 2. 3. 4. 5. 6. 7. 当结果中出现要求的不要慌,不是1直接求,是1重新计算

DTCC2023大会-基于eBPF观测数据库-附所有PPT下载链接

DTCC2023大会-基于eBPF观测数据库-附所有PPT下载链接 8月16日—18日,第14届中国数据库技术大会(DTCC-2023)在北京国际会议中心举行。聚好看在大会上首次发布基于eBPF观测数据库性能的产品DBdoctor,受到了业界广泛的关注。近期几位业内同仁过来要大会的PPT&#xff…

三维模型的顶层合并构建的优势方面浅析

三维模型的顶层合并构建的优势方面浅析 倾斜摄影超大场景的三维模型的顶层合并具有许多优势,本文将对其进行浅析。 一、全面的信息获取 倾斜摄影超大场景的三维模型的顶层合并能够从不同视角和角度获取全面的信息。通过倾斜摄影技术,可以在一个扫描过程…

shell脚本生成随机双色球号码

[rootcentos7 ~]#cat lottery.sh #!/bin/bash #定义零长度数组 arr() length${#arr[]} while [ "${length}" -lt 6 ]do#取1到33的随机数s$[$RANDOM%331]#判断随机数是否在数组中,不在就赋值给数组if [[ ! "${arr[]}" ~ "${s}" ]]then…

Ubuntu防止休眠和挂起(笔记)

目录 1 动机2 禁用休眠3 解除休眠 1 动机 我要将 饿啊人制作成 noah-mp 的区域运行强迫,但是跑的慢,一晚上两天。后来发现是因为电脑自动 supend 了。Ubuntu 在电源那里最多只能设置 2 小时的防止休眠,2小时候又自动休眠,严重影响…

数据资产入表在即,企业如何把握机遇,进行数据资产管理?

数据作为新时代重要的生产要素之一,数据资产化的相关工作正在提速。自今年10月1日起,中国资产评估协会制定的《数据资产评估指导意见》正式施行。同时,《企业数据资源相关会计处理暂行规定》近期转为正式稿,也将于明年1月1日起施行…

7 种查询策略教你用好 Graph RAG 探索知识图谱

近来 NebulaGraph 社区在 LLM Graph 和 Graph RAG 领域进行了深入的探索和分享。在 LlamaIndex 和 LangChain 中,NebulaGraph 引入了一系列知识图谱和图存储工具,支持编排、图谱与大模型间的交互。之前,NebulaGraph 布道师古思为作为这项工作…

阻碍“元宇宙”游戏行业发展的最大瓶颈是什么?

很显然,我们现在还没看到真正的“元宇宙”产品,在3-5年内也不太可能看到这样的产品。按照米哈游CEO蔡浩宇的说法,2030年希望建成一个“上亿人愿意生活在其中的虚拟世界”,那也是八年以后的事情了。 原因很简单:技术不成…

基于Echarts的大数据可视化模板:智慧交通管理

目录 引言智慧交通管理的重要性ECharts在智慧交通中的作用智慧交通管理系统架构系统总体架构数据收集与处理Echarts与大数据可视化Echarts库以及其在大数据可视化领域的应用优势开发过程和所选设计方案模板如何满足管理的特定需求模板功能与特性深入解析模板提供的各项功能模板…

NAS外网访问方案

基础流程 路由器开启端口映射(如果有猫则要配置猫为转发模式,由路由器直接拨号即可使用第三方程序让内网ip发布到公网上(如果有云服务器)需要开启防火墙端口 好用的第三方程序 FRP穿透 优点:开源免费,速…

华为OD机试 - 九宫格按键输入 - 逻辑分析(Java 2023 B卷 200分)

目录 专栏导读一、题目描述二、输入描述三、输出描述四、解题思路五、Java算法源码六、效果展示1、输入2、输出3、说明 华为OD机试 2023B卷题库疯狂收录中,刷题点这里 专栏导读 本专栏收录于《华为OD机试(JAVA)真题(A卷B卷&#…

Windows(Microsoft)win电脑装Xcode方法

你想在你的Windows电脑上体验和使用苹果的Xcode进行应用打包。遗憾的是,Xcode官方只支持macOS操作系统,但别担心,我们有替代方案可以让你在Windows环境下进行iOS应用的开发和打包。接下来我将指导你如何实现这一目标。 图片来源:W…

Pyside2 (Qt For Python)进度条功能实现

Pyside2 (Qt For Python)进度条功能实现 进度条(QProgressBar) 今天来介绍PySide2进度条(QProgressBar)的使用,如下所示: 说明 进度条也是一个常用的控件,当程序需要做一件比较耗费时间的任…