C 实现简单的K-means聚类算法C 实现简单的K-means聚类算法
C#实现简单的K-means聚类算法
namespace K_means
{
public class Kmeans
{
double[,] inPut;//数据
int k;//类别数
int Num;//文件数
int sub;//特征值数
int[] groupNum ;//各组数目
public Kmeans(double[,] input)
{
inPut = input;
Num = input.GetLength(0);
sub = ...
C 实现简单的K-means聚类算法
C#实现简单的K-means聚类算法
namespace K_means
{
public class Kmeans
{
double[,] inPut;//数据
int k;//类别数
int Num;//文件数
int sub;//特征值数
int[] groupNum ;//各组数目
public Kmeans(double[,] input)
{
inPut = input;
Num = input.GetLength(0);
sub = input.GetLength(1);
k = (int)Math.Sqrt(Num) + 1;
groupNum = new int[k];
}
public int[,] GetProcess()
{
double[,] tmpCenter = new double[k, sub];
for (int i = 0; i < k; i++)
for (int j = 0; j < sub; j++)
tmpCenter[i, j] = inPut[i, j];
double[,] preCenter = new double[k, sub];
int[,] resultP ;//= new int[k, Num];
while (true)
{
resultP = new int[k, Num];
#region //清空各组的数目
for (int i = 0; i < k; i++)
{
groupNum[i] = 0;
}
#endregion
#region //根据点到质心的距离,将点放到不同的
组中
for (int i = 0; i < Num; i++)
{
double tmpDis = 0.0;
int index = 0;
for (int j = 0; j < k; j++)
{
double tmpIn = 0.0;
for (int m = 0; m < sub; m++)
{
tmpIn += Math.Pow((inPut[i, m] -
tmpCenter[j, m]), 2);
}
if (j == 0)
{
tmpDis = tmpIn;
index = 0;
}
else
{
if (tmpDis > tmpIn)
{
tmpDis = tmpIn;
index = j;
}
}
}
int groupKnum = groupNum[index];
resultP[index, groupKnum] = i+1;
groupNum[index]++;
}
#endregion
#region //保存质心
for (int i = 0; i < k; i++)
for (int j = 0; j < sub; j++)
preCenter[i, j] = tmpCenter[i, j];
#endregion
#region //确定新质心
for (int i = 0; i < k; i++)
{
int kNum=groupNum[i];
if (kNum > 0)
{
for (int j = 0; j < sub; j++)
{
double tmp = 0.0;
for (int m = 0; m < kNum; m++)
{
int groupIndex = resultP[i,m]-1;
tmp += inPut[groupIndex, j];
}
tmpCenter[i, j] = tmp / kNum;
}
}
}
#endregion
#region //判断质心是否变化
bool judge = true;
for (int i = 0; i < k; i++)
{
for (int j = 0; j < sub; j++)
{
judge = judge && (preCenter[i,j]==tmpCenter[i,j]);
}
}
if (judge)
{
break;
}
#endregion
}
return resultP;
}
}
}
本文档为【C 实现简单的K-means聚类算法】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑,
图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。