Machine Learning: Какво означава извадката да не е балансирана?

Автор: Десислава Христова

Кога имаме небалансирана извадка?

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

Защо е необходимо да работим с балансирана извадка?

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

  • Общо студенти: 130
  • Брой преминали студенти: 120
  • Брой непреминалите студенти: 10

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

В тази статия ще ви запозная с различните методи за балансиране на извадка, които предоставя библиотеката imblearn на Python.

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

Резултат:

 AgeSalaryPromotion
0281600No
1412550No
260850No
3441780No
4241250No
5551000Yes
6502000Yes
7601583No
870580No
9251488No
10521055Yes
11482450No
12583560Yes
13681700No
14362425Yes
15261450No
16392230Yes
  • Общо служители: 17
  • Брой получили повишение (клас "Yes"): 6
  • Брой неполучили повишение (клас "No"): 11

Разделяме данните в променливите X и y. В първата са отделните характеристики за всеки служител, а във втората е целевата променлива.

Библиотеката imblearn

Oversampling

Oversampling е техника за балансиране на извадка, при която се увеличава броят на обектите в по-малкото множество (minority), така че да се изравни с броя в по-голямото (majority).

  • SMOTE

SMOTE (Synthetic Minority Oversampling Technique) е често използван метод за балансиране на извадки. Той генерира синтетично нови обекти, като използва алгоритъма k най-близки съседи (kNN). Броят съседи предимно е 5 и методът работи, като произволно избира един от тях, след което се създава нов сходен запис за класа с по-малко представители.

Новите записи:

 AgeSalaryPromotion
18473009Yes
19461494Yes
20501845Yes
21513218Yes
  • RandomOverSampler

Методът RandomOverSampler работи, като произволно дублира редове от по-малкото множество докато броя на представителите в класовете не се изравни. Прилагането на този метод би могло да доведе до преобучение (overfitting), тъй като моделът вижда повтарящи се записи, особено и ако те са много на брой.

Новите записи:

 AgeSalaryPromotion
18392230Yes
19551000Yes
20583560Yes
21521055Yes
  • ADASYN (Adaptive Synthetic)

Това е метод, който адаптивно генерира синтетични данни за класът с по-малко представители, използвайки алгоритъма k най-близки съседи. Разликата между този метод и SMOTE е фактът, че ADASYN взима плътността на разпределението на данните като критерий, за да прецени колко нови обекта да генерира.

Новите записи:

 AgeSalaryPromotion
18462075Yes
19481335Yes
20493127Yes
21431861Yes

Обобщаваща визуализация:

Oversampling методите увеличават представителите на по-малкото множество, като в нашия случай това е положителният клас.

Разпределението на класовете:
Yes = 11
No = 11

Undersampling

Undersampling е техника, при която, се намаляват случаите в класа с повече представители до такава степен, че броят им да се изравни с този в класа с по-малко представители.

  • NearMiss

NearMiss е метод, който намалява броя на обектите на базата на определено правило. Алгоритъма има 3 версии, озаглавени NearMiss-1, NearMiss-2 и NearMiss-3, като коя да използва се задава чрез параметър на метода. Първата е зададена по подразбиране.

  • NearMiss-1 - Премахва записите, за които средното разстояние (по kNN) до обекти от класа с по-малко представители е най-ниско.
  • NearMiss-2 - Премахва тези записи, при които средното разстояние до най-далечните обекти от класа с по-малко представители е минимално.
  • NearMiss-3 - Премахва записите от класа с повече представители, които имат най-малко средно разстояние до всеки обект от по-малкото множество.

Резултат:

 AgeSalaryPromotion
0482450No
1412550No
2241250No
3441780No
4261450No
5251488No
6551000Yes
7502000Yes
8521055Yes
9583560Yes
10362425Yes
11392230Yes
  • RandomUnderSampler

Методът RandomUnderSampler работи, като произволно премахва записи от по-голямото множество докато броя на представителите в класовете не се изравни. Недостатък на този метод е, че е възможно да се премахне някой обект, който всъщност да е важен и да е нужно да присъства в извадката.

Резултат:

 AgeSalaryPromotion
060850No
1251488No
2412550No
3681700No
4441780No
5241250No
6551000Yes
7502000Yes
8521055Yes
9583560Yes
10362425Yes
11392230Yes

Обобщаваща визуализация:

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

Разпределението на класовете:
Yes = 6
No = 6

Коя техника да използваме?

Необходимо е да се направят множество тестове с различните методи, за да се прецени кой е най-подходящ. При прилагане на oversampling за балансиране на извадка се запазват всички оригинални записи, докато при undersampling може да се изгубят ценни данни, тъй като се премахват редове от множеството с повече представители. Може също така да се приложи и комбинация от двете техники. Като цяло възможностите са много и избор на това коя техника да използваме зависи от данните, с които разполагаме, както и от самата задача.

Искате да научите повече за машинното обучение?

Включете се в курса по машинно обучение и анализ на данни с Python.

© Copyright 2019 DeviseExpert Всички права запазени
envelopephone-handsetmap-marker linkedin facebook pinterest youtube rss twitter instagram facebook-blank rss-blank linkedin-blank pinterest youtube twitter instagram