聚类DBSCAN学生月上网时间分布聚类实例

本文通过Python机器学习库sklearn实现DBSCAN聚类算法,对网络使用数据进行聚类分析,详细展示了数据预处理、模型训练、结果评估及可视化过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

**

基于《Python机器学习》——北京理工大学 学习笔记

import numpy as np                          #引入相关工程包
import sklearn.cluster as skc
from sklearn import metrics
import matplotlib.pyplot as plt
 
 
mac2id=dict()                                                                    
onlinetimes=[]
f=open('TestData.txt',encoding='utf-8')             #加载数据
for line in f:                                
    mac=line.split(',')[2]
    onlinetime=int(line.split(',')[6])
    starttime=int(line.split(',')[4].split(' ')[1].split(':')[0])        #读取每条数据的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))            #形成一个二维矩阵
 
X=real_X[:,0:1]              #提取每行第一列元素
 
db=skc.DBSCAN(eps=0.01,min_samples=20).fit(X)     #调用DBSCAN进行训练,labels为每个簇的标签  
labels = db.labels_
 
print('Labels:')                                             #打印数据被记上的标签,噪声数据的标签为-1
print(labels)
raito=len(labels[labels[:] == -1]) / len(labels)            #计算标签为-1的比例,即噪声数据比例
print('Noise raito:',format(raito, '.2%'))
 
n_clusters_ = len(set(labels)) - (1 if -1 in labels else 0)         #簇的个数
 
print('Estimated number of clusters: %d' % n_clusters_)         
print("Silhouette Coefficient: %0.3f"% metrics.silhouette_score(X, labels))   # 打印聚类效果
 
for i in range(n_clusters_):                          #打印簇类标号以及各簇数据
    print('Cluster ',i,':')
    print(list(X[labels == i].flatten()))
     
plt.hist(X,24)
plt.show()

个别函数用法说明:

  1. flatten( ) :flatten是numpy.ndarray.flatten的一个函数,即返回一个一维数组。flatten只能适用于numpy对象,即array或者mat,普通的list列表不适用。例如:

    a.flatten():按默认方向降维
    a.flatten(‘F’):按列方向降维
    a.flatten(‘A’):按行方向降维

https://www.jb51.net/article/150035.htm

  1. set():set函数创建一个无序不重复元素集,可进行关系测试,删除重复数据,还可以计算交集、差集、并集等。例如:
    在这里插入图片描述

个别参数说明

1.eps:两个样本被看作邻居节点的最大距离
2.min_sample:簇的样本数
3.metrics:距离计算方式(默认欧几里得距离)
4.轮廓系数(Silhouette Coefficient)的值是介于 [-1,1] ,越趋近于1代表内聚度和分离度都相对较优

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值