(九)密度聚类、层次聚类和轮廓系数[机器学习代码实现]

article/2025/9/26 13:17:39

    机器学习课程总结,本系列文章代码注释为主。
    理论部分搬至博客上比较耗费时间,所以缺少理论部分。但是也欢迎大家一起探讨学习。
    如果需要理论部分的讲义,可私信(个人觉的讲的很好很全)。

文章目录

  • 问题需求
  • 代码一(密度聚类)
  • 代码2(层次聚类)
  • 代码3(轮廓系数)
  • 总结

问题需求

现有如下样本:

(0,0), (2,1),(2,-1), (2.1,0),(4.1,0), (5,0)

1、请使用密度聚类算法DBSCAN在半径是1.1,MinPts分别为2和3的情况下,给出聚类结果。

要求简要写出一种情况下的计算过程,另一种情况可以直接给出结果。

2、请使用层次聚类算法AGNES在k=2和3的情况下,给出聚类结果。其中,簇与簇之间的距离选择最小距离。
3、针对如下样本:(0,0), (2,1),(2,-1), (2.1,0),(4.1,0), (5,0),现有聚类模型将其聚为三类:C1={(0,0)}, C2={(2,1),(2,-1), (2.1,0)} C3={(4.1,0), (5,0)}。请计算该模型的轮廓系数silhouette coefficient。

代码一(密度聚类)

在这里插入图片描述
在这里插入图片描述

# -*- coding: utf-8 -*-#
# Author: xhc
# Date:    2021-06-20 19:56
# project:  0524
# Name:    密度聚类.pyfrom sklearn.cluster import DBSCAN
import numpy as npimport matplotlib.pyplot as plt
data=[[0,0],[2,1],[2,-1],[2.1,0],[4.1,0],[5,0]]
data=np.array(data)model = DBSCAN(eps=1.1,min_samples=2) #两个参数分别表示半径和数量
#model = sklearn.cluster.DBSCAN(eps=1.1,min_samples=3)model.fit(data)
print(model.fit_predict(data))
plt.scatter(data[:,0],data[:,1], c = model.labels_)
print("MinPts=2时,聚类结果为")
print(model.labels_)
print("噪声点有:")
for i in range(6):if model.labels_[i] == -1: #当值为-1的时候表示噪声点print(data[i])
print("\n")
plt.show()

代码2(层次聚类)

在这里插入图片描述
在这里插入图片描述

# -*- coding: utf-8 -*-#
# Author: xhc
# Date:    2021-06-20 20:54
# project:  0524
# Name:    层次聚类.py# -*- coding: utf-8 -*-
"""
Created on Mon May 24 15:12:36 2021@author: win10
"""import numpy as np
import matplotlib.pyplot as mp
import sklearn.cluster as sc# 读取数据,绘制图像
x = np.array([[0, 0], [2, 1], [2, -1], [2.1, 0], [4.1, 0], [5, 0]])
print(x.shape)# 基于Agglomerativeclustering完成聚类
# model = sc.AgglomerativeClustering(n_clusters=2,linkage='single')
model = sc.AgglomerativeClustering(n_clusters=3,linkage = 'Maximum')
pred_y = model.fit_predict(x)
print(pred_y)x1 = []
x2 = []
x3 = []
for i in range(6):if pred_y[i] == 0:x1.append(list(x[i]))if pred_y[i] == 1:x2.append(list(x[i]))if pred_y[i] == 2:x3.append(list(x[i]))print('层次聚类后的结果')
print(list(x1))
print(list(x2))
print(list(x3))
# 画图显示样本数据
mp.figure('Agglomerativeclustering', facecolor='lightgray')
mp.title('Agglomerativeclustering', fontsize=16)
mp.xlabel('X', fontsize=14)
mp.ylabel('Y', fontsize=14)
mp.tick_params(labelsize=10)
mp.scatter(x[:, 0], x[:, 1], s=80, c=pred_y, cmap='brg', label='Samples')
mp.legend()
mp.show()

代码3(轮廓系数)

在这里插入图片描述

# -*- coding: utf-8 -*-#
# Author: xhc
# Date:    2021-06-06 19:16
# project:  0527
# Name:    轮廓系数
import numpy as np
from sklearn.cluster import KMeans
from sklearn.metrics import silhouette_samples,silhouette_scoredata = np.array([[0, 0],[2, 1],[2, -1],[2.1,0],[4.1,0],[5,0]])
kmeans = KMeans(n_clusters=3,random_state=1).fit(data)
labels = kmeans.labels_
print(labels)print("轮廓系数",silhouette_samples(data,labels,metric='euclidean'))
print("平均轮廓系数",silhouette_score(data,labels,metric='euclidean'))for k in range(2,11,1):print(k)
  • 轮廓系数的代码实现简单,更多的是需要掌握手算的方式。

总结

如有错误,欢迎评论或私信指出。需要测试数据可私信。

在这里插入图片描述


http://chatgpt.dhexx.cn/article/DOrtWDFi.shtml

相关文章

Oracle 数据库中的 索引、约束、视图

约束:就是指对插入数据的各种限制,约束既可在建表的时候直接声明,也可以为已经建好的表添加约束。 视图:就是一个封装了各种复杂查询的语句,就称之为视图。 索引:是一种用于提升查询效率的数据库对象。通过…

数据库原理与应用(SQL)——2、关系数据库(E-R图、关系模式、关系运算、关系代数)

目录 关系 关系运算 元组、域关系演算表达式 题目 关系代数表达式——例 元组演算表达式——例 域演算表达式——例 关系数据库是以二维表形式组织数据,应用数学方法处理数据库组织的方法。目前关系数据库系统在数据管理中已占据了主导地位。 关系 关系&…

Oracle约束 SQL语句分类 集合运算 索引 相关知识点讲解

ORACLE 约束: 数据库用来确保数据满足业务的手段,强制数据符合某些特定条件或者规范才可以插入 主键约束: primary key PK唯一约束:unique非空约束:not null外键约束:foreign key FK检查约束:…

SQL对数据进行统计、常用集合函数

学生表: 1、统计记录个数 1) count(【all】*)【as 列别名】 返回表中的记录数 执行:SELECT COUNT (* ) FROM 学生表 结果为: 执行:SELECT COUNT (* ) as 学生总人数 FROM 学生表…

关系数据库SQL数据查询

关系数据库SQL数据查询 数据查询 一、单表查询 1.查询仅涉及一个表,选择表中的若干列 [例1] 查询全体学生的学号与姓名。SELECT Sno,SnameFROM Student; [例2] 查询全体学生的姓名、学号、所在系。SELECT Sname,Sno,SdeptFROM Student;查询全部列 选出所有属…

样本轮廓系数(原理、sklearn.metrics.silhouette_score、silhouette_samples参数介绍)

一、轮廓系数含义: 轮廓系数(Silhouette Coefficient),是聚类效果好坏的一种评价方式。 最佳值为1,最差值为-1。接近0的值表示重叠的群集。负值通常表示样本已分配给错误的聚类,因为不同的聚类更为相…

java上位机开发(开篇)

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing 163.com】 目前对于java语言,很多人都认为太简单。其实这是不对的,因为某种意义上来说所,java语言就像学习日语一样&#…

Qt之上位机开发实战(一)

一、Qt三大金刚 1、qt下的串口编程 2、qt下的网络编程 3、qt下的GPIO 本章节先介绍一下qt下的串口编程,首先我们新建一个Widget项目 其中接受框使用Plain Text Edit(设置只读),串口号等按钮使用Combo Box,发送框使…

C# | 上位机开发新手指南(二)上位机通信

上位机开发新手指南(二)上位机通信 文章目录 上位机开发新手指南(二)上位机通信前言串口通信应用场景与控制器通信与传感器通信与仪器仪表通信与智能家居设备通信 常见协议ModbusCAN(Controller Area Network&#xff…

C# 西门子PLC上位机开发环境搭建

一、安装软件 1. TIA_Portal_STEP7 15 博途,西门子的自动化开发软件 2. SIMATIC_S7PLCSIM_V15_1 西门子的仿真软件 3. NetToPLCsim C#程序是不能和仿真通信的,只有利用此软件,C#程序才能连接到仿真 二、配置软件 1. 博途 点击 创建新…

java上位机开发(网络编程)

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing 163.com】 所谓的网络编程,一般就是指UDP、TCP编程。传统的方法就是用api或者sdk直接编程,这种方法对于简单的协议是可以的。但是对于…

上位机开发(详细设计)

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】 所谓软件详细设计,它的上面对应的是架构设计,下面对应的是程序开发。架构设计有可能涉及多个软件,比如既可能涉及上位机这端,也可能涉及到mcu这端。详细设计的话,一般要落实到…

android ble 上位机,BLE的Android上位机开发(下)

原标题:BLE的Android上位机开发(下) ELLO! 大家好!马上就更新下篇了呢~哈哈!(上篇的地址:BLE的Android上位机开发(上))废话不多说了,先上主角吧!代码如下! [Java] 纯文本查看复制代码 ? 01 02 …

java上位机开发(java基础)

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing 163.com】 java基础就是把java环境安装好,把基础程序构建起来。至少说让开发的同学来说有一点信心。从这一点来说,就算编写一个“Hell…

上位机开发的意义

上位机开发的意义 常见的上位机定义为一台可以发出特定操控命令的计算机, 通过操作预先设定好的命令,将命令传递给下位机,通过下位机来控制设备完成各项操作。此定义着重于强调控制指令的发送,实际上除了发送控制命令&#xff0c…

Qt之上位机开发实战(三)

UDP编程 udp相对于tcp来说相对简单&#xff0c;udp不分客户端和服务器&#xff0c;只需要使用一个QUdpSocket类&#xff0c;首先完成布局 Pro文件下加QT core gui network&#xff0c;.h文件下加#include <QUdpSocket> .h文件public下创建对象 QUdpSocket *udpSocket;…

C# | 上位机开发新手指南(三)框架

上位机开发新手指南&#xff08;三&#xff09;框架 文章目录 上位机开发新手指南&#xff08;三&#xff09;框架.NETWinFormsWPFUnity3D CQTMFC 其他语言LabVIEW .NET WinForms 在上位机开发中&#xff0c;Windows Forms是使用最广泛的C#框架之一。Windows Forms是.NET Fra…

哈喽上位机(上位机开发指南)

哈喽&#xff0c;上位机&#xff01; -------上位机开发指南 作者&#xff1a;Robert Zhang本博客以一个程序猿的角度解答了: - 有关上位机开发的疑惑 - 上机软件开发需要学习哪些知识 - 开发一个完整商业软件所需的技术与实现方法 - 怎样美化软件&#xff0c;那些漂亮的软件…

C#上位机开发常遇问题

C#上位机开发常遇问题 C#引用C动态库/静态库静态库动态库 unsafe和fixed关键字的应用unsafefixed Path类的使用写在结尾 最近完成了一个小项目的开发&#xff0c;在开发中遇到了一些问题&#xff0c;我感觉这些问题其他人在开发的时候也会遇到&#xff0c;所以我在这边总结一下…

C# 三菱PLC上位机开发环境搭建

一、安装软件 用到两个三菱的软件&#xff1a; 1. MX Component&#xff08;下载地址 也可以直接在官网上搜索&#xff0c;注意MX后面有空格&#xff09; 用于连接PLC 2. GX Works2&#xff08;下载地址 用GX Works3也行&#xff09; 这个软件主要是电气做PLC编程&#xf…