Изграждане на интуиция и логика за клъстериране заедно с визуализация на алгоритъма K-Means върху набор от данни

Въведение

В предишни блогове („Запознаване със света на машинното обучение“) научихме за машинното обучение без надзор. За разлика от контролираното машинно обучение в това, ние идентифицираме точките от данни във връзка с други точки от данни, тъй като този тип алгоритъм за машинно обучение не използва етикетирани данни, както прави в контролираното машинно обучение. Ако имате нужда от повече разяснения по темата, опитайте да прочетете раздела „Неконтролирано машинно обучение“ на („Запознаване със света на машинното обучение“).

Машинно обучение без надзор

Неконтролираното машинно обучение се използва, когато трябва да открием основни скрити модели в „Немаркиран набор от данни“. Неконтролираното машинно обучение се класифицира допълнително в два раздела:

  1. Групиране — Групиране на подобни точки от данни за формиране на различни култури.
  2. Асоцииране — Намиране на важни връзки между точки от данни.

В този блог ще научим как работи клъстерирането и какви методологии можем да използваме, за да извършим клъстериране върху немаркирани данни.

Клъстеризиране

Да предположим, че ви е представена кошница, пълна с цветя, и кошницата може да съдържа произволен брой различни категории цветя. Например, кошницата може да съдържа 5 цветя от тип-1, 3 цветя от тип-2 и т.н. Уловката тук е, че имате превръзки на очите и не можете да видите и разграничите категориите цветя. Сега как бихте разграничили един вид цвете от другите?

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

Когато приключите, ще се окажете с различни култури. Това е клъстерирането, сравнявате една точка от данни по отношение на други точки от данни и образувате клъстер.

Топ алгоритми, базирани на клъстери

Има различни методологии за извършване на групиране върху немаркирани данни. Методът, който използвахте за разделяне на различни категории цветя със завързани очи, е една от методологиите. Подобно на това, може да има много начини за образуване на клъстери. В машинното обучение тези методологии са известни като алгоритми и има различни алгоритми за клъстериране като:

  1. K-означава групиране
  2. Средно Shift клъстериране
  3. DBSCAN
  4. EM с помощта на GMM
  5. Агломеративно йерархично групиране

В този блог ще разгледаме алгоритъма за групиране на K-Means.

K-означава групиране

Да предположим, че имате набор от данни, който съдържа характеристики на различни категории цветя. Все пак не знаете колко категории има и коя точка от данни към коя категория принадлежи, така че, за да намерим категориите, ние извършваме клъстериране на K-Means върху тях, за да научим повече от данните.

Всяка точка от данни представлява цветето с дадени подробности PetalLength и подробности PetalWidth на цветето и всяка точка от данни може да принадлежи към някаква категория цвете, за която не знаем.

Вижте изображенията по-долу. Това е диаграмата petalWidth VS petalLength на набора от данни за цветя.

В това всички сини точки представляват цвете въз основа на две характеристики, които са petalWidth и petalLength. Сега не знаем колко вида цветя има, тъй като всички точки от данни изглеждат еднакви с различни комбинации от дължина и ширина на венчелистчето.

Опитайте се да разберете коя точка от данни към коя категория принадлежи. Как бихте направили това?

Първото нещо, с което бихте искали да започнете, е да отговорите колко категории съдържат тези данни, защото без да знаете колко категории има, как бихте поставили данните в категории.

Сега да предположим, че ви казвам, че има 2 категории, които тези данни представляват, да речем A и B. Сега искам да намерите кои точки от данни могат да бъдат обединени, за да попаднат в категория A и кои биха попаднали в категория B, така че да отговоря на това , ще трябва да открием клъстерите и точната централна точка на клъстера, около която ще бъдат идентифицирани точките от данни, този център на клъстера се нарича центроид. (Ще научите това по-добре, докато напредвате в този блог).

И така, в клъстерирането на K-Means ние сме фокусирани върху намирането на две основни неща, които са-

  1. Колко клъстери има в данните — Има някои методологии за намиране на правилния брой клъстери в данните, като методите Elbow и Silhouette. Ще стигнем до тази част по-късно в този блог.
  2. Къде са формираните центроиди на клъстерите— Да предположим, че открием, че има x категории в нашите данни. Следващото нещо, което искаме да намерим, е къде се намират центровете на всички тези x клъстери и кои точки от данни попадат под кой клъстер.

Първо ще обясним второто. Ще научим за центроида на клъстерите и след това ще научим как да намерим правилния брой клъстери.

Да се ​​научим да формираме групи от нашите данни

Чрез изображението по-горе можем да предположим, че има два клъстера. Това обаче може да е погрешно и не можем просто да го познаем по случайност. По-късно ще научим как да бъдем математически сигурни.

За момента нека приемем, че първоначално има 2 клъстера в нашите данни, което означава, че всички наши точки от данни принадлежат към един от тези два клъстера.

Стъпка 1

Избираме произволно две точки от данни и приемаме, че са в центъра на клъстерите, които търсим. Ще изглежда нещо подобно-

В това приемаме, че центроидите ни сега са на [0,42372, 0,375] и [0,8305, 0,833]. Трябва да намерим коя от точките от данни принадлежи към кой от двата клъстера. Нека научим това в стъпка 2.

Стъпка 2

За да намерим принадлежността на точка от данни, намираме разстоянието между точката от данни и двата центроида на клъстера, центроидът на клъстера, който дава минималното разстояние, е клъстерът, към който принадлежи нашата точка от данни. Вижте изображението и обяснението по-долу:

Нека вземем точката, маркирана с жълто. Трябва да намерим към кой клъстер принадлежи тази точка. За да направим това, намираме разстоянието между точката и центъра на клъстера и това с минималното разстояние се избира като това, към което принадлежи нашата точка от данни. След като направим това, ще получим коя точка от данни принадлежи към кой клъстер върху всички точки от данни. Ще изглежда нещо подобно:

Сега сме идентифицирали коя точка от данни към кой клъстер принадлежи. Тъй като просто познахме центроида на нашите две култури, може да не е така, че сме го познали правилно. Нека научим как намираме правилното местоположение на центроида на нашите клъстери в стъпка 3.

Стъпка 3

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

Centroid трябва да бъде в центъра на всички точки от данни, присъстващи в клъстера. Ако намерим средната стойност на всички точки от данни в клъстер, ще получим ново местоположение. Това местоположение е отбелязано с „X“ на изображението по-долу:

Виждате ли, средното местоположение на всички червени точки е маркирано със зелен кръст, а средното положение на всички сини точки е маркирано с жълт кръст. Това са точките в центъра на нашите групирани данни и по-добро местоположение за поставяне на центроида. Ако изместим центроида, ще изглежда нещо като:

Стъпка 4

Но тъй като изместихме центроида, може да не е така, че всички червени точки все още са близо до червения център. Отново ще трябва да намерим принадлежността на всяка точка от данни по отношение на центроидите на затваряне. Ще изглежда нещо подобно:

Сега отново следваме втората стъпка, вземайки тези нови центроиди, и продължаваме да правим това, докато нашият центроид спре да променя позицията си. След като това се случи, можем уверено да кажем, че сме намерили центроидите и точките от данни, които принадлежат към това, ще попаднат в този клъстер. Целият този процес може да бъде разбран визуално, като следвате изображенията по-долу:

Ще получим крайния резултат като:

Можем да видим, че новата средна стойност е същата като центроида и няма да се промени в повече итерации, тя се фиксира, това е необходимият центроид, който получаваме, и можем визуално да видим, че успешно изобразява това, което предположихме, че имаме два клъстера, но въпросът, който все още остава, е: -

Наистина ли са два клъстера на изображението? Този въпрос все още е без отговор, ще преминем към него след известно време.

Първо, нека видим горния процес под формата на GIF:

Сега имаме два клъстера и знаем коя точка от данни към кой от клъстерите принадлежи. Сега да предположим, че искаме да разберем как нашите данни се разпространяват около нашия център. Най-добрият начин да направите това е да сумирате квадрата на разстоянието на всички точки от данни до центроида на клъстера и тази стойност за нашите данни ще бъде 5,179687509974783.

Това число също се нарича „инерция“, инерцията се изчислява на най-доброто позициониране на центроидите на клъстера. Това означава, че изчисляваме тази инерция върху центроида, намерен след итерации и когато сме сигурни за центроидите, които сме получили.

Да се ​​научим да намираме „K“ в K-означава:

Докато се учихме да намираме центроидите на клъстерите за нашите данни, ние предположихме, че има 2 клъстера в нашите данни, но това може да е погрешно, тъй като нямаме математическа подкрепа за това предположение, нека се научим как да намираме правилния брой клъстери.

Започваме да гадаем, за да намерим броя на клъстерите или категориите в нашия набор от данни. Ние правим предположения за броя на клъстерите, присъстващи в нашите данни. Сега да предположим, че клъстерите в нашите данни са в диапазона от 1 до 15. Сега как да изберем най-доброто предположение?

Избираме най-доброто предположение, като намираме разположението на центроида, което дава минимална инерция за различни стойности на K (Прочетете напред, за да разберете).

Нека разберем това визуално:

Да предположим, че имаме само една категория, следователно казваме, че трябва да има само един клъстер, но тъй като знаем, че клъстерите имат центроидна точка, следователно този клъстер също трябва да има центроидна точка, сега, за да потвърдим дали k=1 е оптимален избор, ние се опитваме да намерим оптималния центъроид на клъстера. За да намерим оптималния центъроид на клъстера, използваме стратегията, използвана по-горе, и достигаме до резултата:

Инерцията е сумата от квадратните разстояния на точките с данни в клъстера до центроида на клъстера. Инерцията за k=1 излиза, че е 28,391514358368717 и докато научихме за местоположението на центроида, ние открихме инерцията за k=2, която се оказа, че е 5,179687509974783, за k=3 се оказва, че е 1,7050986081225123. Докато увеличаваме броя на k, нашата загуба продължава да намалява.

Изглежда логично, че след като нашето k стане равно на броя на точките от данни, които имаме, то ще стане нула, тъй като няма да има грешка (помислете за тази точка за известно време, може да бъде проблем за мозъка),

Така че, ако го начертаем върху графиката на инерцията VS K (брой клъстери), ще изглежда нещо подобно:

Получава се според очакванията, забележете как графиката се измества от експоненциална към линейна, сега точката, в която се случва това изместване, се нарича ELBOW точка и това се оказва броят на клъстерите, присъстващи в нашите данни, това означава нашето предположение, че данните съдържа 2 категории е грешно. Правилният брой клъстери е 3. Нека да видим къде се намират нашите клъстерни центроиди, нека го визуализираме:

Заключение

В този блог видяхме как алгоритъмът за клъстериране K-Means работи върху набор от данни и за какво трябва да се внимава, докато се избира точният брой клъстери с помощта на elbow plot и как алгоритъмът k_means намира центроидите на формираните клъстери.

Неконтролираното машинно обучение се използва, за да се установи как немаркираните точки от данни са свързани с други точки от данни и как са групирани, формирани с помощта на тази информация. Основните неща, които трябва да намерите в алгоритъма за клъстериране, са центроидът на клъстера и броят на клъстерите, които всъщност са които можем да намерим по различни начини, единият от които е обяснен по-горе, а именно лакътната диаграма.

Има множество приложения на неконтролирано машинно обучение като откриване на измами, сегментиране на клиенти, извличане на функции и т.н.

В предишни блогове разгледахме контролирано машинно обучение, а този блог обяснява алгоритъма за неконтролирано машинно обучение. Следващият блог ще ви запознае с важните параметри, за които трябва да се грижим, докато работим върху модела на машинно обучение.

Предишен блог — Вашето ръководство за контролирано машинно обучение-класификация