python-DBSCAN密度聚类

1.DBSCAN 算法是一种基于密度的聚类算法:

  • 聚类的时候不需要预先指定簇的个数。
  • 最终的簇的个数不定。

2.DBSCAN 算法将数据点分为三类:

  • 核心点:在半径Eps内含有超过MinPts数目的点
  • 边界点:在半径Eps内点的数量小于MinPts,但是落在核心点在邻域内
  • 噪音点:既不是核心点也不是边界的点

                    

3.算法流程

  • 将所有点标记为核心点,边界点或噪声点;
  • 删除噪声点;
  • 为距离在Eps内的所有点之间赋予一条边;
  • 每组连通的核心点点形成一个簇;
  • 将每个边界点指派到一个与之关联的核心点簇中;

学生在线上网时间分析时间:

'''DBSCAN主要参数:eps:两个样本被看做邻居节点的最大距离min_samles:簇的样本数metric:距离计算方式
'''
import numpy as np
from sklearn.cluster import DBSCAN
import sklearn.cluster as skc
from sklearn import metrics
import matplotlib.pyplot as pltmac2id=dict()
onlinetimes=[]
f=open("E:\\python\online.txt")
for line in f:#读取每条数据中mac地址,开始上网时间,上网时长print(line)#每行信息mac=line.split(',')[2]print(mac)onlinetime=int(line.split(",")[6])print("在线时间:",onlinetime)starttime=int(line.split(',')[4].split(' ')[1].split(':')[0])print("上线时间:",starttime)#mac2id是一个字典,key是mac地址,value是对应mac地址的上网时长以及开始上网时间if mac not in mac2id:mac2id[mac]=len(onlinetimes)onlinetimes.append((starttime,onlinetime))else:onlinetimes[mac2id[mac]]=[(starttime,onlinetime)]
real_x=np.array(onlinetimes).reshape((-1,2))#调用DBSCAN方法进行训练,labels为每个簇的标签
x=real_x[:,0:1]
db=skc.DBSCAN(eps=0.01,min_samples=20).fit(x)
labels=db.labels_#打印数据被标记的标签,计算标签为-1,即噪声数据的比例
print("Labels:")
print(labels)
raito=len(labels[labels[:]==-1])/len(labels)
print("Noise raito:",format(raito,".2%"))#计算簇的个数并打印,评价聚类效果
n_cluster_ = len(set(labels))-(1 if -1 in labels else 0)
print("Estimated number of cluster: %d"%n_cluster_)
print("Silhouette Coefficient : %0.3f"%metrics.silhouette_score(x,labels))#输出各簇标号以及各簇内数据
for i in range(n_cluster_):print("cluster ",i,":")print(list(x[labels==i].flatten()))#直方图计算显示
plt.hist(x,24)
plt.show()x=np.log(1+real_x[:,1:])
db=skc.DBSCAN(eps=0.14,min_samples=10).fit(x)
labels=db.labels_print("Labels:")
print(labels)
raito=len(labels[labels[:]==-1])/len(labels)
print("Noise raito:",format(raito,".2%"))n_cluster_=len(set(labels))-(1 if -1 in labels else 0)print("Estimated number of cluster: %d"%n_cluster_)
print("Silhouette Coefficient : %0.3f"%metrics.silhouette_score(x,labels))# 统计每个簇内的样本个数,均值,标准差
for i in range(n_cluster_):print("cluster",i,':')count=len(x[labels==i])mean=np.mean(real_x[labels==i][:,1])std=np.std(real_x[labels==i][:,1])print("\t number of sample:",count)print("\t mean of sample:",format(mean,'.1f'))print("\t mean of sample:",format(std,'.1f'))plt.hist(x,24)
plt.show()

数据文件分割出的一天记录: 

可视化结果:

下面为处理过的结果:

 

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

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

相关文章

院士报告 | 李德仁:基于数字孪生的智慧城市(PPT)

来源:转自智慧城市大讲堂,微信编辑:邱峰、罗兵,张钦煜微信审核:张祥、吴斌、数字理政研究院、中通协大数据分会本文为首届川渝住房城乡建设博览会——川渝数智城市BIM/CIM高峰论坛上,中国科学院院士、中国工…

Hanlp的安装和配置

Hanlp简介 HanLP 是由一系列模型与算法组成的 Java 工具包,目标是普及自然语言处理在生产环境中的应用。 HanLP 具备功能完善、性能高效、架构清晰、语料时新、可自定义的特点。 HanLP 提供下列功能: 中文分词最短路分词N-最短路分词CRF分词索引分词极…

python-主成分分析-降维-PCA

PCA算法及其应用 主成分分析(PCA) 主城成分分析(PCA):常见的降维方法,用于高维数据集的探索与可视化,还可以用作数据压缩和预处理。 PCA 可以把具有相关性的高维变量合成为线性无关的低维变量,成为主成分&…

5个基本概念,从统计学到机器学习

