K-Means 算法
k-means 算法接受参数 k ;然后将事先输入的 n 个数据对象划分为 k 个聚类
以便使得所获得的聚类满足:同一聚类中的对象相似度较高;而不同聚类中
的对象相似度较小。聚类相似度是利用各聚类中对象的均值所获得一个“中心
对象”(引力中心)来进行计算的。
假设要把样本集分为 c 个类别,算法描述如下:
(1)适当选择 c 个类的初始中心;
(2)在第 k 次迭代中,对任意一个样本,求其到 c 个中心的距离,将
该样本归到距离最短的中心所在的类;
(3)利用均值等方法更新该类的中心值;
(4)对于所有的 c 个聚类中心,如果利用(2)(3)的迭代法更新后,
值保持不变,则迭代结束,否则继续迭代。
#include <iostream>
#include <math.h>
#include <vector>
#dene _NUM 3 //预定义划分簇的数目
using namespace std;
/**
特征对象,表示一个元组,一个元组有两个数值属性
**/
struct Tuple
{
int a$r1;
int a$r2;
};
/**
获取两个特征对象之间的距离,在此以欧基米德距离作为距离度量标准
**/
double getDistXY(Tuple t1, Tuple t2)
{
return sqrt((t1.a$r1 - t2.a$r1) * (t1.a$r1 - t2.a$r1) + (t1.a$r2 - t2.a$r2) * (t1.a$r2
- t2.a$r2));
}
/**
计算簇的中心点,在此以簇中所有对象的平均距离来计算中心点
- 1
- 2
前往页