Вештачка невронска мрежа

Вештачка невронска мрежа - ВНМ (анг. artificial neural network - ANN[1]) е парадигма за обработка на информации која е инспирирана од начинот на кој биолошки нервен систем, како што е мозокот, обработува информации. Клучниот елемент на оваа парадигма е необичната структура на обработувачки информациски систем. Таа е составена од голем број на меѓусебно поврзани елементи за обработка (неврони), кои работат едногласно за да се решат конкретни проблеми.

Пример за вештачка невронска мрежа

Поим за невронска мрежа

уреди

Вештачката невронска мрежае систем кој е заснован на биолошките невронски мрежи, како што е мозокот. Невроните меѓусебно се поврзани со врски кои се нарекуваат синапси. Секој неврон поседува илјадници врски со други неврони преку кои константно добива сигнали што треба да бидат стигнат до телото на клетката (невронот). Доколку резултантната сума од сигналите надмине одреден дефиниран праг (threshold), преку аксонот се испраќа одговор. Тоа значи дека биолошкиот неврон ги сумира сигналите кои пристигнуваат до него, добиената сума ја споредува со одреден праг и доколку таа го надмине прагот, невронот испраќа одреден излезен сигнал.[2][3]

Невронските мрежи со својата извонредна можност за изведување смисла од комплицирани или непрецизни податоци, може да се користат за да се изведат шаблони и да се детектираат трендовите кои се премногу комплексни за да бидат забележани од страна на луѓето или други сметачки техники. Обучена невронска мрежа може да се смета за експерт во категоријата на информациите што и се дадени да се анализираат. Овој експерт потоа може да се користи за да обезбеди прогнози при дадени ситуации во доменот на нашиот интерес, и да одговори на прашања од видот „што ако...?“.

Другите предности вклучуваат:

  • Адаптивно учење - способноста да се научи како да се изведат задачи врз основа на податоци дадени за обука или првично искуство;
  • Сопствена организација - вештачката невронска мрежа може да создава сопствена организација или претстава на информациите што ги добива во текот на времето за учење;
  • Операции во реално време - пресметките може да се извршуваат паралелно;
  • Толеранција на грешки преку кодирање на излишни информации (redundant information coding) - делумното унишување на мрежата води кон соодветна деградација на делотворноста, но сепак некои способности може да се задржат дури и при големо оштетување на мрежата.

Состојба на активација

уреди

Аналогно на биолошката интерпретација, невронската мрежа во контекст на експертните системи претставува модел на пресметки со поврзовен пристап, кој соодветно се состои од множество на обработувачки единки - неврони.

Главна одлика на невронските мрежи е состојбата на активација. Состојбата на активација во потесна смисла го претставува излезот од даден јазол, а во поширока означува дали влезот на јазелот бил над граничната вредност, односно дали невронот се активирал. Заради меѓуповрзаноста, во невронските мрежи имаме правило на пропагација кое пропишува колку излезот на даден јазол зависи од индиректните влезови во тој јазол.

Во структурна смисла, невронската мрежа се состои од:

  • Множество на обработувачки единици (неврони, јазли);
  • Состојбата на активација yk за секоја единка, која е еквивалентна на излезот од единката;
  • Врски помеѓу единките, при што вообичаено секоја врска е дефинирана со тежина wjk која го одредува ефектот (влијанието) кое го има единката j на единката k;
  • Правило на пропагација, кое го одредува делотворниот излез на единка од неговите надворешни влезови;
  • Функција на активација Fk, која ја редефинира состојбата на активација врз основа на делотворниот влез (t) и актуелната активација yk(t), т.е. дава нова вредност на состојбата на активација;
  • Надворешен влез (bias или офсет) за секоја единка;
  • Метода за прибирање на информациите (правило на учење);
  • Средина во која системот ќе дејствува, обезбедување на влезни сигнали и ако е потребно, сигнали за грешка.

Секоја единка извршува релативно едноставна задача: добива влез од соседите или од надворешни извори и го користи ова за да пресмета излезен сигнал кој понатаму се шири (пренесува) до останатите единки. Освен оваа обработка, втора задача на невронот е поставување на тежините. Системот е паралелен, така да повеќе единки може да ги вршат своите пресметки во исто време.

