⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 kmean.cpp

📁 模式识别算法 k均值和感知器算法的具体实现实例
💻 CPP
字号:
// kmean.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"


#include <stdio.h>

#include <math.h>



typedef struct sample

{

	float x;

	float y;

} SAMPLE;



float distance(SAMPLE a,SAMPLE b)

{

	float d;

	float a1=a.x, a2=a.y;

	float b1=b.x, b2=b.y;

	d=sqrt((a1-b1)*(a1-b1)+(a2-b2)*(a2-b2));

	return d;

}



void main()

{

	SAMPLE point[20]={{0,0},{1,0},{0,1},{1,1},{2,1},{1,2},{2,2},{3,2},{6,6},{7,6},{8,6},{6,7},{7,7},{8,7},{9,7},{7,8},{8,8},{9,8},{8,9},{9,9}};

	SAMPLE center[2];

	SAMPLE newcenter[2];

	int i;

	int flag[20];

	int N[2];



	center[0]=point[0];

	center[1]=point[9];



	/*for(i=0;i<20;i++)

	  printf("(%f,%f)\t",point[i].x,point[i].y);

	printf("\n(%f,%f)\t",center[0].x,center[0].y);

	printf("\n(%f,%f)\t",center[1].x,center[1].y);*/



	while(1)

	{

		N[0]=0; N[1]=0;

		for(i=0;i<20;i++)

		{

			if(distance(point[i],center[0])<=distance(point[i],center[1])) { flag[i]=0; N[0]++; }

			else { flag[i]=1; N[1]++; }

		}



		newcenter[0].x=0; newcenter[0].y=0;

		newcenter[1].x=0; newcenter[1].y=0;

		for(i=0;i<20;i++)
        {

			if(!flag[i])
			{
				newcenter[0].x=newcenter[0].x+point[i].x;

				newcenter[0].y=newcenter[0].y+point[i].y;
			}
			else
			{
				newcenter[1].x=newcenter[1].x+point[i].x;

				newcenter[1].y=newcenter[1].y+point[i].y;
			}

		}

		newcenter[0].x=newcenter[0].x/N[0];

		newcenter[0].y=newcenter[0].y/N[0];

		newcenter[1].x=newcenter[1].x/N[1];

		newcenter[1].y=newcenter[1].y/N[1];



		if((newcenter[0].x==center[0].x)&&(newcenter[0].y==center[0].y)&&(newcenter[1].x==center[1].x)&&(newcenter[1].y==center[1].y))

			break;



		center[0]=newcenter[0];

		center[1]=newcenter[1];



		/*printf("center[0]=(%f,%f)\n",center[0].x,center[0].y);

		printf("center[1]=(%f,%f)\n",center[1].x,center[1].y);*/

	}



	printf("the first class:\n");

	for(i=0;i<20;i++)

	{

		if(flag[i]==0)

			printf("point[%d]=(%f,%f)\n",i,point[i].x,point[i].y);

	}

	printf("the class center is (%f,%f)\n",center[0].x,center[0].y);

	printf("\n");

	printf("the secend class:\n");

	for(i=0;i<20;i++)

	{

		if(flag[i]==1)

			printf("point[%d]=(%f,%f)\n",i,point[i].x,point[i].y);

	}

	printf("the class center is (%f,%f)\n",center[1].x,center[1].y);

}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -