04 Trees and Ensembles#
2 стратегии:
– adding features - подходящо при таблични данни
– keeping the data as raw as possible - подходящо при снимки, видео, аудио
Подходящ датасет за проекта:
50-80 columns
50k-100k
Дървета за взимане на решения#
Дървета за взимане на решения
Насочен ацикличен граф - DAG
Структура от данни “дърво”
Гора - комбинация от дървета
Tradeoff - компенсация
Impurity measure - функция, която може да извикаме за всяка част от данните
Метрика за безпорядкък
Impurity(node)
Impurity(child_yes), Impurity(child_no)
Най-добре разделяне имаме когато:
Impurity(node) >> Sum(impurity(childs))
От голямо разнообразно парче към възможно най-еднообразни парчета
Да ги разделим възможно най-адекватно
Impurity = I
Information gain = IG
IG = I_parent - sum(I_childs)
Ентропия - мярка за безпорядък
Не е парабола
Gini - друга метрика, по-бърза тъй като няма логаритъм
Pruning = окастряне на дървото; да намалим брой на листата с много малки записи
Например, задаваме стойност на хиперпараметъра min_sample_(per)leaf, min_samples_(per)_split
Вкарваме bias, но намалявам variance
Математически, регуляризация е само L1 и L2, но разговорно (тъй като и Pruning намалява) се включва
Нормата да се добави към cost функцията
В дърветата нямаме тегловни коеф (както при регресията)
Majority vote - взимаме класа с най-голяма пропорция
Decision Forest (aka Random Forest)#
дърветата оптимизират
когато ограничим броя на въпросите, ограничаваме нестабилността
нито едно дърво в гората не вижда целия датасет
ако в ансамбъл (като гора), вместо дървета пуснем например регресия - voting ensemble
хомогенен ансамбъл
Горите са ансамблови алгоритми - очакваме да се справя по-добре и да не over-fit-ват, да се компенсират множеството дървета
Множество от дървета (ансамбъл)
Най-популярни алгоритми: 1. SVM 2. Random Forest
Няколко начина:
– всяко дърво получава част от записите, всички колони
– всяко дърво получава всички записи, но само от няколко колони
– случайни колони и записи
Bagging - Много алгоритми, които получават извадка от данните (най-често част от записите), взимаме majority vote
Voting - даваме много различни алгоритъма
и им даваме тегла
Интерпретацията на резултатите при:
– линейните алгоритми както и при 1 дърво е лесна - имаме тегловни коеф и въпроси (split)
– горите е трудна . Една метрика е feature_importances_.
Параметър n_jobs - нишки на процесор, във всеки sklearn модел
Boosting - букв. Подсилване
Decision stump - букв. дънер за взимане на решения
Често AdaBoost overfit-ва данните
RACSAC, AdaBoost, TrainTestSplit - все алгоритми, който помагат на други да си свършат работата ?
При AdaBoost не тунинговаме базовия estimator (алгоритъм), т.е. умишлено слагаме слаб алгоритъм