Во рамките на невронските мрежи, разликува три типа на јазли:

  • влезни јазли - кои ги примаат сигналите,
  • излезни јазли - кои ги испраќаат податоците надвор од системот, и
  • скриени јазли - чии влезни и излезни сигнали остануваат внатре во мрежата. Тие се користат само за внатрешна модификација на мрежата.

За време на операциите, јазлите може да се обновуваат синхроно или асинхроно. Кај синхроното обновување сите јазли ја обновуваат својата активација истовремено, додека кај асинхроните, секоја јазол има своја (вообичаено фиксна) веројатност на обнова за време t, и вообичаено само една единка ќе може да изврши активација во единица време.

Топологии на невронски мрежи

уреди

Разликуваме два типа на топологии на невронски мрежи:

  1. Еднонасочни мрежи (feedforward)[4] - Тука патеката на податоците од влезните до излезните јазли е строго одредена. Обработката на податоците може да се прошири преку повеќе слоеви на јазли, меѓутоа нема повратни врски, односно нема врски од излезни до влезни јазли во исти или различни слоеви.
  2. Повратни мрежи (рекурентни) - Тоа се мрежи кои содржат повратни врски. За разлика од еднонасочните мрежи, тука динамичките својства на мрежата се важни. Во некои случаи, активациските вредности на јазлите подлежат на процес на релаксација, така да мрежата еволуира во стабилна состојба во која овие вредности повеќе нема да се менуваат. Во други промени, промената на активациските вредности на излезните јазли е значајна, така да динамичкото однесување го чини излезот на мрежата.

Невронски мрежи како класификатори

уреди

Невронските мрежи имаат одлики кои ги прават многу погодни за користење во експертните системи, заради нивните погодности за создавање на системи за класификација. Некои од тие одлики се:

  • можноста за паралелна, дистрибуирана обработка;
  • архитектурата на насочен тежински граф му овозможува да меморира промена на тежини и прагови, и автоматски да класифицира;
  • толерантноста на грешки и адаптибилноста, односно ако некои неврони не функционираат, останатите ќе се адаптираат.

Перцептрон

уреди

Перцептронот е вештачки неврон кој моделира биолошки неврон од природата. Тој добива n влезни сигнали кои соодветствуваат на бројот на својства (input features) од податочното множество кое се анализира, ги сумира тие влезни сигнали, го проверува резултатот (споредувајќи го со одреден праг) и според него произведува излезен сигнал. Перцептронот се состои од пондери (weights - wi), процесор на сума (s) и активациска функција (f(s)). На сигналите кои доаѓаат на влезот на перцептронот им се доделуваат пондери (weights) кои најчесто претставуваат реални броеви како и влезните сигнали, така што зборуваме за вкупно n „weighted inputs“, кои се влезни сигнали. Доколку првиот влезен сигнал го означиме со x1, а неговиот пондер со w1 додека i-тиот влезен сигнал е xi со пондер wi, тогаш последниот (n-ти) влезен сигнал е xn, а неговиот пондер е wn. Сумата на сите сигнали кои доаѓаат на влезот на перцептронот претставуваат збир од сите производи на xi и wi, каде вредноста на i се движи од 1 до n.[5][6]

S = Σwi × xi

Така добиената сума (S) се проследува како аргумент до активациска функција (f(s)) која врши проверка (споредба) на сумата со одреден праг (θ). Доколку сумата е поголема од прагот (θ), перцептронот на излезот испраќа сигнал 1, додека во обратен случај, кога сумата е помала или еднаква со прагот (θ,) излезниот сигнал на перцептронот е 0, иако во литературата може да се најдат објаснувања за перцептронот каде излезните сигнали се 1 или -1. Притоа, сигналот врши пропагација кон напред (forward propagation), доаѓајќи на влезот на перцептронот, каде се врши пресметка и се извршува активациската функција, за на крајот да биде произведен излезен сигнал.[3]

w1 × x1 + w2 × x2 + wn × xn > θ (излезен сингал = 1)
w1 × x1 + w2 × x2 + wn × xnθ (излезен сингал = 0)

Перцептрон на едно ниво

уреди

