无监督学习之聚类2——dbscan

miller_fu      2022-02-14     362

关键词:

根据学生月上网时间数据运用DBSCAN算法计算:

#coding=utf-8
import numpy as np
import sklearn.cluster as skc
from sklearn import metrics
import matplotlib.pyplot as plt

mac2id = dict()
onlinetimes = []
f = open('F:\data\TestData.txt', encoding='utf-8')
for line in f:
    mac = line.split(',')[2]#取得mac地址,例如第一行A417314EEA7B

    onlinetime = int(line.split(',')[6])#上网时长

    starttime = int(line.split(',')[4].split(' ')[1].split(':')[0])#开始时间只取第一个":"分割的:小时


    #每一个onlinetimes有一个唯一的mac2id对应
    if mac not in mac2id:
        mac2id[mac] = len(onlinetimes)
        onlinetimes.append((starttime, onlinetime))
    else:
        onlinetimes[mac2id[mac]] = [(starttime,onlinetime)]

#print(onlinetimes)
real_X = np.array(onlinetimes).reshape((-1, 2))#自行构造一个2列的矩阵,-1构造未知行数
#print(real_X)


X = real_X[:, 0:1]#只取上网开始时
#print(X)

#调用DBSCAN方法进行训练,labels为每个数据的簇标签
db = skc.DBSCAN(eps=0.01, min_samples=20).fit(X)
#返回的数据的簇标签,噪声数据标签为-1

'''#上网时长聚类
X = np.log(1+real_X[:, 1:])
db = skc.DBSCAN(eps=0.04, min_samples=10).fit(X)
'''
labels = db.labels_

print('Labels:\n', labels)

#计算簇标签为-1的噪声数据比率
raito = len(labels[labels[:] == -1])/len(labels)
print('Noise raito: ', format(raito, '.2%'))

