Вивчення параметрів за допомогою методу максимальної правдоподібності: дискретні моделі

Автор: Пользователь скрыл имя, 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

Файлы: 1 файл

zvit.doc

— 2.10 Мб (Скачать)

 

 

 

 

  1. Програмна реалізація наївної байєсівської моделі

 

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 ConcatenateTextOfAllDocsInClass(D , c)

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. Вікно  програми.

 

      1. Інструкція користувачеві

 

Для того щоб занести  дані до класу потрібно в перше  поле ввести текс і натиснути кнопку «Додати тексти до класу» Виконання даної операції показано рис.11.

Рис.11. Занесення даних  до класу.

Для визначення класу  тексту потрібно, текст який буде класифікуватися  ввести у поле «Введіть будь ласка  текст»  і натиснути кнопку «Класифікувати текст» у полі висновок класифікації виведе належить чи не належить текст  до даного класу.

                                                Рис.12. Класифікація тексту.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Висновок

 

 

       

Ми ще не знаємо, як зробити  комп'ютери які навчаються так само як навчаються люди. Проте вже придумані алгоритми, які ефективні для деяких завдань навчання, і з'являється теоретичне обгрунтування цього. Багато практичних комп'ютерних програм і важливих комерційних застосувань розвиваються для представлення найбільш поширених видів навчання. Для таких завдань як розпізнавання мови, методи машинного навчання підходять краще, ніж інші спроби обробки даних. У такій області як data mining, алгоритми машинного навчання використовуються, як правило, в знаходженні корисних знань з великих баз даних, що містять різного роду інформацію (фінансові угоди, медичні записи, звіти, і т.д.).

Таким чином, наше розуміння  і знання комп'ютерів продовжує поглиблюватися і вдосконалюватися, і це означає, що неминуче машинне навчання буде відігравати все більш централізовану роль у комп'ютерних науках та сучасних технологіях.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Список використаних джерел

1. Литвин В. В., Пасічник В. В., Яцишин Ю. В. Інтелектуальні системи: Підручник – Львів: “Новий світ – 2000”, 2011. – 406 с.

2. Манинг К.Д., Рагхаван П., Шютце Х. Введение в иформационный поиск: Пер. с англ. —Москва: “Вильямс”, 2011. – 520 с.

3. Франчук Н.П. Стан  та перспективи технологій машинного  перекладу тексту// Теорія та методика  електронного навчання: збірник  наукових праць. – Кривий Ріг  : Видавничий відділ НМетАУ, 2012. – 325 С. 

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::InteropServices;

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::TextBox^  textBox1;

protected:

private: System::Windows::Forms::Button^  button1;

private: System::Windows::Forms::Button^  button2;

private: System::Windows::Forms::Label^  label1;

private: System::Windows::Forms::TextBox^  textBox2;

private: System::Windows::Forms::Label^  label2;

private: System::Windows::Forms::Label^  label3;

private: System::Windows::Forms::Label^  label4;

 

private:

/// <summary>

/// Required designer variable.

/// </summary>

System::ComponentModel::Container ^components;

 

#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::TextBox());

this->button1 = (gcnew System::Windows::Forms::Button());

this->button2 = (gcnew System::Windows::Forms::Button());

this->label1 = (gcnew System::Windows::Forms::Label());

this->textBox2 = (gcnew System::Windows::Forms::TextBox());

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::FromArgb(static_cast<System::Int32>(static_cast<System::Byte>(0)), static_cast<System::Int32>(static_cast<System::Byte>(64)),

static_cast<System::Int32>(static_cast<System::Byte>(0)));

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->UseVisualStyleBackColor = true;

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->UseVisualStyleBackColor = true;

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::DarkRed;

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::AutoScaleMode::Font;

this->ClientSize = System::Drawing::Size(284, 262);

this->Controls->Add(this->label4);

this->Controls->Add(this->label3);

this->Controls->Add(this->label2);

this->Controls->Add(this->textBox2);

this->Controls->Add(this->label1);

this->Controls->Add(this->button2);

this->Controls->Add(this->button1);

this->Controls->Add(this->textBox1);

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::StringToHGlobalAnsi(mass[0]).ToPointer();

   String^ str  = gcnew String (str2);

              label3->Text=str;

}

private: System::Void label3_Click(System::Object^  sender, System::EventArgs^  e) {

}

};

}

 

 

 


Информация о работе Вивчення параметрів за допомогою методу максимальної правдоподібності: дискретні моделі