Перцептроните се наједноставните видови на еднонасочни мрежи. Најраните видови на невронски мрежи се мрежи со перцептрон на едно ниво, кој се состои од еден слој на излезни јазли, влезовите одат директно во излезите преку серија на врски со тежини. Сумата на производите на тежините и влезовите се пресметува во секој јазол, и доколку вредноста е над некој праг (вообичаено 0), јазолот се активира и зазема активирана вредност (вообичаено, 1), спротивно зема деактивирана вредност (типично -1). Неврони со ваков вид на активациска функција се нарекуваат МекКалок-Питс неврони или прагови-неврони. Перцептрон може да се создаде со користење на било кои вредности за активирана и декативирана вредност, сè додека вредноста за прагот лежи помеѓу овие две вредности. Повеќето перцептрони имаат излези 1 или -1 со праг 0, и има некакви докази дека таквите мрежи може да се обучуваат побрзо од мрежите создадени со други вредности за активација и деактивација. Перцептроните може да се обучуваат со едноставен алгоритам за учење што често се нарекува и делта-правило. Алгоритмот ги пресметува грешките помеѓу пресметаниот излез и излезот од примеркот на податоци и го користи тоа знаење за да ги постави пондерите, со тоа имплементирајќи форма на нивно постепено опаѓање.

Покрај влезните сигнали кои потекнуваат од својствата на податочното множество коригирани со одреден пондер, перцептронот најчесто добива и уште еден влезен сигнал, познат како „пристрасност“ (bias). Тој типично се третира само како уште еден влезен сигнал и на тој начин може да се додаде во сумата на влезни сигнали.[2][7] Перцептронот обично се користи при класификација на класи што може линеарно да се разделат (linearly separable) и најчесто се употребува при бинарна класификација, во која излезниот сигнал припаѓа на една од две можни класи. Во случај кога вредностите припаѓаат на една од двете класи кои се линеарно раздвојливи, тие физички можат да бидат одвоени со права линија. Во случаите каде постојат бесконечно многу прави кои физички можат да ги одвојат класите, која било права која целосно ги одвојува (perfect separation) е доволна за решавање на проблемот на класификација.[8] Активациските функции ги преведуваат влезните сигнали во излезни сигнали и притоа во процесот користат одреден праг на активација (threshold). Кај перцептронот се користат четири типови активациски функции: unit step (threshold), piecewise linear, сигмоид и Гаусова функција.[3]

Тренирање (учење) кај перцептронот

уреди

Доколку постојат n атрибути што опишуваат одреден ентитет од податочното множество наменето за учење, потребно е да се пронајдат n+1 пондери (n пондери + пристрасност) кои ќе бидат коефициенти во равенката на права, рамнина или хипер-рамнина која ги разделува ентитетите според класите на кои тие припаѓаат. При тренирањето на перцептронот треба да се пронајде бараната права/рамнина/хипер-рамнина која точно ќе подели две класи, на тој начин што се вршиме приспособување на пондерите и на пристрасноста. Перцептронот се тренира за да даде одговор на секој влезен вектор (сигнал) соодветен со посакуваната вредност од 0 или 1. Податочното множество кое се користи за тренинг најчесто има повеќе атрибути за дадениот случај, така што влезниот сигнал може да се гледа и како вектор кој претставува еднодимензионална низа. Доколку такво решение постои (доколку податоците се линеарно сепарабилни), теоријата за перцептронот вели дека тоа ќе биде пронајдено за конечен временски период.[3][7][8]

Учењето (тренирањето) на перцептронот се спроведува според следниов алгоритам:[3]

  • Иницијализација на сите пондери (пондерите првично се поставуваат на вредност 0 или пак на друга мала вредност, по случаен избор).
  • Избор на стапката на учење m (learning rate), најчесто некој мал број помеѓу 0 и 1.
  • Извршувај ги следниве чекори сè додека условот за завршување на тренингот не е исполнет (пронајдена е бараната права/рамнина/хипер-рамнина и грешката изнесува 0, или пак предефинираното време одредено за тренинг е истечено).
  • Помини ги сите случаи од податочното множество за тренинг (x, actual), каде x е вектор составен од сите атрибути на дадената инстанција, а actual е вистинскиот излез (класа) на дадениот случај кој е познат од податочното множество за тренинг
  • Пресметај го излезот при активација - предвидениот излез, кој е функција од пондерираниот збир на влезни сигнали x: output = f(w'x)
  • Примени го правилото за учење: 1) Најди ја грешката (error = output - actual); 2) Промени ја пристрасноста: b = b + m*error; 3) За сите i влезни сигнали: w(i) = w(i) + error*m*x(i)

