下载此文档

K-Means算法实现.doc


文档分类:IT计算机 | 页数:约10页 举报非法文档有奖
1/10
下载提示
  • 1.该资料是网友上传的,本站提供全文预览,预览什么样,下载就什么样。
  • 2.下载该文档所得收入归上传者、原创者。
  • 3.下载的文档,不会出现我们的网址水印。
1/10 下载此文档
文档列表 文档介绍
K-Means算法实现
K-Means算法简介
k-means algorithm算法是一个聚类算法,把n的对象根据他们的属性分为k个分割,k < n。它与处理混合正态分布的最大期望算法很相似,因为他们都试图找到数据中自然聚类的中心。它假设对象属性来自于空间向量,并且目标是使各个群组内部的均方误差总和最小。
k-means 算法的工作过程说明如下:首先从n个数据对象任意选择 k 个对象作为初始聚类中心;而对于所剩下其它对象,则根据它们与这些聚类中心的相似度(距离),分别将它们分配给与其最相似的(聚类中心所代表的)聚类;然后再计算每个所获新聚类的聚类中心(该聚类中所有对象的均值);不断重复这一过程直到标准测度函数开始收敛为止。一般都采用均方差作为标准测度函数. k个聚类具有以下特点:各聚类本身尽可能的紧凑,而各聚类之间尽可能的分开。具体如下:
输入:k, data[n];
(1) 选择k个初始中心点,例如c[0]=data[0],…c[k-1]=data[k-1];
(2) 对于data[0]….data[n], 分别与c[0]…c[n-1]比较,假定与c[i]差值最少,就标记为i;
(3) 对于所有标记为i点,重新计算c[i]={ 所有标记为i的data[j]之和}/标记为i的个数;
(4) 重复(2)(3),直到所有c[i]值的变化小于给定阈值。
K-Means算法的实现(C++环境下实现)
#include <iostream>
#include <fstream>
#include <cmath>
#include <cstdlib>
#include <ctime>
using namespace std;
// 数据对象,size为维度
struct Vector
{double* coords; // 所有维度的数值
int size;
Vector() : coords(0), size(0) {}
Vector(int d) { create(d); }
// 创建维度为d的数据,并将各维度初始化为0
void create(int d)
{ size = d;
coords = new double[size];
for (int i=0; i<size; i++)
coords[i] = ; }
// 复制一个数据
void copy(const Vector& other)
{ if (size == 0) // 如果原来没有数据,创建之
create();
for (int i=0; i<size; i++)
coords[i] = [i]; }
// 将另一个数据的各个维度加在自身的维度上
void add(const Vector& other)
{ for (int i=0; i<size; i++)
coords[i] += [i]; }
// 释放数值的空间
~Vector()
{
if(coords)
delete[] coords;
size = 0; }};
// 聚类结构
struct

K-Means算法实现 来自淘豆网m.daumloan.com转载请标明出处.

相关文档 更多>>
非法内容举报中心
文档信息
  • 页数10
  • 收藏数0 收藏
  • 顶次数0
  • 上传人wh7422
  • 文件大小0 KB
  • 时间2015-05-31
最近更新