数据介绍:
现有1999年全国31个省份城镇居民家庭平均每人全年消费性支出的八个主要变量数据,这八个变量分别是:食品、衣着、家庭设备用品及服务、医疗保健、交通和通讯、娱乐教育文化服务、居住以及杂项商品和服务。利用已有数据,对31个省份进行聚类。
实验目的:
通过聚类,了解1999年各个省份的消费水平在国内的情况。
技术路线:sklearn.cluster.Kmeans
实现过程:
1.建立工程,导入sklearn相关包。
import numpy as np
from sklearn.clueter import KMeans
2.加载数据,创建K-means算法实例,并进行训练,获得标签:
调用K-Means方法所需参数:
1.n_clusters:用于指定聚类中心的个数
2.init:初始聚类中心的初始化方法
3.max_iter:最大的迭代次数
4.一般调用时只用给出n_clusters即可,init默认是k-means++,max_iter默认是300
其他参数:
1.data:加载的数据
2.label:聚类后各数据所属的标签
3.fit_predict():计算簇中心以及为簇分配序号
重点方法解释:
data,cityName = loadData(‘city.txt’)
def loadData(filepath):
fr = open(filePath,'r+')
lines = fr.readlines()
retData = []
retCityName = []
for line in lines:
items = line.strip().split(",")
retCityName.append(items[0])
retData.append([float(itrms[i]) for i in range(1,len(items))])
return retData,retCityName
PS:
1.r+:读写打开一个文本文件
2. .readlines() 一次读取整个文件类似于.read())
3.retCityName:用来存储城市名称
4.retData:用来存储城市的各项消费信息
5.返回值:返回城市名称,以及该城市的各项消费信息。
3.输出标签,查看结果
将城市按照消费水平n_clueters类,消费水平相近的城市聚集在一类中。
expense:聚类中心点的数值相加,也就是平均消费水平。
聚成2类:km = KMeans(n_clueters=2)
聚成3类:km = KMeans(n_clusters=3)
聚成4类:km = KMeans(n_clusters=4)
拓展&&改进
计算两条数据相似性时,Sklearn的K-Means默认用的是欧式距离。虽然还有余弦相似度,马氏距离等多种方法,但没有设定计算距离方法的参数。
DBSCAN算法是一种基于密度的聚类算法:
1.聚类的时候不需要预先指定簇的个数
2.最终的簇的个数不定
DBSCAN算法将数据点分为三类:
1.核心点:在半径Eps内含有超过MinPts数目的点
2.边界点:在半径Eps内点的数量小于MinPts,但是落在核心点的领域内
噪音点:既不是核心点也不是边界点的点
DBSCAN算法流程:
1.将所有点标记为核心点、边界点或噪声点;
2.删除噪声点;
3.为距离在Eps之内的所有核心点之间赋予一条边;
4.每组连通的核心点形成一个簇
5.将每个边界点指派到一个与之关联的核心点的簇中(哪一个核心点的半径范围之内)
举例:有如下13个样本点,使用DBSCAN进行聚类
1.取Eps=3,MinPts=3,依据DBSACN对所有思安进行聚类(曼哈顿距离)
2.对每个点计算其领域Eps=3内的点的集合
3.集合内点的个数超过MinPts=3的点位核心点
4.查看剩余点是否在核心点的领域内,若在,则为边界点,否则为噪声点
5.将距离不超过Eps=3的点相互连接,构成一个簇,核心点领域内的点也会被加入到这个簇中
数据介绍
现有大学校园网的日志数据,290条大学生的校园网使用情况数据,数据包括用户ID,设备的MAC地址,IP地址,开始上网时间,停止上网时间,上网时长,校园网套餐等。利用已有数据,分析学生上网的模式。
实验目的
通过DBSCAN聚类,分析学生上网时间和上网时长的模式。
技术路线
sklearn.cluster.DBSCAN
实验过程
1.建立工程,导入sklearn相关包
import numpy as np
from sklearn.cluster import DBSCAN
DBSCAN主要参数:
1.eps:两个样本被看作邻居节点的最大距离
2.min_samples:簇的样本数
3.metric:距离计算方式
例如:sklearn.clueter.DBSCAN(eps=0.5,min_samples=5,metric=‘euclidean’)
2.读入数据并进行处理
3-1.上网时间聚类,创建DBSCAN算法实例,并进行训练,获得标签:
4.输出标签,查看结果
3-2.上网时长聚类,创建DBSCAN算法实例,并进行训练,获得标签:
4-2输出标签,查看结果