Притоа, едно целосно изминување (итерација) на сите случаи од податочното множество за тренинг се нарекува „епоха“.

Според тоа, постапката за тренирање на перцептронот е таква што векторите од податочното множество за тренинг треба да бидат предадени на влезот на перцептронот, последователно еден по еден. Доколку сигналот кој се добива на излезот од перцептронот е точен (предвидениот резултат е ист со познатиот резултат од тренинг множеството), тогаш не се прават никакви промени. Во спротивно се применува „правилото за учење на перцептронот“ кое врши исправка на пондерите и на пристрасноста.[3] Тренингот е завршен кога за сите тренинг-вектори перцептронот ќе изврши точна класификација (нема да се појави грешка), или пак ќе истече времето (бројот на епохи) предвидено за тренинг. Кога е извршен тренингот на перцептронот, доколку на влезот се донесе тренинг-вектор (вектор од податочното множество за тренинг), тогаш на излезот ќе биде извршена точна класификација. Доколку, пак, се донесе нов вектор на влезот, кој не е дел од податочното множество за тренинг, мрежата се стреми кон тоа да изврши генерализација, одговарајќи со излезен сигнал, сличен на излезните сигнали добиени од тренинг-векторите кои се блиски со новиот, непознат вектор.[8]

Перцептрон на повеќе нивоа

уреди

Оваа класа на мрежи се состои од повеќе слоеви на пресметковни единки, вообичаено поврзани со еднонасочни врски. Секој неврон во еден слој има директна врска со неврон во следниот слој. Во многу апликации, единките на овие мрежи применуваат сигмоидна функција како активациска функција. Универзалната апроксимативна теорема за невронски мрежи тврди дека секоја функција која може да мапира R -> R може да биде приближно пресметана со перцептрон на повеќе нивоа со само еден скриен слој. Овој резултат се однесува само на одредени класи на активациски функции, како на пример, за сигмоидните функции.

Еднослојниот перцептрон (single layer perceptron, SLP) е линеарен класификатор. Оттука, ако класите не се линеарно сепарабилни, процесот на учење никогаш нема да достигне момент каде сите случаи се соодветно класифицирани. Во тој случај, доколку не постои услов за прекинување на процесот на учење (ограничување на бројот на итерациите), алгоритамот на перцептронот ќе се извршува бескрајно, бидејќи не постои решение на проблемот. Најпознат проблем кој ја прикажува неможноста на перцептронот да решава проблеми каде се сретнуваат класи кои не се линеарно сепарабилни, е проблемот на XOR. Имено, логичката XOR-порта на излезот ќе даде сигнал 1 само ако двата влезни сигнали се меѓусебно различни (0 и 1 или 1 и 0). Во спротивно (ако на влезот доаѓааат сигнали 0 и 0 или 1 и 1), излезниот сигнал на XOR-портата ќе биде 0. Тогаш е невозможно да се постави права која ќе ги одвои случаите според класата на која припаѓаат.[9] За решавање на проблемите од типот на XOR може да се искористи алгоритамот на повеќеслоен перцептрон (multi-layer perceptron) со пропагација на грешка кон назад (back-propagation).

Повеќеслојниот перцептрон ја има истата структура како и еднослојниот перцептрон, со таа разлика што има еден или повеќе скриени слоеви. Влезниот слој е составен од сигнали кои доаѓаат од податочното множество, додека пак секој јазел од скриениот и излезниот слој претставува посебен перцептрон. Карактеристично тука е што како активациска функција (activation/transformation function) се користи сигмоидната функција, наместо threshold-функцијата.[10][11] Процесот на активација кај секој јазол (перцептрон) е истиот како кај еднослојниот перцептрон, т.е. се користат влезните сигнали и нивните пондери за да се пресмета пондерираната сума која се предава на активациската функција. Истото се случува и кај јазлите од скриениот слој, кои добиваат сигнали од влезниот слој, додека пак излезните сигнали кои ги произведува скриениот слој претставуваат влезни сигнали за јазлите (јазолот) на излезниот слој.[9][12]

Пропагација кон назад (Backpropagation)

уреди

