机器学习-DBSCAN算法追踪新冠肺炎传播
2022/7/12 14:24:26
本文主要是介绍机器学习-DBSCAN算法追踪新冠肺炎传播,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
import numpy as np import pandas as pd import matplotlib.pyplot as plt import seaborn as sns import datetime as dt import warnings warnings.filterwarnings('ignore') from sklearn.cluster import DBSCAN #基于密度的聚类算法可以发现任意形状的聚类 #通过在数据集中寻找被低密度区域分离的高密度区域,将分离出的高密度区域作为一个独立的类别
# DBSCAN的优缺点: #优点:不需要用户先验地设置簇的个数,可以划分具有复杂形状的簇,还可以找出不属于任何簇的点。 # 可以对任意形状的稠密数据集进行聚类,相对的,K-Means之类的聚类算法一般只适用于凸数据集。 # 可以在聚类的同时发现异常点,对数据集中的异常点不敏感。 # DBSCAN 比凝聚聚类和 k 均值稍慢,但仍可以扩展到相对较大的数据集。 #缺点: 需要设置eps值
#导入相关数据并查看前5行 df = pd.read_json('livedata.json') df.head()
plt.figure(figsize=(8,6))#开画,设置画的大小 sns.scatterplot(x='latitude',y='longitude',data=df,hue='id') # 根据id进行区分 plt.legend(bbox_to_anchor= [1, 0.5]) # 调整示例的位置
#DBSCAN模型创建一个用于联系人跟踪的模型,该集群将通过过滤集群中的数据来帮助识别感染 def get_infected_names(input_name): #获得受感染的人的名字 epsilon = 0.0018288 # a radial distance of 6 feet in kilometers,设置eps model = DBSCAN(eps=epsilon, min_samples=2, metric='haversine').fit(df[['latitude', 'longitude']])#训练,metric使用haversine(经纬度距离计算公式) df['cluster'] = model.labels_.tolist() #将标签转为数组 input_name_clusters = [] #设置空列表 for i in range(len(df)): if df['id'][i] == input_name: # 如果id==input_name且不在input_name_clusters就添加 if df['cluster'][i] in input_name_clusters: pass else: input_name_clusters.append(df['cluster'][i]) infected_names = [] for cluster in input_name_clusters: if cluster != -1: ids_in_cluster = df.loc[df['cluster'] == cluster, 'id'] for i in range(len(ids_in_cluster)): member_id = ids_in_cluster.iloc[i] if (member_id not in infected_names) and (member_id != input_name): infected_names.append(member_id) else: pass return infected_names
print(get_infected_names("Erin")) epsilon = 0.0018288 # a radial distance of 6 feet in kilometers model = DBSCAN(eps=epsilon, min_samples=1, metric='haversine').fit(df[['latitude', 'longitude']]) labels = model.labels_ fig = plt.figure(figsize=(12,10)) sns.scatterplot(df['latitude'], df['longitude'], hue = ['cluster-{}'.format(x) for x in labels]) plt.legend(bbox_to_anchor = [1, 1]) plt.show()
这篇关于机器学习-DBSCAN算法追踪新冠肺炎传播的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-27Rocket消息队列资料:新手入门指南
- 2024-11-27rocket消息队资料详解与入门指南
- 2024-11-27RocketMQ底层原理资料详解入门教程
- 2024-11-27RocketMQ项目开发资料:新手入门教程
- 2024-11-27RocketMQ项目开发资料详解
- 2024-11-27RocketMQ消息中间件资料入门教程
- 2024-11-27初学者指南:深入了解RocketMQ源码资料
- 2024-11-27Rocket消息队列学习入门指南
- 2024-11-26Rocket消息中间件教程:新手入门详解
- 2024-11-26RocketMQ项目开发教程:新手入门指南