首页 > 其他分享 >DBSCAN具有噪声的基于密度的聚类方法

DBSCAN具有噪声的基于密度的聚类方法

时间:2022-10-12 09:58:23浏览次数:39  
标签:DBSCAN df 噪声 len 聚类 np import

 

  1. 简介
    1. 聚类:将原始数据分类 ( 数据集 -> 聚类算法 -> 数据分组 )
    2. 目的:希望将数据根据特征的密度找相似性,分为指定或者若干数据组
  2. 使用场景:
    1. 简单的如将同颜色的球分类,或将一个班的成绩分类为文科科目好的学生和理科科目好的学生
    2. 复杂的,图像特征识别等
  3. 概念解释:
    1. 主要有两个参数进行调节dist,minpoints。dist指点与点之间的距离,表示你想把密度多大的点聚合在一起。minpoints指符合上述密度的点至少有多少个。
    2.  

       密度可达:除N点外都可达,密度直通:ABC

  4. 代码实现和解释:
    1. 算法代码
      #-*- coding:utf-8 -*-
      import math
      import numpy as np
      import pylab as pl
       #数据集:每三个是一组分别是西瓜的编号,密度,含糖量
      data = """
      1,0.697,0.46,2,0.774,0.376,3,0.634,0.264,4,0.608,0.318,5,0.556,0.215,
      6,0.403,0.237,7,0.481,0.149,8,0.437,0.211,9,0.666,0.091,10,0.243,0.267,
      11,0.245,0.057,12,0.343,0.099,13,0.639,0.161,14,0.657,0.198,15,0.36,0.37,
      16,0.593,0.042,17,0.719,0.103,18,0.359,0.188,19,0.339,0.241,20,0.282,0.257,
      21,0.748,0.232,22,0.714,0.346,23,0.483,0.312,24,0.478,0.437,25,0.525,0.369,
      26,0.751,0.489,27,0.532,0.472,28,0.473,0.376,29,0.725,0.445,30,0.446,0.459"""
      #数据处理 dataset是30个样本(密度,含糖量)的列表
      a = data.split(',')
      dataset = [(float(a[i]), float(a[i+1])) for i in range(1, len(a)-1, 3)]
      #计算欧几里得距离,a,b分别为两个元组
      def dist(a, b):
        return math.sqrt(math.pow(a[0]-b[0], 2)+math.pow(a[1]-b[1], 2))
      #算法模型
      def DBSCAN(D, e, Minpts):
        #初始化核心对象集合T,聚类个数k,聚类集合C, 未访问集合P,
        T = set(); k = 0; C = []; P = set(D)
        for d in D:
          if len([ i for i in D if dist(d, i) <= e]) >= Minpts:
            T.add(d)
        #开始聚类
        while len(T):
          P_old = P
          o = list(T)[np.random.randint(0, len(T))]
          P = P - set(o)
          Q = []; Q.append(o)
          while len(Q):
            q = Q[0]
            Nq = [i for i in D if dist(q, i) <= e]
            if len(Nq) >= Minpts:
              S = P & set(Nq)
              Q += (list(S))
              P = P - S
            Q.remove(q)
          k += 1
          Ck = list(P_old - P)
          T = T - set(Ck)
          C.append(Ck)
        return C
      #画图
      def draw(C):
        colValue = ['r', 'y', 'g', 'b', 'c', 'k', 'm']
        for i in range(len(C)):
          coo_X = []  #x坐标列表
          coo_Y = []  #y坐标列表
          for j in range(len(C[i])):
            coo_X.append(C[i][j][0])
            coo_Y.append(C[i][j][1])
          pl.scatter(coo_X, coo_Y, marker='x', color=colValue[i%len(colValue)], label=i)
        pl.legend(loc='upper right')
        pl.show()
      C = DBSCAN(dataset, 0.11, 5)
      draw(C)
      

        

       

       

       

    2. 调用函数代码
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from sklearn import datasets
%matplotlib inline