Кај назадното патување се користи грешката при излезот на излезниот слој (output error – разликата помеѓу предвидениот излез и саканиот излез), за да се поправи грешката на пондерите на влезните сигнали кај излезниот слој. Исправката се врши на пондерите на сигналите кои доаѓаат од скриениот слој и влегуваат во излезниот слој. Истата постапка се извршува понатаму кај секој од јазлите од скриениот слој, така што се пресметува грешката при излез и таа се користи за поправање на пондерите кои ги добиваат влезните сигнали. На тој начин, грешката шири низ слоевите движејќи се од излезниот слој кон влезниот слој. Сето тоа е овозможено со употребата на сигмоидната функција, како нелинеарна активациска функција која е диференцијабилна.[13]

Учење кај невронските мрежи

уреди

Учењето кај невронските мрежи вклучува модификација на тежините на врските според некое изменето правило. Главната идеја е тоа што ако јазлите ј и k се активни истовремено, нивната врска ојакнува. Учењето претставува пресликување од Х во Y и модификација на врските. Постојат два начина на модификација на врските во невронските мрежи:

  • учење под надзор / самонадзор - со користење на претходното знаење на проблемскиот домен, се поставуваат тежините на врските.
  • учење без надзор / самоорганизација - со обука на мрежата, таа да си ги менува врските според правилото на учење кое се спроведува од некој примерок на дадени решенија со влезови/излези од мрежата. Има сопствено претставување, нема претходно зададено знаење т.е. започнува со случајни вредности за тежините на врските.

Повратни мрежи

уреди

Кај повратните мрежи среќаваме дводимензионален податочен тек (јамки).

Џорданова мрежа

уреди

Едноставната повратна мрежа која е варијација на перцептронот на повеќе нивоа се нарекува Џорданова мрежа. Трислојна мрежа се добива со додавање на повратни врски од излезните единки до т.н. состојбени единки со фиксирана вредност на тежините на 1. Скриениот слој е поврзан со врските од овие единки. При секој чекор влезот се пренесува преку стандарден еднонасолен начин, и потоа се применува правилото за учење со обратно раширување (backpropagation). Фиксните повратни врски резултираат со одржување на копија од вредностите на претходните вредности од скриениот слој. Кај потполно повратна мрежа, секој неврон добива влез од секој друг неврон во мрежата. Овие мрежи не се ангажирани во слоеви. Вообичаено само подмножество на неврони добиваат надворешни влезови, а друго множество на неврони го репортира излезот надвор од мрежата и го враќа кон сите неврони. Овие влезови и излези ја изведуваат функцијата на влезни и излезни слоеви кај еднонасочните.

Елманова мрежа

уреди

Кај Елмановата мрежа повратните врски се решаваат исклучиво во скриените слоеви.

Хопфилдова мрежа

уреди

Хопфилдова мрежа е комплетно поврзана мрежа од N јазли, каде сите јазли се истовремено и влезни и излзени.

Библиографија

