机器学习 | 聚类问题

news2024/12/28 18:41:11

一、K均值聚类

这里我们用鸢尾花数据及进行聚类分析,这种含有标签数据的数据集,只要不调用标签数据,就可以为无监督学习所采用。鸢尾花数据具有4个特征,为了可视化这里选取前两个特征进行聚类分析并指定聚为3类。

#导入库
import numpy as np
import matplotlib.pyplot as plt
%matplotlib inline
#### 默认设置下matplotlib图片清晰度不够,可以将图设置成矢量格式
%config InlineBackend.figure_format='svg'
from sklearn.cluster import KMeans
from sklearn.datasets import load_iris

#记载数据
data=load_iris()
x=data.data
X=x[:,:2]

#构建模型及预测
model=KMeans(n_clusters=3)  #调用KMeans模型并指定聚为3类
model.fit(X)  #对数据进行学习
y_pred=model.predict(X)  #预测结果
print(y_pred)  #输出标签的预测结果

#画图
fig,ax=plt.subplots(1,2)
plt.subplot(1,2,1)
plt.scatter(X[:,0],X[:,1])  #将构建的数据点画出
plt.xlabel("Sepal Length")  #x轴标签
plt.ylabel("Sepal Width")  #y轴标签

plt.subplot(1,2,2)  #画子图2
plt.scatter(X[:,0],X[:,1],c=y_pred)  #经过聚类后的散点图
plt.scatter(model.cluster_centers_[:,0],model.cluster_centers_[:,1],
           marker='*',c='r',linewidth=7)  #画出中心点
plt.xlabel("Sepal Length")
plt.ylabel("Sepal Width")
#调整子图的间距
plt.subplots_adjust(left=None,bottom=None,right=None,
                  top=None,wspace=0.5,hspace=None)
plt.show()

 尽管都属于超参数,需要人为设置,但K均值聚类中的K与k近邻算法中的k明显不同。

在k近邻算法中,由于是分类问题,这种监督学习的类别数是早已知晓的,其k的含义是选择k个样本点参与“投票”,而K均值聚类中的K则是将数据聚为k类,此时的K决定了结果中的类别数量。

选择聚类问题中的K值,最佳的取值可以利用手肘法进行评估,它是一种用于确定数据集中聚类数量的启发式算法。

import numpy as np
import pandas as pd
from sklearn.cluster import KMeans
import matplotlib.pyplot as plt
#### 默认设置下matplotlib图片清晰度不够,可以将图设置成矢量格式
%config InlineBackend.figure_format='svg'
%matplotlib inline

rd=pd.read_csv('regional data.csv')
X=rd.iloc[:,1]

K=[]  #空列表
Score=[]  #空列表
for k in range(1,11):
    kmeans=KMeans(n_clusters=k)
    kmeans.fit(X)
    score=kmeans.interia_  #整体平方和
    K.append(k)  #空列表追加赋值
    Score.append(score)  #空列表追加赋值
plt.plot(K,Score,marker='o')  #画图
plt.xlabel('K')  #x轴标签
plt.ylabel('SSE')  #y轴标签
plt.show()

图中横轴为K的取值,因为数据集有10个特征,因此取值从1至10。纵轴是 误差平方和,它是所有样本的聚类误差,是衡量聚类效果优劣的一个指标。图中折线下降最快的K值称为手肘部,当K从4开始折线趋于平缓,我们认为进行K均值聚类时,K应该设置为4。

二、系统聚类

系统聚类是聚类分析中最常用的方法之一。它的基本思路是:先将每个样本视为一类,然后计算类与类之间的距离并按照一定的准则将两类合并为新类,依此类推,直到一步步将所有的样本归为一类后聚类终止。

首先输入6个样本点并给出散点图。

import numpy as np
from matplotlib import pyplot as plt
#### 默认设置下matplotlib图片清晰度不够,可以将图设置成矢量格式
%config InlineBackend.figure_format='svg'
from scipy.cluster.hierarchy import dendrogram,linkage
data=np.array([[1.4,0.2],[1.4,0.1],[4.7,1.4],[4.5,1.5],[5.9,2.1],[5.6,1.8]])
plt.scatter(data[:,0],data[:,1])
plt.ylim([0,5])  #设置纵轴数值范围
plt.xlim([0,10])  #设置横轴数值范围
plt.show()

下面的代码中,我们利用参数single(最短距离法)进行距离的计算,根据时间情况的需要,我们还可以选择average(类平均法)、complete(最长距离法)、ward(瓦尔德法)等方法进行系统聚类。