来源:CSDN作者:George Seif本文讲述了数据分析师应当了解的五个统计基本概念:统计特征、概率分布、降维、过采样/欠采样、贝叶斯统计方法。从高的角度来看,统计学是一种利用数学理论来进行数据分析的技术。象柱状图这种基本的可视…

Ubuntu安装与配置(简要)

学校的实验课任务,一看没有写过Ubuntu的安装,现在顺便上传上来;

python-非负矩阵分解-NMF

非负矩阵分解 非负矩阵分解是矩阵中所有元素均为非负数约束条件下的矩阵分解,其基本思想:给定一个非负矩阵V,NMF能够找到一个非负矩阵W和一个非负矩阵H,使得矩阵W和矩阵H的乘积近似等于矩阵V中的值。 矩阵:被称为基础…

OpenAI与GitHub联手推出AI代码生成工具,比GPT-3更强大

来源:AI科技评论作者:琰琰、青暮比GPT-3更强大!昨日,微软与OpenAI共同推出了一款AI编程工具GitHub Copilot,这款工具基于GitHub及其他网站的源代码,可根据上文提示为程序员自动编写下文代码!Git…

Hanlp之理解用户自定义词典(java版本)

首先说明,由于本人水平有限,文章纰漏以及不妥之处还请指出,不胜感激; 理解hanlp中用户自定义词典(java) 什么是hanlp用户自定义字典?为什么要有用户自定义词典? 在Hanlp分词中&…

python-聚类图像分割

K-Means聚类图像分割 图像分割: 利用图像的灰度,颜色,纹理,形状等特征,把图像分成若干个互不重叠的区域,并使这些特征在同一区域内呈现相似性,在不同区域之间存在明显的差异性。然后&#xff0c…

科学家揭秘大脑靠“旋转”区分过去和现在,还给了个AI架构设计新思路 | Nature子刊...

来源:量子位 过去和现在的边界,到底在哪里?人类,又是如何在时间混沌中区分出过往与当下的?注意,这不是一个哲学问题。(手动狗头)而是科学家们的最新研究。两个普林斯顿的神经学家&am…

Hanlp中自定义词典的配置、引用以及问题解决

文章目录如何阅读本文?Hanlp用户自定义词典引用简介操作步骤环境创建编辑词典文件将用户自定义词典路径加入配置文件删除缓存文件如何阅读本文? 首先我们对Hanlp用户词典进行简介,推荐首先阅读链接文章,它是本文的第一来源&#…

有监督学习

有监督学习 利用一组带有标签的数据,学习从输入到输出的映射,然后将这种映射关系应用到未知数据上,达到分类或回归的目的。 分类:当输出为离散的,学习任务为分类任务。回归:当输出为连续的,学习…

深度学习助力网络科学:基于深度学习的社区发现最新综述

来源:AMiner科技论文题目:A Comprehensive Survey on Community Detection with Deep Learning论文网址:https://arxiv.org/pdf/2105.12584.pdf近日,澳大利亚麦考瑞大学计算机学院人工智能与数据科学实验室联合中科院数学与系统科…

Neo4j 图创建1 以BiliBili粉丝UP主之间的关系为例

基本关系图如下,不给出细节 其中所有粉丝名为杜撰,如有雷同纯属巧合 UP主对应关系为方便建库进行了主观处理,不代表真实情况 无商业用途,学习使用

CentOS7开放端口号

查看所有开放的端口号 firewall-cmd --zonepublic --list-ports 或者 firewall-cmd --permanent --list-ports(--permanent表示永久生效) 查询指定端口号是否开发 firewall-cmd --permanent --query-port8080/tcp 删除一个已经开放的端口号 firewall-cm…

Hinton,Lecun和Bengio三巨头联手再发万字长文:深度学习的昨天、今天和明天

来源:ACM编辑:Priscilla Emil2018年,ACM(国际计算机学会)决定将计算机领域的最高奖项图灵奖颁给Yoshua Bengio、Yann LeCun 和 Geoffrey Hinton,以表彰他们在计算机深度学习领域的贡献。这也是图灵奖第三次…

LR为什么用极大似然估计,损失函数为什么是log损失函数(交叉熵)

首先,逻辑回归是一个概率模型,不管x取什么值,最后模型的输出也是固定在(0,1)之间,这样就可以代表x取某个值时y是1的概率 这里边的参数就是θ,我们估计参数的时候常用的就是极大似然估计&#xf…

LSTM之父撰文,纪念这位图灵奖遗珠、“AI理论之父”

原文:1931: Kurt Gdel, founder of theoretical computer science, shows limits of math, logic, computing, and artificial intelligence作者:Jrgen Schmidhuber (知名 AI 学者,LSTM 之父)译者:刘媛媛摘…

Maven简述以及配置使用

目前的技术存在的问题(引入Maven的重要性) 一个项目就是一个工程; 如果项目非常庞大,就不再适合使用package来划分模块;最好是每一个模块对应一个工程,利于分工协作; 借助于Maven可以将一个项目…