уреди
  • Проф. д-р Владимир Трајковиќ: „Експертни системи“, скрипта. ФЕИТ, УКИМ, Скопје, 2010.
  • Bar-Yam, Yaneer (2003). Dynamics of Complex Systems, Chapter 2 (PDF). Архивирано од изворникот (PDF) на 2011-11-28. Посетено на 2011-12-12.
  • Bar-Yam, Yaneer (2003). Dynamics of Complex Systems, Chapter 3 (PDF).
  • Bar-Yam, Yaneer (2005). Making Things Work. Please see Chapter 3
  • Bhadeshia H. K. D. H. (1999). „Neural Networks in Materials Science“ (PDF). ISIJ International. 39 (10): 966–979. doi:10.2355/isijinternational.39.966. Архивирано од изворникот (PDF) на 2013-01-19. Посетено на 2011-12-12.
  • Bishop, C.M. (1995) Neural Networks for Pattern Recognition, Oxford: Oxford University Press. ISBN 0-19-853849-9 (hardback) or ISBN 0-19-853864-2 (paperback)
  • Cybenko, G.V. (1989). Approximation by Superpositions of a Sigmoidal function, Mathematics of Control, Signals, and Systems, Vol. 2 pp. 303–314. electronic version Архивирано на 7 септември 2012 г.
  • Duda, R.O., Hart, P.E., Stork, D.G. (2001) Pattern classification (2nd edition), Wiley, ISBN 0-471-05669-3
  • Egmont-Petersen, M., de Ridder, D., Handels, H. (2002). „Image processing with neural networks - a review“. Pattern Recognition. 35 (10): 2279–2301. doi:10.1016/S0031-3203(01)00178-9.CS1-одржување: повеќе имиња: список на автори (link)
  • Gurney, K. (1997) An Introduction to Neural Networks London: Routledge. ISBN 1-85728-673-1 (hardback) or ISBN 1-85728-503-4 (paperback)
  • Haykin, S. (1999) Neural Networks: A Comprehensive Foundation, Prentice Hall, ISBN 0-13-273350-1
  • Fahlman, S, Lebiere, C (1991). The Cascade-Correlation Learning Architecture, created for National Science Foundation, Contract Number EET-8716324, and Defense Advanced Research Projects Agency (DOD), ARPA Order No. 4976 under Contract F33615-87-C-1499. electronic version Архивирано на 3 мај 2013 г.
  • Hertz, J., Palmer, R.G., Krogh. A.S. (1990) Introduction to the theory of neural computation, Perseus Books. ISBN 0-201-51560-1
  • Lawrence, Jeanette (1994) Introduction to Neural Networks, California Scientific Software Press. ISBN 1-883157-00-5
  • Masters, Timothy (1994) Signal and Image Processing with Neural Networks, John Wiley & Sons, Inc. ISBN 0-471-04963-8
  • Ness, Erik. 2005. SPIDA-Web Архивирано на 11 декември 2007 г.. Conservation in Practice 6(1):35-36. On the use of artificial neural networks in species taxonomy.
  • Ripley, Brian D. (1996) Pattern Recognition and Neural Networks, Cambridge
  • Siegelmann, H.T. and Sontag, E.D. (1994). Analog computation via neural networks, Theoretical Computer Science, v. 131, no. 2, pp. 331–360. electronic version Архивирано на 10 ноември 2011 г.
  • Sergios Theodoridis, Konstantinos Koutroumbas (2009) "Pattern Recognition", 4th Edition, Academic Press, ISBN 978-1-59749-272-0.
  • Smith, Murray (1993) Neural Networks for Statistical Modeling, Van Nostrand Reinhold, ISBN 0-442-01310-8
  • Wasserman, Philip (1993) Advanced Methods in Neural Computing, Van Nostrand Reinhold, ISBN 0-442-00461-3

Наводи

уреди
  1. Shah, Hardik. „A Full Overview of Artificial Neural Networks (ANN)“. learn.g2.com (англиски). Посетено на 2021-06-04.
  2. 2,0 2,1 C. M. Bishop, Neural networks for pattern recognition. Oxford University Press, 1995.
  3. 3,0 3,1 3,2 3,3 3,4 3,5 I. H. Witten, E. Frank, Data Mining: Practical machine learning tools and techniques. Morgan Kaufmann, 2005.
  4. Повеќекратна лиеарна регресија и вештачки невронски мрежи кај перовскитите Архивирано на 31 октомври 2020 г. - Институт за хемија, ПМФ
  5. K. Hornik, M, Stinchcombe, H. White (1989), „Multilayer feedforward networks are universal approximators“. Neural networks, 2(5), стр. 359-366.
  6. R. S. Michalski, J. G. Carbonell, T. M. Mitchell, (Eds.), Machine learning: An artificial intelligence approach. Springer Science & Business Media, 2013.
  7. 7,0 7,1 J. Han, J. M. Kamber, J. Pei, Data mining: concepts and techniques: concepts and techniques. Elsevier, 2011.
  8. 8,0 8,1 8,2 C. M. Bishop, Pattern recognition and machine learning. Springer, 2006.
  9. 9,0 9,1 I. H. Witten and E. Frank, Data Mining: Practical machine learning tools and techniques. Morgan Kaufmann, 2005.
  10. R. S. Michalski, J. G. Carbonell, and T. M. Mitchell (Eds.), Machine learning: An artificial intelligence approach. Springer Science & Business Media, 2013.
  11. S. Russell, and P. Norvig, Artificial intelligence: a modern approach, 1995.
  12. K. Hornik, M. Stinchcombe, and H. White, „Multilayer feedforward networks are universal approximators“, Neural networks, 2(5), 1989, pp. 359-366.
  13. J. Han, M. Kamber, and J. Pei, Data mining: concepts and techniques: concepts and techniques. Elsevier, 2011.