Machine Learning: Защо е важно данните да са мащабирани?

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

Как влияят данните със стойности от различен порядък?

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

 NameHeightWeightResult
0Steve Harrison1.85962
1James Douglas1.72811
2Vicky McNickol1.58653

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

Нужно е да се извършат необходимите трансформации, така че стойностите да бъдат от еднакъв порядък. Тази техника се нарича мащабиране на характеристики (Feature scaling) и се прилага в етапа на предварителната обработка на данните (Data preprocessing).

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

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

Например, ако имаме месечен доход, чиито стойности попадат в интервал над 1000, и характеристиката възраст, при която 85 години е максимумът. В такива случаи моделът може да прецени, че доходът е по-важен, а в действителност да не е така.

Кои алгоритми за машинно обучение изискват данните да бъдат мащабирани?

  • Алгоритми, изчисляващи разстояние:
    • k най-близки съседи (k-Nearest Neighbors)
    • Метод на опорните вектори (Support Vector Machines)
    • k-means клъстеризация (k-means clustering)
  • Алгоритми, изчисляващи коефициенти:
    • Регресионни алгоритми (логистична регресия, линейна, нелинейна и др.)
    • Невронни мрежи

Алгоритмите, които изискват работа с мащабирани данни, не се изчерпват до тук. Има и още много други като например PCA, SVD, Factorization Machines и други, които участват в различните етапи при изграждането на модела.

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

Начини за мащабиране

Библиотеката Scikit-learn на Python съдържа в модула си за предварителна обработка на данните (preprocessing) различни методи, чрез които се мащабират данни.

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

Резултат:

 NameAgeSalary
0Oliver Hamilton183400
1Jake Smith351400
2Jordan Todosey281600
3Kim Steele412550
4Kevin Lang60850
5Victoria Ong441780
6Victor Rasmussen241250
7Jessica Scott551000

Характеристиките, които трябва да бъдат мащабирани са Age и Salary. Ще отделим стойностите им в масив, върху който след това ще приложим различните методи.

StandardScaler

Библиотеката Scikit-learn притежава метод, наречен StandardScaler(), чрез който данните могат да бъдат стандартизирани. Използва се при алгоритми, които очакват входните данни да имат стандартно нормално разпределение и работят по-добре с мащабирани стойности (линейна и логистична регресия, линеен дискриминантен анализ и др.). След като той бива приложен, формата на разпределението не се променя, средната стойност на всички независими променливи става равна на 0, а стандартното отклонение е 1.

Ако данните не са преминали през стандартизация, променлива с висока дисперсия (variance) ще оказва повече влияние върху работата на модела и бихме получили резултати с по-голяма грешка.

Формула:

При стандартизацията данните са трансформирани чрез изваждане на средната стойност и разделяне на стандартното отклонение.

Пример:

Резултат:

 NameAgeSalary
0Oliver Hamilton-1.458642.08758
1Jake Smith-0.226497-0.410645
2Jordan Todosey-0.733851-0.160823
3Kim Steele0.2083771.02583
4Kevin Lang1.58548-1.09766
5Victoria Ong0.4258150.064017
6Victor Rasmussen-1.02377-0.598012
7Jessica Scott1.22309-0.91029

MinMaxScaler

MinMaxScaler() трансформира стойностите на променливите в определен интервал, който по подразбиране е между 0 и 1. Този метод не променя формата на разпределението и не намаля влиянието на силно отличаващите се стойности. Прилага се при ключови алгоритми за оптимизация като градиентно спускане (gradient descent), при такива, които поставят тегла на променливите (невронни мрежи и регресия) и при алгоритми, които изчисляват разстояние (k най-близки съседи).

Формула:

При MinMaxScaler() се изважда минималната стойност и полученото се разделя на размаха (max-min).

Пример:

Резултат:

 NameAgeSalary
0Oliver Hamilton01
1Jake Smith0.4047620.215686
2Jordan Todosey0.2380950.294118
3Kim Steele0.5476190.666667
4Kevin Lang10
5Victoria Ong0.6190480.364706
6Victor Rasmussen0.1428570.156863
7Jessica Scott0.8809520.0588235

RobustScaler

RobustScaler() методът е подходящ, когато искаме да намалим влиянието на силно отличаващите се стойности. Тази трансформация не променя формата на разпределението и прави така, че стойностите да бъдат в определен мащаб, който не е предварително зададен както е при MinMaxScaler().

Формула:

При RobustScaler() се изважда медианата (Q2) и полученият резултат се разделя на интерквартилния размах (Q3 - Q1).

Пример:

Резултат:

 NameAgeSalary
0Oliver Hamilton-1.012662.42038
1Jake Smith-0.151899-0.127389
2Jordan Todosey-0.5063290.127389
3Kim Steele0.1518991.33758
4Kevin Lang1.11392-0.828025
5Victoria Ong0.3037970.356688
6Victor Rasmussen-0.708861-0.318471
7Jessica Scott0.860759-0.636943

MaxAbsScaler

Методът MaxAbsScaler() мащабира данните за всяка променлива по нейната максимална абсолютна стойност. Той не променя вида на разпределението и след прилагането му, при всяка характеристика максималната абсолютна стойност става равна на 1, а интервалът е между 0 и 1. Също както при MinMaxScaler(), методът не намаля влиянието на силно отличаващите се стойности.

Формула:

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

Пример:

Резултат:

 NameAgeSalary
0Oliver Hamilton0.31
1Jake Smith0.5833330.411765
2Jordan Todosey0.4666670.470588
3Kim Steele0.6833330.75
4Kevin Lang10.25
5Victoria Ong0.7333330.523529
6Victor Rasmussen0.40.367647
7Jessica Scott0.9166670.294118

Обобщена визуализация, показваща разликите при мащабиране с различните методи

За изготвянето на визуализацията, която ще видите по-надолу, е използвана извадката Salary_Data, която можете да изтеглите от тук.

В нея има 33 записа, съдържащи информация за трудов стаж и заплати на служители.

Първите 5 реда от извадката изглеждат по следния начин:

 YearsExperienceSalary
01.139343
11.346205
21.537731
3243525
42.239891

Променливата YearsExperience съдържа доста по-малки стойности, като максималната е 10.5, а при Salary са много по-високи и максимумът е 122391.

Веднага се забелязва, че зависимостта между двете променливи е положителна и възходяща и че четирите метода не променят формата на разпределението. Това, което е различно, е интервалът, в който попадат стойностите след трансформацията. При MinMaxScaler() и MaxAbsScaler() е между 0 и 1, докато при другите два метода, е малко по-голям. Когато стойностите са трансформирани чрез StandardScaler(), минималната стойност е -1.5, а максималната е 1.9. При RobustScaler() са съответно -0.8 и 1.2.

На диаграмите се забелязват и 3 необичайни стойности (outliers). Единствено ако данните са мащабирани чрез RobustScaler(), то тогава те няма да оказват влияние върху получените от модела резултати. Останалите 3 метода не намаляват влиянието на такива стойности.

Каква е ползата от мащабирането?

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

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

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

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