2019-07-28【机器学习】无监督学习之聚类 DBSCAN方法及其应用 (在线大学生上网时间分析)

样本:

2019-07-28【机器学习】无监督学习之聚类 DBSCAN方法及其应用 (在线大学生上网时间分析)

import numpy as np
import sklearn.cluster as skc
from sklearn import metrics
import matplotlib.pyplot as plt mac2id = dict()
onlinetimes = []
f = open('D:\python_source\Machine_study\mooc课程数据\课程数据\聚类\学生月上网时间分布-TestData.txt', encoding='utf-8')
for line in f:
mac = line.split(',')[2] #获取mac地址
onlinetime = int(line.split(',')[6]) #上网时间,单位为秒
starttime = int(line.split(',')[4].split(' ')[1].split(':')[0])#源数据为,2014-07-20 22:44:18.540000000,提取出22
if mac not in mac2id:
mac2id[mac] = len(onlinetimes) #字典,key-mac,??value-上网时长和上网时间/0,1,2,3,4,5,6,7
onlinetimes.append((starttime, onlinetime)) else:
onlinetimes[mac2id[mac]] = [(starttime, onlinetime)] real_X = np.array(onlinetimes).reshape((-1, 2)) #二维数组 X = real_X[:, 0:1] #提取出开始时间点
#S = np.log(1 + real_X[:, 1:]) 对数变换
#print(S)
db = skc.DBSCAN(eps=0.01, min_samples=20).fit(X) #lables为每个数据的簇标签
lables = db.labels_ print('Lables:')
print(lables) #分为7类标签
#输出噪点比例
raito = len(lables[lables[:] == -1])/len(lables)
print('Noise raito:', format(raito, '.2%')) n_clusters = len(set(lables)) - (1 if -1 in lables else 0) #噪点为-1,如果有噪点,则7-1==6类 print('Estimated nuber of clusters: %d' %n_clusters)
print("Silhouetts Coefficient: %0.3f" %metrics.silhouette_score(X, lables)) #聚类效果评价指标 for i in range(n_clusters):
print('Cluster', i, ':')
print(list(X[lables == i].flatten())) plt.hist(X, 24)
plt.show()

效果图

2019-07-28【机器学习】无监督学习之聚类 DBSCAN方法及其应用 (在线大学生上网时间分析)

上一篇:WPF——数据绑定(一)什么是数据绑定


下一篇:杭电acm 1002 大数模板(一)