#生成数据
X=np.empty((100,2))
X[:,0]=np.random.uniform(0.,100.,size=100)
X[:,1]=0.75*X[:,0]+3+np.random.normal(0,10,size=100)
plt.scatter(X[:,0],X[:,1])
plt.show()
df=pd.DataFrame(X,columns=['feature1','feature2'])
df.plot.scatter('feature1','feature2')
print(df)

#调用DBSCAN接口完成聚类
from sklearn.cluster import dbscan
# eps为邻域半径,min_samples为最少点数目
core_samples,cluster_ids = dbscan(X, eps = 10, min_samples=3) 
df = pd.DataFrame(np.c_[X,cluster_ids],columns = ['feature1','feature2','cluster_id'])
df.plot.scatter('feature1','feature2', s = 100,
    c = list(df['cluster_id']),cmap = 'rainbow',colorbar = False,
    alpha = 0.6,title = 'DBSCAN cluster result')

 

 

 

 

 

标签:DBSCAN,df,噪声,len,聚类,np,import
From: https://www.cnblogs.com/bky-wang/p/16783037.html

相关文章

  • 蚁群聚类算法
    1.问题描述:2.部分程序:clc;clf;clear;%X=测试样本矩阵;X1=load('data.txt');X=X1(:,1:2);[N,n]=size(X);%N=测试样本数;n=测试样本的属性数;K=4;......
  • 模糊聚类的matlab仿真
    1.问题描述: 模糊聚类分析是一种采用​​模糊数学​​​语言对事物按一定的要求进行描述和分类的数学方法。 [1]  模糊聚类分析一般是指根据研究对象本身的属性来构造​......
  • Noise2Noise去高斯噪声、去文本噪声
    基础信息​​非常好的一篇论文讲解​​​​官方实现​​​​非官方实现​​我这里跑的代码是​​非官方实现​​环境搭建(Cuda9.1):cuda9.1GTX108011Gsourceactivaten......
  • 语音和噪声相关数据集(持续更新)
    博客地址:https://www.cnblogs.com/LXP-Never/p/15474948.html(转载请注明出处)博客作者:凌逆战语音数据集TIMIT官方提供的下载地址:https://catalog.ldc.upenn.edu/LDC93S......
  • Kmeans聚类算法详解
    摘要:本文详细介绍Kmeans聚类算法的原理和程序实现。首先介绍利用该算法的原理及理解,详细介绍基于MATLAB设计一个自定义的Kmeans函数过程,然后利用该函数对UCI的数据集进行聚......
  • 详解线性回归-最小二乘法及其几何意义&最小二乘法-概率视角-高斯噪声-MLE【白板推导系
    $$\begin{gathered}D=\left{(x_{1},y_{1}),(x_{2},y_{2}),\cdots,(x_{N},y_{N})\right}\x_{i}\in\mathbb{R}^{p},y_{i}\in\mathbb{R},i=1,2,\cdots,N\X=\begin{pmat......
  • 聚类算法中聚类数量的确定方法
    聚类算法中聚类数量的确定方法聚类算法是对实体进行分组归类的有效方法,也是有利于降低人力工作量的有效手段,例如先用AI聚类方法对实体数据进行聚类分组,再由人工介入指认,能......
  • 一种能有效缓解环境噪声对音频质量干扰的方案
    点击蓝字关注我们背景随着数字技术的发展,我们的生活越来越离不开音频,对音频使用和呈现方式也越来越多样化,人们也从去单纯的听录制好的音频转向录制属于自己的音频,例如录歌、......
  • 机器学习——聚类(K-Means)
    机器学习——聚类(K-Means)那是什么无监督学习——聚类聚类是基于相似对象将一组对象分组为类/类别的过程。聚类是一部分无监督学习.这种方法通常用于确定业务决策,特......
  • 基于密度的聚类如何工作(数据挖掘)
    基于密度的聚类如何工作(数据挖掘)PhotobyGanapathyKumaron不飞溅SSDBCODI:集成了异常值检测的半监督密度聚类(arXiv)作者:JiahaoDeng,伊莱·T·布朗抽象......