Python机器学习应用 case2 学生上网分析(DBSCAN)

文章中代码和数据来源于mooc机器学习应用,下面先附上链接:https://www.icourse163.org/course/BIT-1001872001,数据集和slide的获取可以查看本专辑case 0中的相应链接。
下面简单地介绍一下代码
首先是调用相应地包:

import numpy as np
import matplotlib.pyplot as plt
import sklearn.cluster as skc
from sklearn import metrics

导入数据:

mac2id=dict()
onlinetimes=[]
f=open('/Users/Desktop/Python机器学习应用/mooc课程数据/课程数据/聚类/学生月上网时间分布-TestData.txt',encoding='utf-8')#读取文件中的数据
for line in f:#将用得到的数据保存下来,至于为什么这样保存可能还是要看一下课程的slide
    mac=line.split(',')[2]#mac地址
    onlinetime=int(line.split(',')[6])#上网时长
    starttime=int(line.split(',')[4].split(' ')[1].split(':')[0])#开始上网时间
    mac2id[mac]=len(onlinetimes)#我们把它加入到mac2id中
    onlinetimes.append((starttime,onlinetime))#在onlinetimes中增加一条上网记录

数据预处理:

#print(onlinetimes)
real_X=np.array(onlinetimes).reshape((-1,2))#改变数组的形状,如果好奇是怎么改变的可以把上下两个print打开
#print(real_X)
X=real_X[:,0:1]#得到real_X中的上网开始时间
#print(X)

模型计算:

db=skc.DBSCAN(eps=0.01,min_samples=20).fit(X)#最小距离是0。01,最少样本数是20
labels=db.labels_#保存标签

输出结果:

print('Labels:')
print(labels)#打印标签
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 number of clusters:%d'% n_clusters_)#打印类的个数
print('Silhouette Coefficient:%0.3f'%metrics.silhouette_score(X,labels))#计算轮廓系数,越接近1表示聚类效果越好
for i in range(n_clusters_):#打印各簇标号以及各簇内数据
    print('Cluster ',i,':')
    print(list(X[labels==i].flatten()))
plt.hist(X,24)
plt.show()
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值