用C#实现k均值聚类算法.doc_第1页
用C#实现k均值聚类算法.doc_第2页
用C#实现k均值聚类算法.doc_第3页
用C#实现k均值聚类算法.doc_第4页
用C#实现k均值聚类算法.doc_第5页
免费预览已结束,剩余1页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

用C#实现k均值聚类算法 k均值算法是模式识别的聚分类问题,这是用C#实现其算法以下是程序源代码:using System;using System.Drawing;using System.Collections;using System.ComponentModel;using System.Windows.Forms;using System.Data;namespace KMean_win / / Form1 的摘要说明。 / public class Form1 : System.Windows.Forms.Form / / 必需的设计器变量。 / private System.ComponentModel.Container components = null; private static int k = 2; /类数,此例题为2类 private static int total = 20; /点个数 private int test = 0; private PointF unknown = new PointFtotal; /点数组 private int type = new inttotal; /每个点暂时的类 public PointF z = new PointFk; /保存新的聚类中心 public PointF z0 = new PointFk; /保存上一次的聚类中心 private PointF sum; private int temp = 0; private System.Windows.Forms.TextBox textBox1; private int l = 0; /迭代次数/构造函数,初始化 public Form1() unknown0=new Point(0,0); unknown1=new Point(1,0); unknown2=new Point(0,1); unknown3=new Point(1,1); unknown4=new Point(2,1); unknown5=new Point(1,2); unknown6=new Point(2,2); unknown7=new Point(3,2); unknown8=new Point(6,6); unknown9=new Point(7,6); unknown10=new Point(8,6); unknown11=new Point(6,7); unknown12=new Point(7,7); unknown13=new Point(8,7); unknown14=new Point(9,7); unknown15=new Point(7,8); unknown16=new Point(8,8); unknown17=new Point(9,8); unknown18=new Point(8,9); unknown19=new Point(9,9); InitializeComponent(); test = 0; /选k个初始聚类中心 zi for(int i=0;iK;I+) zi = unknowni; for(int i=0;iTOTAL;I+) typei = 0; /计算新的聚类中心 public PointF newCenter(int m) int N = 0; for(int i=0;iTOTAL;I+) if(typei = m) sum.X = unknowni.X+sum.X; sum.Y = unknowni.Y+sum.Y; N += 1; sum.X=sum.X/N; sum.Y=sum.Y/N; return sum; /比较两个聚类中心的是否相等 private bool compare(PointF a,PointF b) if(int)(a.X*10) = (int)(b.X*10) & (int)(a.X*10) = (int)(b.X*10) return true; else return false; /进行迭代,对total个样本根据聚类中心进行分类 private void order() int temp = 0;/记录unknowni暂时在哪个类中 for(int i=0;iTOTAL;I+) for(int j=0;j distance(unknowni,zj) temp = j; typei = temp; Console.WriteLine(经比较后,0归为1类,unknowni,temp); /计算两个点的欧式距离 private float distance(PointF p1,PointF p2) return(p1.X-p2.X)*(p1.X-p2.X)+ (p1.Y-p2.Y)*(p1.Y-p2.Y); / / 清理所有正在使用的资源。 / protected override void Dispose( bool disposing ) if( disposing ) if (components != null) components.Dispose(); base.Dispose( disposing ); /程序结构 public void main() Console.WriteLine(共有如下个未知样本:); for(int i=0;iTOTAL;I+) Console.WriteLine(unknowni); /* for(int i=0;iK;I+) Console.WriteLine(初始时,第0类中心1,i,zi); order(); for(int i=0;iK;I+) zi = newCenter(i); Console.WriteLine(第0类新中心1,i,zi); if(zi.Equals(z0i) ) test = test+1; else z0i = zi; */ for(int i=0;iK;I+) Console.WriteLine(初始时,第0类中心1,i,zi); while( test!=k ) order(); for(int i=0;iK;I+) zi = newCenter(i); Console.WriteLine(第0类新中心1,i,zi); if(compare(zi,z0i) test = test+1; else z0i = zi; l = l+1; Console.WriteLine(*已完成第0次迭代*,l); Console.Write(0,分类后:); for(int j=0;jK;J+) Console.Write(第0类有:,j); for(int i=0;iTOTAL;I+) if(typei = j) Console.WriteLine(0,1,unknowni.X,unknowni.Y); #region Windows 窗体设计器生成的代码 / / 设计器支持所需的方法 - 不要使用代码编辑器修改 / 此方法的内容。 / private void InitializeComponent() this.textBox1 = new System.Windows.Forms.TextBox(); this.SuspendLayout(); / / textBox1 / this.textBox1.Location = new System.Drawing.Point(0, 0); this.textBox1.Multiline = true; this.textBox1.Name = textBox1; this.textBox1.ScrollBars = System.Windows.Forms.ScrollBars.Vertical; this.textBox1.Size = new System.Drawing.Size(296, 272); this.textBox1.TabIndex = 0; this.textBox1.Text = ; / / Form1 / this.AutoScaleBaseSize = new System.Drawing.Size(6, 14); this.ClientSize = new System.Drawing.Size(292, 271); this.Controls.Add(this.textBox1); this.Name = Fo

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论