зелень / 5лаба
.docМинистерство образования и науки,молодежи и спорта Украины
Государственное высшее учебное заведение Украинский государственный химики-технологический университет
Лабораторная работа №5 «Кластеризация»
Выполнила
ст.группы 4-CKC-5 Пономарёв В.Н. Проверили: Зеленцов Д.Г Новикова Л.В.
Днепропетровск 2012
14. Провести кластеризацию образцов на три кластера:
; ; ; ; ; ; ; ; .
Начальное значение весов: . Норма обучения k = 0,4. В качестве меры приближения принять расстояние между точками.
Код программы:
#include <iostream.h>
#include <conio.h>
#include <math.h>
float Fun( float x1[3], float W[3][3]);
float x1[3]={0.1,0.3-0.4 },x2[3]={0.5,-1.1, 0.7},x3[3]={-0.1,0.5,1.2};
float x4[3]={0.5,1.3, -0.3 },x5[3]={-0.5,-1.1,-0.3},x6[3]={-0.3, 0.3, 0.3};
float x7[3]={-0.5,0.6,-1.3}, x8[3]={0.6, 1.0, 0.7},x9[3]={-0.2, -1.0,-0.4};
float W[3][3]={0.3, 0.2, -0.3, 0.1, -0.1, 0.2, 0.4, 0.3, 0.1};
float d[3];
void main()
{
clrscr();
for ( int e=0; e<6; e++)
{
W[3][3]=Fun(x1,W);
W[3][3]=Fun(x2,W);
W[3][3]=Fun(x3,W);
W[3][3]=Fun(x4,W);
W[3][3]=Fun(x5,W);
W[3][3]=Fun(x6,W);
W[3][3]=Fun(x7,W);
W[3][3]=Fun(x8,W);
W[3][3]=Fun(x9,W);
for (int i=0; i<3; i++)
{{for (int j=0; j<3;j++)
cout<<W[i][j]<<" ";
}
cout<<endl;}
cout<<endl;}
getch();
}
float Fun(float x1[3], float W[3][3])
{
for ( int i=0; i<3; i++)
{ for (int j=0; j<3;j++)
d[i]+=pow((x1[j]-W[j][i]),2);
}
float min=99;
int ind=0;
for ( i=0; i<3; i++)
{
if (d[i]<min)
{
min=d[i];
ind=i;
}
}
for (int j=0; j<3;j++)
{
W[j][ind]=W[j][ind]+0.3*(x1[j]-W[j][ind]);
}
return (W[3][3]);
}
Результат: