Науката за данни става много популярна и много хора се опитват да се включат в нея и това е СТРАХОТНО. Но мнозина предполагат, че науката за данните, машинното обучение, включване на всяка друга модна дума тук, е да включите данни в някои библиотеки на Sckit-Learn. Ето каква е реалната работа.

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

Проблемът

Ако сте следили моите блогове, вероятно сте разбрали, че работя много в областта на Machine 2 Machine. Наскоро по време на работа се опитвах да групирам машини заедно въз основа на тяхното поведение, известно още като тяхното потребление на данни.

Тези функции отчитат използването на изтегляне и качване на конкретни категории услуги, напр. Социални медии, аудио и т.н. За това нека приемем, че разглеждаме брояч, който разглежда колко връзка е установена с AWS (Amazon Web Services).

Ако вземем данните такива, каквито са и решим да извадим клъстери от тях, получаваме нещо подобно:

Имайте предвид, че това е LDA представяне на данните по 2 оси. LDA като коефициент на представителност ± 90%. Дори и да не е перфектно, клъстерирането е почти безполезно. В този момент някои предлагам да използвате този или онзи алгоритъм и да настроите хиперпараметрите и това е точно най-лошата идея.

Позорните данни

Сега нека поработим малко. Как изглеждат данните. Съветваме ви да отделите много време, преди да въведете някои от sklearn.cluster import KMeans. Ще разгледаме една конкретна функция за този пример, но имайте предвид, че повечето от тях бяха подобни.

Ето AWS брояча (не наистина, но ще се преструваме).

Всички данни изглеждат 0, но ако погледнете подробно, има стойност, достигаща до 3e+7. Как, за бога, очаквате да създадете някаква смислена дистанция с това. Дори ако го мащабирате между 0 и 1, повечето от данните ще бъдат между 0 и 0,0000005 или нещо подобно, следователно разстоянието няма да се подобри.

Ако разгледаме всички ненулеви данни, имаме нещо по-интересно:

Обработка на данни

Това започва да изглежда като LogNormal разпределение. Сега как можем да го нормализираме. Поне малко. Така че един мой колега, Tanguy имаше много умна идея как да преобразува това логнормално разпределение. „Трансформацията на Box Cox“. Тази трансформация се опитва да „нормализира“, доколкото е възможно, различно разпределение, включително LogNormal.

Тази трансформация се опитва да минимизира стойността на lamda в тази формула (Снимка от Wikipedia):

В нашия случай има толкова много нули, че lamda би била по-ниска до нещо подобно: (Забележка: Трябва да получите само положителна стойност, така че 1 беше добавено към всички стойности)

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

Нека отново върнем контекста на тези данни. Опитваме се да категоризираме поведението на машината. В света на машината към машината има много информация, скрита в това. Машината МОЖЕ да използва AWS. Звучи смешно, но тук е много важно. Тези машини обикновено са програмирани да изпълняват много специфична задача, напр. Съобщавайте за времето, показвайте реклами и т.н. Тяхната задача обикновено е твърдо кодирана и те не започват произволно да влизат във Facebook или нещо подобно. Самият факт, че могат да използват услуга (като AWS), е много информация. Така че планът ми беше определен, ще оставя нулите на нули и след това ще дам диапазона от 0,5 до 1 за останалите данни. Сега как да изразя останалите данни... Box Cox transform. Ще направя трансформацията на единствените ненулеви устройства.

И така, ето как изглежда. Отляво можете да видите всички данни, трансформирани, както е обяснено в интервал 0–1. Вдясно имате увеличена графика на секцията между 0,5 и 1.

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

Резултат

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

Заключение

Намирам, че хората са малко „доволни от задействането“ на алгоритмите и скачат твърде бързо към сградата на модела. Някои казват, че дори не е нужно да разбирате математиката зад и аз не съм съгласен, трябва да разберете поне основите на алго. Поне достатъчно, за да разберете как да подготвите данните за него. Като примери в K-Means става въпрос за разстоянието между точките и когато имате този тип диапазон (10e7), не можете да очаквате алгометърът да намери модели на субтитри, той ще бъде заслепен от диапазона.

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

Първоначално публикувано в coffeeanddata.ca на 27 април 2018 г.