Dist_data=linkage(data,"single")  #用single法计算距离
print(Dist_data)

聚焦第一行:前两个值代表“类”,Python从0开始计数,最初每个数据点各为一类,所以0和1这两个数据点表示为两类,第三个数字0.1就是0和1两个点的距离,这两个点被合并为一个类,第四个数字2表示该类中含有两个子类。

聚类完成后,还可以画出系统聚类树状图进行观察,代码如下:

dendrogram(Dist_data)  #画图
plt.title("Hierachial Clustering Dendrogram")
plt.xlabel("Cluster label")
plt.ylabel("Distance")
plt.axhline(y=2)  #给出指定的分类线
plt.show()

上图中,横轴表示类别标签,纵轴表示并类距离,是之前求得的类间距距离。从上图中很容易看到各成一类的数据是如何一步步汇聚成一个大类的。

综上,系统聚类的全部代码如下:

import numpy as np
from matplotlib import pyplot as plt
#### 默认设置下matplotlib图片清晰度不够,可以将图设置成矢量格式
%config InlineBackend.figure_format='svg'
from scipy.cluster.hierarchy import dendrogram,linkage
data=np.array([[1.4,0.2],[1.4,0.1],[4.7,1.4],[4.5,1.5],[5.9,2.1],[5.6,1.8]])
plt.scatter(data[:,0],data[:,1])
plt.ylim([0,5])  #设置纵轴数值范围
plt.xlim([0,10])  #设置横轴数值范围
plt.show()

#进行系统聚类
Dist_data=linkage(data,"single")  #用single法计算距离
print(Dist_data)

#画出系统聚类树状图
dendrogram(Dist_data)  #画图
plt.title("Hierachial Clustering Dendrogram")
plt.xlabel("Cluster label")
plt.ylabel("Distance")
plt.axhline(y=2)  #给出指定的分类线
plt.show()

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

大型 3D 互动开发和优化实践 | 京东云技术团队

开发背景 得益于“元宇宙”概念在前段时间的爆火,各家公司都推出了使用 3D 场景的活动或频道。 3D 场景相比传统的 2D 页面优点是多一个维度,同屏展示的内容可以更多,能完整的展示物体、商品的信息。 相应带来的缺点是用户使用方式改变&…

yolov8模型训练结果分析以及如何评估yolov8模型训练的效果

