Автор: Пользователь скрыл имя, 02 Февраля 2013 в 17:58, курсовая работа
Перед комп’ютером ставиться наступна задача. Є безліч об'єктів (ситуацій) і безліч можливих відповідей (відгуків, реакцій). Існує деяка залежність між відповідями і об'єктами, але вона невідома. Відома тільки кінцева сукупність прецедентів - пар «об'єкт, відповідь»,так звана навчальна вибірка. На основі цих даних потрібно відновити залежність, тобто побудувати алгоритм, здатний для будь-якого об'єкта видати досить точну відповідь. Для вимірювання точності відповідей певним чином вводиться функціонал якості.
Дана постановка є узагальненням класичних задач апроксимації функцій. У класичних задачах апроксимацій об'єктами є дійсні числа або вектори. У реальних прикладних задачах вхідні дані про об'єкти можуть бути неповними, неточними, нечисловими, різнорідними. Ці особливості призводять до великої різноманітності методів машинного навчання.
Вступ……………………………………………………………………………………….3
1. Вивчення параметрів за допомогою методу максимальної правдоподібності:
дискретні моделі……………………………………………………..…………….4
2. Наївні Байєсівські моделі………………………………………………………...7
3. Нейронні мережі…………………………………………………………………..10
3.1. Структура нейронних мереж………………………………………...13
3.2. Багатошарові нейронні мережі з прямим розповсюдженням….......17
3.3. Визначення в процесі навчання структур нейронних мереж…….....20
3.4. Практичний приклад: розпізнавання рукописних ЦИФР………….21
4. Програмна реалізація наївної байєсівської моделі……………………………24
4.1. Алгоритм навчання………………………………………………….24
4.2. Опис програми……………………………………………………….24
3. Інструкція користувачеві………………………………………….......25
Висновок………………………………………………………………………………..27
Список використаних джерел…………………………………………………………..28
Додаток…………………………………………………………………………………...29
4.1. Алгоритм навчання
Алгоритм навчання в псевдокоді представлено далі:
TrainMultinomialNB( C , D )
1 V ExtractVocabulary(D )
2 N CountDocs(D )
3 for each c C
4 do Nc CountDocsInClass(D , c)
5 prior[c] =Nc/N
6
textc
ConcatenateTextOfAllDocsInClas
7 for each t V
8 do Tct CountTokensOfTerm(textc, t)
9 for each t V
10 do
[t][c]
11 return V, prior, condprob
Алгоритм класифікації:
ApplyMultinomialNB( C ,V, prior, condprob, d)
1 W ExtractTokensFromDoc(V, d)
2 for each c C
3 do score[c] log prior[c]
4 for each t W
5 do score[c]+=log condprob[t][c]
6 return score[c]
4.2. Опис програми
Програма написана в Visual Studio 2010 із використанням Windows Forms Application.Вона працює під операційною системою Windows XP/7/8. Вікно програми має наступний вигляд(рис.10). Перше поле призначене для запису нового речення із класу, ці дані записуються у текстовий файл яки створений у папці із проектом програми. Друге поле призначене для введення тексту який треба класифікувати. Внизу виводиться висновок чи належить текст до заданого класу чи ні.
Рис. 10. Вікно програми.
Для того щоб занести дані до класу потрібно в перше поле ввести текс і натиснути кнопку «Додати тексти до класу» Виконання даної операції показано рис.11.
Рис.11. Занесення даних до класу.
Для визначення класу тексту потрібно, текст який буде класифікуватися ввести у поле «Введіть будь ласка текст» і натиснути кнопку «Класифікувати текст» у полі висновок класифікації виведе належить чи не належить текст до даного класу.
Висновок
Ми ще не знаємо, як зробити комп'ютери які навчаються так само як навчаються люди. Проте вже придумані алгоритми, які ефективні для деяких завдань навчання, і з'являється теоретичне обгрунтування цього. Багато практичних комп'ютерних програм і важливих комерційних застосувань розвиваються для представлення найбільш поширених видів навчання. Для таких завдань як розпізнавання мови, методи машинного навчання підходять краще, ніж інші спроби обробки даних. У такій області як data mining, алгоритми машинного навчання використовуються, як правило, в знаходженні корисних знань з великих баз даних, що містять різного роду інформацію (фінансові угоди, медичні записи, звіти, і т.д.).
Таким чином, наше розуміння
і знання комп'ютерів продовжує поглиблюватися
і вдосконалюватися, і це означає,
що неминуче машинне навчання буде
відігравати все більш
Список використаних джерел
1. Литвин В. В., Пасічник В. В., Яцишин Ю. В. Інтелектуальні системи: Підручник – Львів: “Новий світ – 2000”, 2011. – 406 с.
2. Манинг К.Д., Рагхаван П., Шютце Х. Введение в иформационный поиск: Пер. с англ. —Москва: “Вильямс”, 2011. – 520 с.
3. Франчук Н.П. Стан
та перспективи технологій
4. Рассел С. Норвиг П. Рассел, Искусственный интеллект: современный подход, 2-е изд..: Пер. с англ. — М. : Издательский дом "Вильямс", 2006. — 1408 с.
Додаток
#pragma once
#include <iostream>
#include <string.h>
#include <locale>
#define m 30
#define n 100
int count = 0;
char ch[n][m],stop_w[n][m];
int mas[m];
int k_w;
char study_m1[3][20] ;
char study_m2[3][20];
char study_m3[2][20] ;
char study_mNO[3][20];
int K_term = 6;
using namespace System;
using namespace System::Runtime::
using namespace System::IO;
void sel_word (char *c)
{ int j1=0;
int j=0,p=0,k=0,i1=0,y =0;
while(c[j]!='.')
{
if(c[j]=='_')
{ y=0;
for(i1=p;i1<j;i1++){
ch[j1][y] = c[i1]; y++;}
mas[j1]=y;
p=j+1;
j1++;
}
j++;
}
k_w=j1;
}
void stop_word ()
{
int tem =0;
for(int j=0;j<k_w;j++)
{
{
if(strcmp(ch[j],"and")==0 || strcmp(ch[j],"then")==0 || strcmp(ch[j],"or")==0){} else{
strcpy_s(stop_w[tem],ch[j]);
tem++;
}
}
}
}
int app (char *c)
{
int temp=0;
for(int i=0 ;i<3;i++)
if(strcmp(c,study_m1[i])==0) temp++;
for(int i=0 ;i<3;i++)
if(strcmp(c,study_m2[i])==0) temp++;
for(int i=0 ;i<2;i++)
if(strcmp(c,study_m3[i])==0) temp++;
return temp;
}
int appN (char *c)
{
int temp=0;
for(int i=0 ;i<3;i++)
if(strcmp(c,study_mNO[i])==0) temp++;
return temp;
}
namespace Kursova {
using namespace System;
using namespace System::ComponentModel;
using namespace System::Collections;
using namespace System::Windows::Forms;
using namespace System::Data;
using namespace System::Drawing;
/// <summary>
/// Summary for Form1
/// </summary>
public ref class Form1 : public System::Windows::Forms::Form
{
public:
Form1(void)
{
InitializeComponent();
//
//TODO: Add the constructor code here
//
}
protected:
/// <summary>
/// Clean up any resources being used.
/// </summary>
~Form1()
{
if (components)
{
delete components;
}
}
private: System::Windows::Forms::
protected:
private: System::Windows::Forms::
private: System::Windows::Forms::
private: System::Windows::Forms::Label^
private: System::Windows::Forms::
private: System::Windows::Forms::Label^
private: System::Windows::Forms::Label^
private: System::Windows::Forms::Label^
private:
/// <summary>
/// Required designer variable.
/// </summary>
System::ComponentModel::
#pragma region Windows Form Designer generated code
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
void InitializeComponent(void)
{
this->textBox1 = (gcnew System::Windows::Forms::
this->button1 = (gcnew System::Windows::Forms::
this->button2 = (gcnew System::Windows::Forms::
this->label1 = (gcnew System::Windows::Forms::Label(
this->textBox2 = (gcnew System::Windows::Forms::
this->label2 = (gcnew System::Windows::Forms::Label(
this->label3 = (gcnew System::Windows::Forms::Label(
this->label4 = (gcnew System::Windows::Forms::Label(
this->SuspendLayout();
//
// textBox1
//
this->textBox1->Location = System::Drawing::Point(13, 13);
this->textBox1->Name = L"textBox1";
this->textBox1->Size = System::Drawing::Size(259, 20);
this->textBox1->TabIndex = 0;
//
// button1
//
this->button1->ForeColor = System::Drawing::Color::
static_cast<System::Int32>(sta
this->button1->Location = System::Drawing::Point(68, 48);
this->button1->Name = L"button1";
this->button1->Size = System::Drawing::Size(140, 30);
this->button1->TabIndex = 1;
this->button1->Text = L"Додати текст до класу";
this->button1->
this->button1->Click += gcnew System::EventHandler(this, &Form1::button1_Click);
//
// button2
//
this->button2->Location = System::Drawing::Point(29, 194);
this->button2->Name = L"button2";
this->button2->Size = System::Drawing::Size(93, 56);
this->button2->TabIndex = 2;
this->button2->Text = L"Класифікувати текст";
this->button2->
this->button2->Click += gcnew System::EventHandler(this, &Form1::button2_Click);
//
// label1
//
this->label1->AutoSize = true;
this->label1->Location = System::Drawing::Point(48, 97);
this->label1->Name = L"label1";
this->label1->Size = System::Drawing::Size(176, 13);
this->label1->TabIndex = 3;
this->label1->Text = L"--------- Класифікакація тексту--------";
//
// textBox2
//
this->textBox2->Location = System::Drawing::Point(29, 155);
this->textBox2->Name = L"textBox2";
this->textBox2->Size = System::Drawing::Size(213, 20);
this->textBox2->TabIndex = 4;
//
// label2
//
this->label2->AutoSize = true;
this->label2->ForeColor = System::Drawing::Color::
this->label2->Location = System::Drawing::Point(29, 136);
this->label2->Name = L"label2";
this->label2->Size = System::Drawing::Size(132, 13);
this->label2->TabIndex = 5;
this->label2->Text = L"Введіть будьласка текст";
//
// label3
//
this->label3->AutoSize = true;
this->label3->Location = System::Drawing::Point(152, 216);
this->label3->Name = L"label3";
this->label3->Size = System::Drawing::Size(58, 13);
this->label3->TabIndex = 6;
this->label3->Text = L"Належить";
this->label3->Click += gcnew System::EventHandler(this, &Form1::label3_Click);
//
// label4
//
this->label4->AutoSize = true;
this->label4->Location = System::Drawing::Point(140, 194);
this->label4->Name = L"label4";
this->label4->Size = System::Drawing::Size(122, 13);
this->label4->TabIndex = 7;
this->label4->Text = L"Висновок класифікації";
//
// Form1
//
this->AutoScaleDimensions = System::Drawing::SizeF(6, 13);
this->AutoScaleMode = System::Windows::Forms::
this->ClientSize = System::Drawing::Size(284, 262);
this->Controls->Add(this->
this->Controls->Add(this->
this->Controls->Add(this->
this->Controls->Add(this->
this->Controls->Add(this->
this->Controls->Add(this->
this->Controls->Add(this->
this->Controls->Add(this->
this->Name = L"Form1";
this->Text = L"Form1";
this->Load += gcnew System::EventHandler(this, &Form1::Form1_Load);
this->ResumeLayout(false);
this->PerformLayout();
}
#pragma endregion
static array <String ^> ^mass = gcnew array<String ^> (50);
private: System::Void button1_Click(System::Object^ sender, System::EventArgs^ e) {
String^ fileName = "textfile.txt";
StreamWriter^ sw = gcnew StreamWriter(fileName,true);
sw->WriteLine(textBox1->Text);
sw->Close();
Console::WriteLine("a new file ('{0}') has been written", fileName);
}
private: System::Void Form1_Load(System::Object^ sender, System::EventArgs^ e) {
}
private: System::Void button2_Click(System::Object^ sender, System::EventArgs^ e) {
String^ fileName = "textfile.txt";
StreamReader^ din = File::OpenText(fileName);
count = 0;
while( (mass[count] = din->ReadLine()) != nullptr)
{
count++;
}
char* str2 = (char*)Marshal::
String^ str = gcnew String (str2);
label3->Text=str;
}
private: System::Void label3_Click(System::Object^ sender, System::EventArgs^ e) {
}
};
}