kmeans 初步使用,识别一个安全的项目中许多账号中的恶意账号。特征是账号的一些行为,使用时长、浏览次数、在线时长等等。
在一个非常小的数据集上做,结果是非常不理想,
原意是想让它把浏览过某个网页的账号筛选出来,结果就是没有成功地聚类了。
也很简单,因为kmeans的距离计算把每个向量的贡献都看成一样,使用欧式距离作为分类标准,那么对于归纳后的向量和一些初始化向量并不适用了。
1.关于分类和聚类
kmeans属于聚类算法中的一种。分类和聚类是不同的概念。虽然两者的目的都是对数据进行分类,但是却有一定的区别。
- 分类是按照某种标准给对象贴标签,再根据标签来区分归类;
- 聚类是事先没有给出标签,刚开始并不知道如何对数据分类,完全是算法自己来判断各条数据之间的相似性,相似的就放在一起。
在聚类的结论出来之前,不能知道每一类有什么特点,最后一定要根据聚类的结果通过人的经验来分析才能知道聚成的这一类大概有什么特点。简言之,聚类就是“物以类聚、人以群分”的原理。
2.基本概念
简单来说,kmeans算法的原理就是:给定K的值,K代表要将数据分成的类别数,然后根据数据间的相似度将数据分成K个类,也称为K个簇(cluster)。这就是kmeans算法名字中k的由来。
度量数据相似度的方法一般是用数据点间的距离来衡量,比如欧式距离、汉明距离、曼哈顿距离等等。
一般来说,我们使用欧式距离来度量数据间的相似性。所谓的欧式距离便是我们日常使用的距离度量方法。比如对于二维平面上的两个点A(x1,y1)和B(x2,y2),两者间的欧式距离就为。
而对于每一个簇,我们用簇中所有点的中心来描述,该中心也称为质心(centroid)。我们通过对簇中的所有数据点取均值(mean)的方法来计算质心,这也是kmeans算法名字中mean的由来。
3.算法描述
3.1.自然语言描述
-
1.创建K个点作为初始质心(通常是随机选择)
-
2.当任意一个点的簇分类结果发生改变时
-
2.1对数据的每一个点,计算每一个质心与该数据点的距离,将数据点分配到距其最近的簇
-
2.2对于每一个簇,计算簇中所有点的均值并将均值作为质心
-
3.2.伪代码描述
kmeans(dataset, k)
输入:数据集dataset, k的值(大于0的整数)
输出:包含质心的集合,簇分配结果
(1) 选择k个数据点作为质心(通常是随机选取)
(2) 当任意一个点的簇分类结果发生改变时
a) For each 数据集中的点
For each 质心集合的质心
计算数据点与质心的距离
将数据点分配到距其最近的簇,更新簇分配结果
b) For each簇
计算簇中所有点的均值并将均值作为质心