1.运行结果目录 一、 confusion_matrix_normalized.png和confusion_matrix.png 混淆矩阵 混淆矩阵以矩阵形式将数据集中的记录按照真实的类别与分类模型预测的类别判断两个标准进行汇总。其中矩阵的行表示真实值,矩阵的列表示预测值。 TP(True Positiv…

python 创建Django项目基础

一. 安装Django pip install django 默认安装最新版本二. 创建一个Django项目 三、运行项目 创建好Django项目后,我们就可以运行了 使用命令 python manage.py runserver四、目录结构 五、创建一个文件views用来存放方法 在创建的文件中写入以下方法 def sa…

使用GCN根据颗粒图像预测对应性能

之前做一个小实验写的代码,本想创建个git repo,想了想好像没必要,直接用篇博文记录一下吧。 对应资源 : https://download.csdn.net/download/rayso9898/87865298 0. 大纲 0.1 代码说明 dataGeneration.py -> RSA生成n张图像&…

【Springboot】| 阿里云发送短信验证码,你会了吗?

目录 🦁 题外话🦁 需要准备的东西🦁 进入主题1. 添加依赖2. 配置yaml文件3. 创建阿里云客户端4. 编写发送短信方法5. 完整代码展示6. 测试 🦁 场景实操1. 编写生成验证码工具类2. 保存到redis操作3. 编写发送验证码短信4. 发送登录…

大数据:spark共享广播变量,累加器

大数据:共享变量 2022找工作是学历、能力和运气的超强结合体,遇到寒冬,大厂不招人,可能很多算法学生都得去找开发,测开 测开的话,你就得学数据库,sql,oracle,尤其sql要学…

三面阿里被挂,竟获内推名额,历经 5 面拿下口碑 offer...

每一个互联网人心中都有一个大厂梦,百度、阿里巴巴、腾讯是很多互联网人梦寐以求的地方,而我也不例外。但是,BAT 等一线互联网大厂并不是想进就能够进的,它对人才的技术能力和学历都是有一定要求的,所以除了学历以外&a…

STM32单片机WIFI物联网厨房燃气安全系统超声波人员检测MQ4燃气报警

实践制作DIY- GC0140-WIFI物联网厨房燃气安全系统 基于STM32单片机设计---WIFI物联网厨房燃气安全系统 二、功能介绍: 硬件组成:STM32F103C系列最小系统继电器模拟阀门MQ-4然气传感器HSR04超声波测距LCD1602显示器ESP8266-WIFI模块蜂鸣器多个按键 1.有…

MySQL命令行速查手册(持续更新ing...)

诸神缄默不语-个人CSDN博文目录 最近更新时间:2023.6.5 最早更新时间:2023.6.5 每个命令都以;作为结尾(以下localhost都可以替换成实际IP地址)(和’的区别应该不大)用户管理 修改密码:ALTER U…

如何使用Facebook Business Suite来管理你的FB和Ins商业账户

Facebook Business Suite是Facebook推出的一种强大的数字营销工具,可帮助企业轻松管理其在Facebook和Instagram上的商业账户。该工具集成了多种功能,提供了一种简单、直观的方式来管理你的社交媒体营销活动。 在本文中,我们将详细介绍如何优化…

深眸科技基于技术与人才优势,创新研发机器视觉系统赋能工业生产

随着人工智能技术加速进入生产生活,机器视觉系统作为工业发展的刚需,凭借着能够为机器提供视觉,并在众多场景实现柔性化生产应用的能力,逐步被接受和普及,并在工业生产领域发挥巨大作用。 深眸科技作为国家高新技术企…

物流货运车货匹配平台源码

网络货运平台具有较强的信息数据交互和处理能力,能够对托运人,平台运营人,实际承运人,驾驶员的相关方的交易,运输,结算等全过程进行透明,动态的管理,该平台由托运人、实际承运人、司…

ControlNet: Adding Conditional Control to Text-to-Image Diffusion Models

Adding Conditional Control to Text-to-Image Diffusion Models (Paper reading) Lvmin Zhang and Maneesh Agrawala, Stanford University, arXiv, Cited:113, Code, Paper 1. 前言 我们提出了一种名为ControlNet的神经网络结构,用于控制预训练的大规模扩散模型…

element中table的列标题自定义

一、需求 工作中要求表格table中的某一列标题为红色如图 二、方案一 使用el-table-column自带的:render-header"renderHeader"函数 render-header列标题 Label 区域渲染使用的 FunctionFunction(h, { column, $index })—— 使用有点像v-html插入代码片段&#xf…

PubChem介绍及API及PubChempy

PubChem 【官网 https://pubchem.ncbi.nlm.nih.gov/】 简介 PubChem is the world’s largest collection of freely accessible chemical information. Search chemicals by name, molecular formula, structure, and other identifiers. Find chemical and physical proper…

casbin基于RBAC的权限管理案例

在RBAC模型中新定义了角色和继承关系,用户可以通过角色区分不同的权限,继承不同的角色时用户有多个权限。 [role_definition] g _, _ g2 _, _g 是一个 RBAC系统, g2 是另一个 RBAC 系统。 _, _表示角色继承关系的前项和后项,即前项继承后项…

局部探索测试的要素

局部探索测试的要素 局部探索测试是软件测试过程中的一种方法,旨在发现一个系统、软件或应用程序的局部缺陷和问题。局部探索测试不是全面测试,而是通过对特定功能、模块或环节进行测试来检查其中潜在的缺陷,从而提高软件的质量和可靠性。 局…

【白话机器学习系列】白话Broadcasting

白话 Broadcasting 文章目录 什么是 BroadcastingBroadcasting 的规则逐元素操作向量与标量运算矩阵与向量运算行向量列向量 张量与向量运算张量与矩阵运算 矩阵与张量的点积总结 什么是 Broadcasting 在 《白话张量》 中我们讲过,张量之间进行运算需要满足一定的…

Hadoop之MapReduce概述

MapReduce概述 MapReduce定义MapReduce优缺点MapReduce核心思想MapReduce进程MapReduce编程规范MapTask并行度决定机制ReduceTask并行度决定机制mapreduce中job的提交流程MapReduce工作流程shuffle机制分区partition数据清洗(ETL)进一步分析MapTask和Red…

Jenkins+RF持续集成测试(二) 定时更新SVN完成构建

在上一篇中讲了Jenkins的安装,这篇将介绍 定时从SVN库中(git库与之类似,这里就不具体介绍了,有需要自己折腾)拉取最新的测试脚本,完成jenkins的定时构建。这是我们做自动化测试最基本的环节,每天…