1 / 7
文档名称:

数据挖掘K-平均值(K-means)程序C实现.pdf

格式:pdf   页数:7
下载后只包含 1 个 PDF 格式的文档,没有任何的图纸或源代码,查看文件列表

如果您已付费下载过本站文档,您可以点这里二次下载

分享

预览

数据挖掘K-平均值(K-means)程序C实现.pdf

上传人:紫岑旖旎 2013/12/19 文件大小:0 KB

下载得到文件列表

数据挖掘K-平均值(K-means)程序C实现.pdf

文档介绍

文档介绍:记忆过往
总有一个人需要这些知识。本博客信息正在迁往
/
[置顶] 数据挖掘K-平均值(K-means)程序C实现
分类: C Program 2011-12-01 21:26 4513人阅读评论(0) 收藏举报
数据挖掘c算法struct存储algorithm
k平均聚类发明于1956年, 该算法最常见的形式是采用被称为劳埃德算法(Lloyd algorithm)的迭代式改进探索法。劳埃德算法首先把输入点分成k个初始化分组,可以是随机的或者使用一些启发式数据。然后计算每组的中心点,根据中心点的位置把对象分到离它最近的中心,重新确定分组。继续重复不断地计算中心并重新分组,直到收敛,即对象不再改变分组(中心点位置不再改变)。劳埃德算法和k平均通常是紧密联系的,但是在实际应用中,劳埃德算法是解决k平均问题的启发式法则,对于某些起始点和重心的组合,劳埃德算法可能实际上收敛于错误的结果。(上面函数中存在的不同的最优解) 虽然存在变异,但是劳埃德算法仍旧保持流行,因为它在实际中收敛非常快。实际上,观察发现迭代次数远远少于点的数量。然而最近,David Arthur和Sergei Vassilvitskii提出存在特定的点集使得k平均算法花费超多项式时间达到收敛。近似的k平均算法已经被设计用于原始数据子集的计算。从算法的表现上来说,它并不保证一定得到全局最优解,最终解的质量很大程度上取决于初始化的分组。由于该算法的速度很快,因此常用的一种方法是多次运行k平均算法,选择最优解。 k平均算法的一个缺点是,分组的数目k是一个输入参数,不合适的k可能返回较差的结果。另外,算法还假设均方误差是计算群组分散度的最佳参数。
#include<>
#include<>
#include<>
typedef struct point{
double x;//x坐标
double y;//y坐标
int n;//属于哪个簇
char label[10];//点标号
}Point;
int main(){
int n;
int i, j, k = 0, l = 0;
int m;//点的个数
double sq;
double min = 65535;//存储最小的点距离
int pos;//标记最小点集
char c;
Point *center;//存储中心点
Point *pot;//存储坐标点
double *dis;//存储距离的
printf("输入中心点的个数:\n");
scanf("%d", &n);
getchar();
for(i = 0; i < n; i++){//分配空间
center = calloc(n, sizeof(struct point));
dis = calloc(n, sizeof(double));
if(center == NULL || dis == NULL){
printf("calloc() error\n");
exit(1);
}
}
for(i = 0; i < n; i++){
printf("输入第%d个中心点的坐标,usage:a1 (