为了正常的体验网站,请在浏览器设置里面开启Javascript功能!

K值聚类算法

2011-10-25 5页 doc 33KB 25阅读

用户头像

is_194893

暂无简介

举报
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.Form...
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 PointF[total];  //点数组 private int[] type = new int[total];           //每个点暂时的类 public PointF[] z = new PointF[k];                 //保存新的聚类中心 public PointF[] z0 = new PointF[k];                //保存上一次的聚类中心 private PointF sum; private int temp = 0; private System.Windows.Forms.TextBox textBox1; private int l = 0;          //迭代次数 //构造,初始化 public Form1() { unknown[0]=new Point(0,0); unknown[1]=new Point(1,0); unknown[2]=new Point(0,1); unknown[3]=new Point(1,1); unknown[4]=new Point(2,1); unknown[5]=new Point(1,2); unknown[6]=new Point(2,2); unknown[7]=new Point(3,2); unknown[8]=new Point(6,6); unknown[9]=new Point(7,6); unknown[10]=new Point(8,6); unknown[11]=new Point(6,7); unknown[12]=new Point(7,7); unknown[13]=new Point(8,7); unknown[14]=new Point(9,7); unknown[15]=new Point(7,8); unknown[16]=new Point(8,8); unknown[17]=new Point(9,8); unknown[18]=new Point(8,9); unknown[19]=new Point(9,9); InitializeComponent(); test = 0; //选k个初始聚类中心    z[i]     for(int i=0;i z[i] = unknown[i]; for(int i=0;i type[i] = 0; } //计算新的聚类中心          public PointF newCenter(int m)          {               int N = 0;               for(int i=0;i               {                    if(type[i] == m)                    {                        sum.X = unknown[i].X+sum.X;                        sum.Y = unknown[i].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;//unknown[i]暂时在哪个类中               for(int i=0;i               {                    for(int j=0;j                    {                        if(distance(unknown[i],z[temp]) > distance(unknown[i],z[j]))                             temp = j;                    }                    type[i] = temp;                    Console.WriteLine("经比较后,{0}归为{1}类",unknown[i],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;i               {                    Console.WriteLine(unknown[i]);               } /*            for(int i=0;i                   Console.WriteLine("初始时,第{0}类中心{1}",i,z[i]);               order();               for(int i=0;i               {                    z[i] = newCenter(i);                    Console.WriteLine("第{0}类新中心{1}",i,z[i]);                    if(z[i].Equals(z0[i]) )                        test = test+1;                    else                        z0[i] = z[i];               } */            for(int i=0;i                   Console.WriteLine("初始时,第{0}类中心{1}",i,z[i]);               while( test!=k )               {                    order();                    for(int i=0;i                    {                        z[i] = newCenter(i);                        Console.WriteLine("第{0}类新中心{1}",i,z[i]);                        if(compare(z[i],z0[i]))                             test = test+1;                        else                             z0[i] = z[i];                    }                    l = l+1;                    Console.WriteLine("******已完成第{0}次迭代*******",l);                                  Console.Write("{0}","分类后:");               for(int j=0;j               {                    Console.Write("第{0}类有:",j);                    for(int i=0;i                    {                        if(type[i] == j)                             Console.WriteLine("{0},{1}",unknown[i].X,unknown[i].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 = "Form1";               this.Text = "Form1";               this.ResumeLayout(false);          }          #endregion      }      class entrance      {        ///          /// 应用程序的主入口点。          ///          [STAThread]          static void Main()          {                           Form1 my = new Form1();               my.main();               Application.Run(new Form1());          }      } }
/
本文档为【K值聚类算法】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。 本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。 网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。

历史搜索

    清空历史搜索