K-Means聚类算法及实现代码(共4页).doc





《K-Means聚类算法及实现代码(共4页).doc》由会员分享,可在线阅读,更多相关《K-Means聚类算法及实现代码(共4页).doc(4页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、精选优质文档-倾情为你奉上K-Means算法k-means 算法接受参数 k ;然后将事先输入的n个数据对象划分为 k个聚类以便使得所获得的聚类满足:同一聚类中的对象相似度较高;而不同聚类中的对象相似度较小。聚类相似度是利用各聚类中对象的均值所获得一个“中心对象”(引力中心)来进行计算的。假设要把样本集分为c个类别,算法描述如下: (1)适当选择c个类的初始中心; (2)在第k次迭代中,对任意一个样本,求其到c个中心的距离,将该样本归到距离最短的中心所在的类; (3)利用均值等方法更新该类的中心值; (4)对于所有的c个聚类中心,如果利用(2)(3)的迭代法更新后,值保持不变,则迭代结束,否则
2、继续迭代。#include #include #include #define _NUM 3 /预定义划分簇的数目 using namespace std; /* 特征对象,表示一个元组,一个元组有两个数值属性 */ struct Tuple int attr1; int attr2; ; /* 获取两个特征对象之间的距离,在此以欧基米德距离作为距离度量标准 */ double getDistXY(Tuple t1, Tuple t2) return sqrt(t1.attr1 - t2.attr1) * (t1.attr1 - t2.attr1) + (t1.attr2 - t2.attr2
3、) * (t1.attr2 - t2.attr2); /* 计算簇的中心点,在此以簇中所有对象的平均距离来计算中心点 */ Tuple getMeansC(vector c) int num = c.size(); double meansX = 0, meansY = 0; Tuple t; for (int i = 0; i num; i+) meansX += ci.attr1; meansY += ci.attr2; t.attr1 = meansX / num; t.attr2 = meansY / num; return t; /* 获取算法的准则函数值,当准则函数收敛时算法停止
4、*/ double getE(vector classes, Tuple means) double sum = 0; for (int i = 0; i _NUM; i+) vector v = classesi; for (int j = 0; j v.size(); j+) sum += (vj.attr1 - meansi.attr1) * (vj.attr1 - meansi.attr1) + (vj.attr2 - meansi.attr2) *(vj.attr2 - meansi.attr2); coutsum:sumendl; return sum; /* 对当前的特征对象,查
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Means 算法 实现 代码

限制150内