МІНІСТЕРСТВО ОСВІТИ І НАУКИ УКРАЇНИ
НАЦІОНАЛЬНИЙ УНІВЕРСИТЕТ “ЛЬВІВСЬКА ПОЛІТЕХНІКА”
іНСТИТУТ КОМП’ютерних НАУК
та ІНФОРМАЦІЙНИХ ТЕХНОЛОГІЙ
Кафедра “Системи автоматизованого проектування”
ЗВІТ
до лабораторної роботи №5
на тему
«ДОСЛІДЖЕННЯ АЛГОРИТМІВ РОЗПІЗНАВАННЯ ОБРАЗІВ.Задача визначення КОЕФІЦІЄНТІВ ЛРФ для двох множин образів»
з курсу
«Системи штучного інтелекту»
Виконав: ст. гр. КН.-3
Львів-2008
1.Мета роботи
Вивчити принципи алгоритмів побудови лінійних рішаючих функцій для двох класів.
Написати програму реалізації алгоритму з графічним інтерфейсом користувача.
Короткі теоретичні відомості
Окремі предмети і явища оточуючого нас світу, котрі необхідно розпізнати, володіють спільними властивостями і мають деякі відмінні властивості. Стосовно властивостей, якими володіють предмети і явища вони поділяються на класи.
Класом або образом можна назвати множину предметів або об'єктів, які мають деякі спільні властивості. Як правило в предметній області існує деякий набір (алфавіт) класів, який позначається наступним чином:
, де - окремий клас, m - кількість класів
Якщо m=1, проблеми розпізнавання немає, оскільки існує один клас, до якого входять всі об'єкти.
При m=2 має місце дихотомічне розпізнавання образів.
При принципово розпізнати образ неможливо.
Кожен клас об'єктів може бути представлений деякою кількістю конкретних об'єктів або реалізацій. Сукупність різних реалізацій для всіх класів утворює множину можливих реалізацій.
В цю множину реалізацій ввійшли всі об'єкти, які належать до кожного класу . Звідси і виникла умова .
При введенні поняття "клас" ми сказали, що до класу відносяться об'єкти, які мають певні спільні властивості. Вони називаються ознакою класу.
Якщо вважати, що всі класи характеризуються однією і тією ж кількістю ознак , тоді сукупність ознак для заданого алфавіту класів можна записати наступний вектор ознак:
Практично числові значення ознак змінюються в деяких межах:
- будь-яка ознака може приймати властивий їй діапазон значень.
Текст програми
#include <stdio.h>
#include <conio.h>
int x1[3]={10,6,1},x2[3]={14,2,1},z,i;
long dx1,dx2,W[3]={0,0,0};
korekcija(int m)
{
if(m==1) {W[0]=W[0]+x1[0];W[1]=W[1]+x1[1];W[2]=W[2]+x1[2];}
if(m==2) {W[0]=W[0]-x2[0];W[1]=W[1]-x2[1];W[2]=W[2]-x2[2];}
i++;
}
void main()
{
clrscr();
i=1;
printf("Uvedit' x1(x,y): ");scanf("%d%d",x1[0],x1[1]);
printf("Uvedit' x2(x,y): ");scanf("%d%d",x2[0],x2[1]);
printf("\n Iteracija N %d\n",i);
do
{
z=0;
k1:dx1=W[0]*x1[0]+W[1]*x1[1]+W[2]*x1[2];
printf("\nD[x1]=%3d ",dx1);
if(dx1<=0) {printf("- Potribna korekcija\n");korekcija(1);printf("\n Iteracija N %d\n",i);z=1;goto k1;}
k2:dx2=W[0]*x2[0]+W[1]*x2[1]+W[2]*x2[2];
printf("\nD[x2]=%3d ",dx2);
if(dx2>=0) {printf("- Potribna korekcija");korekcija(2);printf("\n Iteracija N %d\n",i);z=1;goto k2;}
getch();
}while(z==1);
printf("\n |%3d|\n",W[0]);
printf("W=|%3d|\n",W[1]);
printf(" |%3d|\n",W[2]);
getch();
}
Результати виконання програми
Uvedit' x1(x,y): 10 6
Uvedit' x2(x,y): 14 2
Iteracija N 1
D[x1]= 0 - Potribna korekcija
Iteracija N 2
D[x1]=137
D[x2]=153 - Potribna korekcija
Iteracija N 3
D[x2]=-48
D[x1]=-16 - Potribna korekcija
Iteracija N 4
D[x1]=121
D[x2]=105 - Potribna korekcija
Iteracija N 5
D[x2]=-96
D[x1]=-32 - Potribna korekcija
Iteracija N 6
D[x1]=105
D[x2]= 57 - Potribna korekcija
Iteracija N 7
D[x2]=-144
D[x1]=-48 - Potribna korekcija
Iteracija N 8
D[x1]= 89
D[x2]= 9 - Potribna korekcija
Iteracija N 9
D[x2]=-192
D[x1]=-64 - Potribna korekcija
Iteracija N 10
D[x1]= 73
D[x2]=-39
D[x1]= 73
D[x2]=-39
| -6|
W=| 22|
| 1|
Висновки
На цій лабораторній роботі я вивчив принципи алгоритмів побудови лінійних рішаючих функцій для двох класів.
Написав програму реалізації алгоритму з графічним інтерфейсом користувача.