数据挖掘题目:设ε= 2倍的格网间距,MinPts = 6, 采用基于1-范数距离的DBSCAN算法对下图中的实心格网点进行聚类,并给出聚类结果(代码解答)

news/2024/5/20 6:23:11 标签: 数据挖掘, 算法, 聚类, sklearn, 机器学习

问题

在这里插入图片描述

代码

import matplotlib.pyplot as plt
import numpy as np
from sklearn.cluster import DBSCAN
#pip install matplotlib
#pip install numpy
#pip install scikit-learn
# 实心格网点的坐标
solid_points = np.array([[1, 1], [2, 1],[3, 1], [1, 2], [2, 2], [3, 2],[1, 3],[3, 3], [1, 4],[3, 4], [1, 5], [2, 5], [3, 9], [6, 4],[7, 6], [7, 7], [7, 8], [7, 9], [8, 6], [9, 7], [9, 8], [9, 9] ,[10, 6],[11, 6],[11, 7],[11, 8],[11, 9]])


# 执行DBSCAN聚类
'''
对于1范数(曼哈顿距离),将metric参数的值设置为'manhattan':
dbscan = DBSCAN(eps=2, min_samples=6, metric='manhattan')
对于2范数(欧几里德距离),将metric参数的值设置为'euclidean':
dbscan = DBSCAN(eps=2, min_samples=6, metric='euclidean')
对于无穷范数,将metric参数的值设置为'chebyshev':
dbscan = DBSCAN(eps=2, min_samples=6, metric='chebyshev')
'''
dbscan = DBSCAN(eps=2, min_samples=6, metric='manhattan')
labels = dbscan.fit_predict(solid_points)


# 获取核心点的索引
core_samples_mask = np.zeros_like(labels, dtype=bool)
core_samples_mask[dbscan.core_sample_indices_] = True
core_indices = np.where(core_samples_mask)[0]

# 获取边缘点的索引
border_indices = np.setdiff1d(np.where(labels != -1)[0], core_indices)

# 获取孤立点的索引
outlier_indices = np.where(labels == -1)[0]


# 映射字典
mapping  = {
    1: 'A',
    2: 'B',
    3: 'C',
    4: 'D',
    5: 'E',
    6: 'F',
    7: 'G',
    8: 'H',
    9: 'I',
    10: 'J',
    11: 'K'
}

# 构建簇与点的映射关系
clusters = {}
for i, label in enumerate(labels):
    clusters.setdefault(label, {'core': [], 'border': []})
    if label != -1:
        if i in core_indices:
            clusters[label]['core'].append(solid_points[i])
        else:
            clusters[label]['border'].append(solid_points[i])

# 打印各个簇的核心点和边界点
for label, cluster in clusters.items():
    core_points = [f"{mapping[point[0]]}{point[1]}" for point in cluster['core']]
    border_points = [f"{mapping[point[0]]}{point[1]}" for point in cluster['border']]
    if label!=-1:
        print(f"簇 {label+1} 的核心点为:" + ", ".join(core_points))
        print(f"簇 {label+1} 的边界点为:" + ", ".join(border_points))
        print()

# 打印孤立点
outliers = [f"{mapping[point[0]]}{point[1]}" for point in solid_points[outlier_indices]]
print("孤立点为:" + ", ".join(outliers))
print()

# 绘制实心格网点和空心格网点的聚类结果
# 先获取当前的坐标轴
ax = plt.gca()
# 将y轴方向进行翻转
ax.invert_yaxis()
# 绘制散点图
plt.scatter(solid_points[:, 0], solid_points[:, 1], c=labels)
plt.xlabel('X')
plt.ylabel('Y')
plt.title('DBSCAN Clustering')
plt.show()

结果

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


http://www.niftyadmin.cn/n/5148107.html

相关文章

d3dcompiler_47.dll是什么?d3dcompiler_47.dll缺失修复教程

d3dcompiler_47.dll丢失是一个比较常见的问题,尤其是在玩一些大型游戏或者使用一些图形处理软件时。这个问题可能会让你感到非常困扰,因为它可能会导致你的程序无法正常运行。但是,别担心,我在这里为你提供了四种解决方案&#xf…

【kafka】记一次kafka基于linux的原生命令的使用

环境是linux,4台机器,版本3.6,kafka安装在node 1 2 3 上,zookeeper安装在node2 3 4上。 安装好kafka,进入bin目录,可以看到有很多sh文件,是我们执行命令的基础。 启动kafka,下面的…

Vue3.0 VCA语法糖 <script setup> :VCA模式

简介&#xff1a; <script setup> 是在单文件组件(SFC)中使用组合式 API 的编译时语法糖。相比于普通的<script>语法&#xff0c;它具有更多优势&#xff1a; 更少的样板内容&#xff0c;更简洁的代码。 能够使用纯Typescript声明 props 和抛出事件。 更好的运行…

第6章_多表查询

文章目录 多表查询概述1 一个案例引发的多表连接1.1 案例说明1.2 笛卡尔积理解演示代码 2 多表查询分类讲解2.1 等值连接 & 非等值连接2.1.1 等值连接2.1.2 非等值连接 自连接 & 非自连接内连接与外连接演示代码 3 SQL99语法实现多表查询3.1 基本语法3.2 内连接&#x…

OceanMind海睿思加入江苏省勘察设计行业协会,数字化能力受勘察设计行业认可

近日&#xff0c;中新赛克海睿思 通过江苏省勘察设计行业协会八届五次常务理事会议审议批准&#xff0c;正式成为江苏省勘察设计行业协会会员单位。 江苏省勘察设计行业协会 江苏省勘察设计行业协会成立于1986年4月&#xff0c;是我国勘察设计行业成立协会较早的省份之一&…

【面经】服务熔断和服务降级的区别

什么是服务熔断 服务熔断是指当下游服务因访问压力过大而响应变慢或失败时&#xff0c; 上游服务为了保护系统整体的可用性&#xff0c;可以暂时切断对下游服务的调用。 这种牺牲局部、保全整体的措施就叫做服务熔断。 在程序中&#xff0c;服务熔断可以避免因某个服务的故障导…

云产品OSS免费试用获取奖励步骤

文章目录 1、获取活动链接2、报名参加3、试用产品领取产品试用权限上传文件开启加速传输提交作品 4、提交任务获取奖励 1、获取活动链接 活动时间2023.11.1&#xff5e;2023.11.30 名额有限&#xff0c;先到先得 进群群主获取活动链接 2、报名参加 直接点击链接进入小程序进…

Python数据分析:在职场中的竞争优势

前言 在职场中&#xff0c;技能的重要性是不言而喻的。越来越多的职位要求员工具备数据分析能力&#xff0c;而Python作为一种强大的数据分析工具&#xff0c;正在成为职场中的“利器”。然而&#xff0c;尽管Python数据分析提供了巨大的优势&#xff0c;许多人依然未能掌握这…