[Python数据挖掘] DBSCAN聚类算法原理底层实现

本文深入探讨DBSCAN聚类算法,通过Python从底层实现该算法,仅依赖math库,无需numpy。作者通过预处理grade.txt数据集并展示聚类过程,结果与sklearn库的DBSCAN一致。
摘要由CSDN通过智能技术生成

注明:本文主要内容亦曾整理作为本人所选课程《模式识别与机器学习》的期末课程报告。

[问题背景]

关于DBSCAN聚类原理的动画演示,我在B站的投稿《DBSCAN聚类原理 动画演示》中已作了介绍,有兴趣的朋友可以先看一下链接中的1分半钟动画演示。

[Python数据挖掘] sklearn-DBSCAN聚类一文中,我们调用sklearn库的DBSCAN聚类方法,成功对以下ANSI编码的grade.txt文本文档数据集进行了聚类:

YZN,133,108,76
ZHY,96,145,101
WYZ,132,107,60
DHY,100,102,120
CYH,139,99,93
LHY,73,149,81
ZHY,85,148,93
TQP,39,138,85
ZZL,145,112,71
HJC,101,116,118
XZY,99,98,117

[问题分析]

下面从底层实现的角度,只需用到math库,无需使用numpy,逐步实现DBSCAN聚类算法。

针对grade.txt文本文档进行数据预处理并聚类的实例代码:

(grade.txt需要与代码的.py文件位于同一目录下)

import math

class DBSCAN:
    'DBSCAN类'
    eps = 0
    min_samples = 0
    labels_ = []
    

    def __init__(self, eps, min_samples):
        self.eps = eps
        self.min_samples = min_samples

    def distance(self, data1, data2): # 计算距离
        distance = 0
        for i in range(len(data1)):
            distance = distance + pow(data1[i]-data2[i], 2)
        distance = math.sqrt(dista
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值