#计算簇个数
n_clusters_ = len(set(labels))-(1 if -1 in labels else 0)
print('Estimated numbe 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()

运行结果:

Labels:
[ 0 -1 0 1 -1 1 0 1 2 -1 1 0 1 1 3 -1 -1 3 -1 1 1 -1 1 3 4
-1 1 1 2 0 2 2 -1 0 1 0 0 0 1 3 -1 0 1 1 0 0 2 -1 1 3
1 -1 3 -1 3 0 1 1 2 3 3 -1 -1 -1 0 1 2 1 -1 3 1 1 2 3 0
1 -1 2 0 0 3 2 0 1 -1 1 3 -1 4 2 -1 -1 0 -1 3 -1 0 2 1 -1
-1 2 1 1 2 0 2 1 1 3 3 0 1 2 0 1 0 -1 1 1 3 -1 2 1 3
1 1 1 2 -1 5 -1 1 3 -1 0 1 0 0 1 -1 -1 -1 2 2 0 1 1 3 0
0 0 1 4 4 -1 -1 -1 -1 4 -1 4 4 -1 4 -1 1 2 2 3 0 1 0 -1 1
0 0 1 -1 -1 0 2 1 0 2 -1 1 1 -1 -1 0 1 1 -1 3 1 1 -1 1 1
0 0 -1 0 -1 0 0 2 -1 1 -1 1 0 -1 2 1 3 1 1 -1 1 0 0 -1 0
0 3 2 0 0 5 -1 3 2 -1 5 4 4 4 -1 5 5 -1 4 0 4 4 4 5 4
4 5 5 0 5 4 -1 4 5 5 5 1 5 5 0 5 4 4 -1 4 4 5 4 0 5
4 -1 0 5 5 5 -1 4 5 5 5 5 4 4]
Noise raito: 22.15%
Estimated numbe of clusters: 6
Silhouette Coefficient: 0.710
Cluster 0 :
[22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22]
Cluster 1 :
[23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23]
Cluster 2 :
[20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20]
Cluster 3 :
[21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21]
Cluster 4 :
[8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8]
Cluster 5 :
[7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7]

 

根据上网开始时间分类直方图如下:

根据上网时间聚类直方图如下:

根据上网开始时间明显要好于上网时长聚类.

 

《python机器学习及实践》----无监督学习之数据聚类

本片博客是根据《Python机器学习及实践》一书中的实例,所有代码均在本地编译通过。数据为从该书指定的百度网盘上下载的,或者是sklearn自带数据下载到本地使用的。代码片段:#coding:utf-8#分别导入numpy、matplotlib以... 查看详情

[机器学习][k-means]无监督学习之k均值聚类

..."总结"出一些规律和特征进行分类,这样的方法我们成为无监督学习(Unsupervisedlearning)。在无标签的数据集中进行分类的方法成为聚类。 查看详情

无监督学习之rbm和autoencoder

几种学习方式半监督学习TransferLearningSelf-talkLearningRBMRBM的类别BoltzmannMachineRestrictedBoltzmannMachineEvaluationInferenceTraining网络结构训练过程概率分布计算与GibbsSampling对比散度ContrastiveDivergence泛化实例AutoEncoder特点实例有标签的数据 查看详情

《python机器学习及实践》----无监督学习之特征降维

本片博客是根据《Python机器学习及实践》一书中的实例,所有代码均在本地编译通过。数据为从该书指定的百度网盘上下载的,或者是sklearn自带数据下载到本地使用的。代码片段:#coding:utf-8importnumpyasnpM=np.array([[1,... 查看详情

无监督学习之rbm和autoencoder(代码片段)

几种学习方式半监督学习TransferLearningSelf-talkLearningRBMRBM的类别BoltzmannMachineRestrictedBoltzmannMachineEvaluationInferenceTraining网络结构训练过程概率分布计算与GibbsSampling对比散度ContrastiveDivergence泛化实例AutoEncoder特点实例有标签的数据 查看详情

《python机器学习及实践》----无监督学习之特征降维

本片博客是根据《Python机器学习及实践》一书中的实例,所有代码均在本地编译通过。数据为从该书指定的百度网盘上下载的,或者是sklearn自带数据下载到本地使用的。代码片段:#coding:utf-8importnumpyasnpM=np.array([[1,... 查看详情

5.1_非监督学习之sckit-learn(代码片段)

 非监督学习之k-meansK-means通常被称为劳埃德算法,这在数据聚类中是最经典的,也是相对容易理解的模型。算法执行的过程分为4个阶段。1.首先,随机设K个特征空间内的点作为初始的聚类中心。2.然后,对于根据每个数据的... 查看详情

2.监督学习之分类

1.1监督学习机器学习的第一种范式是监督学习(Supervisedlearning),学习的目标是根据输入预测输出的函数。例如,输入是患者的检查数据,输出是疾病的诊断结果;输入是动物图片,输出是它们的名称&... 查看详情

机器学习之聚类算法(k-meanscanopy层次聚类谱聚类)

目录1聚类的定义1.1距离公式(相似度)1.2聚类的思想2K-means算法2.1K-means算法的思考2.2总结3二分K-Means算法4K-Means++算法4.1K-Means||算法5Canopy算法5.1应用场景6MiniBatchK-Means算法7层次聚类方法7.1AGNES算法中簇间距离7.2层次聚类优化算法8... 查看详情

机器学习笔记-监督学习之决策树

0机器学习中分类和预测算法的评估:准确率速度健壮性可规模性可解释性1决策树(判定树)的概念  决策树是一个类似于流程图的树结构(可以是二叉树或多叉树):其中,每个内部结点表示在一个属性上的测试,每个分支... 查看详情

3.监督学习之回归及归纳偏好

1.1.2回归同样,用一个简单的例子来说明回归。这次我变成一个天气爱好者,想知道每天不同时间的气温。预测函数的输入是时间,输出是该时间的气温。回归也需要训练数据,这里的数据是我记录的一天当中若... 查看详情

3.监督学习之回归及归纳偏好

1.1.2回归同样,用一个简单的例子来说明回归。这次我变成一个天气爱好者,想知道每天不同时间的气温。预测函数的输入是时间,输出是该时间的气温。回归也需要训练数据,这里的数据是我记录的一天当中若... 查看详情

基于c++实现dbscan聚类算法(代码片段)

DBSCAN聚类算法进行了C++的实现,时间复杂度为O(n^2)。 1、数据点类型描述如下(DataPoint.h)#include<vector>usingnamespacestd;constintDIME_NUM=2;//数据维度为2,全局常量//数据点类型classDataPointprivate:u 查看详情

dbscan聚类算法的实现(代码片段)

DBSCAN聚类算法的实现1.作者介绍2.关于理论方面的知识介绍2.1DBSCAN算法介绍2.2鸢尾花数据集介绍3.实验过程3.1实验代码3.2实现过程3.3实验结果4.参考文献1.作者介绍刘鹏程,男,西安工程大学电子信息学院,202... 查看详情

使用 dbscan 对角度数据进行聚类

】使用dbscan对角度数据进行聚类【英文标题】:clusteringwithangulardatausingdbscan【发布时间】:2014-07-2404:59:35【问题描述】:我需要以X、Y、Phi的形式对数据点进行聚类。现在我使用DBSCAN(sklearn)。除了一件事之外,聚类有效:Phi是角... 查看详情

k均值聚类和dbscan介绍(代码片段)

K均值(K-means)聚类问题定义:给定数据$\\vecx_1,\\vecx_2,\\cdots,\\vecx_n$,将它们分到不同的$K$个簇(cluster)中。定义$\\vecc=(c_1,c_2,\\cdots,c_n),\\textc_i\\in\\1,2,\\cdots,K\\$,$c_i=k$表示$\\vecx_i$被分到了第$k$个簇中。定义$\\ve 查看详情

⭐k-means和dbscan聚类算法——理论结合代码的实现(代码片段)

文章目录一、基本概念二、K-Means2.1基本步骤与流程2.2代码实现2.2.1手写python代码实现2.2.2算法优化2.2.2.1多次随机初始化2.2.2.2使用肘部法则确定k2.2.3sklean中的kmeans2.2.3.1肘部法则优化k2.2.3.2轮廓系数2.2.4MiniBatchKMeans三、DBSCAN(基... 查看详情

⭐k-means和dbscan聚类算法——理论结合代码的实现(代码片段)

文章目录一、基本概念二、K-Means2.1基本步骤与流程2.2代码实现2.2.1手写python代码实现2.2.2算法优化2.2.2.1多次随机初始化2.2.2.2使用肘部法则确定k2.2.3sklean中的kmeans2.2.3.1肘部法则优化k2.2.3.2轮廓系数2.2.4MiniBatchKMeans三、DBSCAN(基... 查看详情