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

根据学生月上网时间数据运用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]

 

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

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

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

时间: 2024-10-12 11:46:00

无监督学习之聚类2——DBSCAN的相关文章

2019-07-25【机器学习】无监督学习之聚类 K-Means算法实例 (1999年中国居民消费城市分类)

样本 北京,2959.19,730.79,749.41,513.34,467.87,1141.82,478.42,457.64天津,2459.77,495.47,697.33,302.87,284.19,735.97,570.84,305.08河北,1495.63,515.90,362.37,285.32,272.95,540.58,364.91,188.63山西,1406.33,477.77,290.15,208.57,201.50,414.72,281.84,212.10内蒙古,1303.9

无监督学习之聚类1——Kmeans

Kmeans算法分析31省市消费水平 #coding=utf-8 import numpy as np from sklearn.cluster import KMeans def loadData(filepath): fr = open(filepath, 'r+') lines = fr.readlines() retData = [] retCityName = [] for line in lines: items = line.strip().split(",")#以逗号为

Machine Learning Algorithms Study Notes(4)—无监督学习(unsupervised learning)

1    Unsupervised Learning 1.1    k-means clustering algorithm 1.1.1    算法思想 1.1.2    k-means的不足之处 1.1.3    如何选择K值 1.1.4    Spark MLlib 实现 k-means 算法 1.2    Mixture of Gaussians and the EM algorithm 1.3    The EM Algorithm 1.4    Principal Components

5.无监督学习-DBSCAN聚类算法及应用

DBSCAN方法及应用 1.DBSCAN密度聚类简介 DBSCAN 算法是一种基于密度的聚类算法: 1.聚类的时候不需要预先指定簇的个数 2.最终的簇的个数不确定DBSCAN算法将数据点分为三类: 1.核心点:在半径Eps内含有超过MinPts数目的点. 2.边界点:在半径Eps内点的数量小于MinPts,但是落在核心点的邻域内的点. 3.噪音点:既不是核心点也不是边界点的点. 如下图所示:图中黄色的点为边界点,因为在半径Eps内,它领域内的点不超过MinPts个,我们这里设置的MinPts为5

无监督学习——K-均值聚类算法对未标注数据分组

无监督学习 和监督学习不同的是,在无监督学习中数据并没有标签(分类).无监督学习需要通过算法找到这些数据内在的规律,将他们分类.(如下图中的数据,并没有标签,大概可以看出数据集可以分为三类,它就是一个无监督学习过程.) 无监督学习没有训练过程. 聚类算法 该算法将相似的对象轨道同一个簇中,有点像全自动分类.簇内的对象越相似它的分类效果越好. 未接触这个概念可能觉得很高大上,稍微看了一会其实算法的思路和KNN一样很简单. 原始数据集如下(数据有两个特征,分别用横纵坐标表示),原始数据集并没有任何标

[机器学习][K-Means] 无监督学习之K均值聚类

有监督学习虽然高效.应用范围广,但最大的问题就是需要大量的有标签的数据集,但现实生活中我们遇到的大量数据都是没有明确标签的,而且对于庞大的数据集进行标注工作本身也是一项费时费力的工作模式,所以我们希望找到一种方法能自动的挖掘数据集中各变量的关系,然后"总结"出一些规律和特征进行分类,这样的方法我们成为无监督学习(Unsupervised learning). 在无标签的数据集中进行分类的方法成为聚类.顾名思义,聚类就是依照某种算法将相似的样本聚在一起形成一类,而不管它的标签是什么.在聚

05_无监督学习--聚类模型--K 均值

无监督学习--聚类模型--K 均值0.引入依赖1.数据的加载和预处理2.算法实现3.测试 无监督学习--聚类模型--K 均值 0.引入依赖 import numpy as npimport matplotlib.pyplot as plt # 这里直接 sklearn 里的数据集from sklearn.datasets.samples_generator import make_blobs 1.数据的加载和预处理 x, y = make_blobs(n_samples=100, centers

3.无监督学习简介

无监督学习 1.无监督学习的目标: 利用无标签的数据学习数据的分布或数据与数据之间的关系被称为无监督学习. 1.有监督学习和无监督学习的最大区别在于数据是否有标签 2.无监督学习最常应用的场景是聚类(clustering)和降维(Dimension Reduction) 2.聚类(clustering) 聚类,就是根据数据的"相似性"将数据分为多类的过程. 什么样的数据是相似的数据?以及如何定义相似性? 是很多机器学习任务的基本问题: 评估两个不同样本之间的"相似性"

无监督学习小记(参考)

下面凌乱的小记一下无监督学习 无监督学习->聚类 降维 聚类:数据相似性 相似性的评估:两个数据样本间的距离 距离:欧氏距离 曼哈顿距离 马氏距离 夹角余弦 sklearn 聚类算法 sklearn.cluster,如k-means 近邻传播 DBSCAN等 标准的数据输入格式:[样本个数,特征个数]定义的矩阵形式 介绍sklearn.cluster |算法名称|参数|可扩展性|相似度度量| |-|-|-|-| 降维 主成分分析PCA PCA常用于高维数据集的探索与可视化,还可以用于数据压缩和预