DS Алгоритми

5-те алгоритъма за избор на функции, които всеки специалист по данни трябва да знае

Бонус: Какво прави добрия футболист велик?

Data Science е изучаване на алгоритми.

Ежедневно се боря с много алгоритми, така че реших да изброя някои от най-често срещаните и най-използваните алгоритми, които човек ще използва в тази нова DS Algorithm series.

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

Понякога в крайна сметка използваме корелационни или дървовидни методи, за да открием важните характеристики.

Можем ли да добавим някаква структура към него?

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

Защо Избор на функции?

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

Така че има три причини да не го правим:

1. Проклятие на размерността — Прекомерно оборудване

Ако имаме повече колони в данните от броя на редовете, ще можем да съобразим перфектно нашите данни за обучение, но това няма да се обобщи за новите проби. И така не научаваме абсолютно нищо.

2. Бръсначът на Окам:

Искаме нашите модели да бъдат прости и обясними. Губим обяснимост, когато имаме много функции.

3. Вътрешен боклук Изваден боклук:

В повечето случаи ще имаме много неинформативни функции. Например име или променливи ID. Входът с лошо качество ще доведе до резултат с лошо качество.

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

И така, какво правим?

Избираме само полезни функции.

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

  • Въз основа на филтър:Ние определяме някои показатели и въз основа на тях филтрираме функции. Пример за такъв показател може да бъде корелация/хи-квадрат.
  • Базирани на обвивка:Методите на обвивка разглеждат избора на набор от характеристики като проблем при търсенето. Пример: Елиминиране на рекурсивни функции
  • Вградени: Вградените методи използват алгоритми, които имат вградени методи за избор на функции. Например, Lasso и RF имат свои собствени методи за избор на функции.

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

Ще се опитаме да направим това с помощта на набор от данни, за да го разберем по-добре.

Ще използвам набор от данни за футболисти, за да разбера какво прави добрия играч велик?

Не се притеснявайте, ако не разбирате футболната терминология. Ще се опитам да го сведа до минимум.

Ето Kaggle Ядрото с кода, за да изпробвате сами.

Някаква проста предварителна обработка на данни

Направихме някои основни предварителни обработки, като премахване на Nulls и едно горещо кодиране. И преобразуване на проблема в проблем с класификацията с помощта на:

y = traindf['Overall']>=87

Тук използваме High Overall като прокси за страхотен играч.

Нашият набор от данни (X) изглежда по-долу и има 223 колони.

1. Корелация на Пиърсън

Това е метод, базиран на филтър.

Ние проверяваме абсолютната стойност на корелацията на Pearson между целевите и числените характеристики в нашия набор от данни. Запазваме първите n характеристики въз основа на този критерий.

2. Хи-квадрат

Това е друг метод, базиран на филтър.

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

Нека създадем малък пример за това как изчисляваме статистиката хи-квадрат за извадка.

Така че да кажем, че имаме 75 дясно-напред в нашия набор от данни и 25 не-дясно-напред. Наблюдаваме, че 40 от десните нападатели са добри, а 35 не са добри. Означава ли това, че играчът, който е десен нападател, влияе на цялостното представяне?

Изчисляваме стойността на хи-квадрат:

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

Това е просто. Умножаваме сумата на реда и сумата на колоната за всяка клетка и я разделяме на общите наблюдения.

така Good and NotRightforward Bucket Очаквана стойност= 25(Сума на ред)*60(Сума на колона)/100(Общо наблюдения)

Защо се очаква това? Тъй като в данните има 25% notRightforwards, бихме очаквали 25% от 60-те добри играчи, които наблюдавахме в тази клетка. Така 15 играчи.

След това можем просто да използваме формулата по-долу, за да сумираме всички 4 клетки:

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

Можем да получим характеристики на хи-квадрат от нашия набор от данни като:

3. Елиминиране на рекурсивни функции

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

От sklearn Документация:

Целта на елиминирането на рекурсивни характеристики (RFE) е да се изберат функции чрез рекурсивно разглеждане на все по-малки и по-малки набори от характеристики. Първо, оценителят се обучава на първоначалния набор от характеристики и се получава важността на всяка характеристика или чрез атрибут coef_, или чрез атрибут feature_importances_. След това най-малко важните функции се изрязват от текущия набор от функции. Тази процедура се повтаря рекурсивно върху съкратения набор, докато в крайна сметка бъде достигнат желаният брой функции за избор.

Както бихте предположили, можем да използваме всеки оценител с метода. В този случай ние използваме LogisticRegression и RFE наблюдава coef_атрибутана обекта LogisticRegression

4. Lasso: SelectFromModel

Това е вграден метод. Както беше казано по-горе, вградените методи използват алгоритми, които имат вградени методи за избор на функции.

Например, Lasso и RF имат свои собствени методи за избор на функции. Lasso Regularizer принуждава много тегла на функции да бъдат нула.

Тук използваме Lasso за избор на променливи.

5. Дървовидно: SelectFromModel

Това е вграден метод. Както беше казано по-горе, вградените методи използват алгоритми, които имат вградени методи за избор на функции.

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

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

Можехме да използваме и LightGBM. Или XGBoost обект, стига да има атрибут feature_importances_.

Бонус

Защо да използваме едно, когато можем да имаме всичко?

Отговорът е, че понякога няма да е възможно с много данни и времева криза.

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

Ние проверяваме дали получаваме функция въз основа на всички методи. В този случай, както виждаме, Reactions и LongPassing са отлични качества, които трябва да имате в играч с висок рейтинг. И както се очакваше Ballcontrol и Finishing също заемат първото място.

Заключение

„Инженерингът на функции“ и изборът на функции са критични части от всеки тръбопровод за машинно обучение.

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

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

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

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

Ако искате да научите повече за Data Science, бих искал да посоча този отличен курс от Andrew Ng. Това беше това, което ме накара да започна. Проверете го.

Благодаря за прочетеното. В бъдеще също ще пиша публикации, удобни за начинаещи. Последвайте ме в Medium или се абонирайте за моя blog, за да бъдете информирани за тях. Както винаги, приветствам отзивите и градивната критика и мога да се свържа с вас в Twitter @mlwhiz.