Аналитика больших данных - деревья решений

Дерево решений - это алгоритм, используемый для задач контролируемого обучения, таких как классификация или регрессия. Дерево решений или дерево классификации - это дерево, в котором каждый внутренний (неконечный) узел помечен входной функцией. Дуги, исходящие из узла, помеченного как объект, помечаются каждым из возможных значений объекта. Каждый лист дерева помечен классом или распределением вероятностей по классам.

Дерево можно «изучить», разделив исходный набор на подмножества на основе теста значения атрибута. Этот процесс повторяется для каждого производного подмножества рекурсивным способом, называемымrecursive partitioning. Рекурсия завершается, когда все подмножество в узле имеет одинаковое значение целевой переменной или когда разделение больше не добавляет значения к прогнозам. Этот процесс нисходящей индукции деревьев решений является примером жадного алгоритма и наиболее распространенной стратегией изучения деревьев решений.

Деревья решений, используемые в интеллектуальном анализе данных, бывают двух основных типов:

  • Classification tree - когда ответ является номинальной переменной, например, является ли письмо спамом или нет.

  • Regression tree - когда прогнозируемый результат можно считать действительным числом (например, зарплата рабочего).

Деревья решений - это простой метод, и у него есть некоторые проблемы. Одна из этих проблем - высокая дисперсия результирующих моделей, создаваемых деревьями решений. Чтобы решить эту проблему, были разработаны методы ансамбля деревьев решений. В настоящее время широко используются две группы ансамблевых методов:

  • Bagging decision trees- Эти деревья используются для построения нескольких деревьев решений путем многократной повторной выборки обучающих данных с заменой и голосования за деревья для согласованного предсказания. Этот алгоритм получил название случайного леса.

  • Boosting decision trees- Повышение градиента объединяет слабых учеников; в этом случае деревья решений объединяются в одного сильного ученика итеративно. Он подгоняет слабое дерево к данным и итеративно подбирает слабых учеников, чтобы исправить ошибку предыдущей модели.

# Install the party package
# install.packages('party') 
library(party) 
library(ggplot2)  

head(diamonds) 
# We will predict the cut of diamonds using the features available in the 
diamonds dataset. 
ct = ctree(cut ~ ., data = diamonds) 

# plot(ct, main="Conditional Inference Tree") 
# Example output 
# Response:  cut  
# Inputs:  carat, color, clarity, depth, table, price, x, y, z  

# Number of observations:  53940  
#  
# 1) table <= 57; criterion = 1, statistic = 10131.878 
#   2) depth <= 63; criterion = 1, statistic = 8377.279 
#     3) table <= 56.4; criterion = 1, statistic = 226.423 
#       4) z <= 2.64; criterion = 1, statistic = 70.393 
#         5) clarity <= VS1; criterion = 0.989, statistic = 10.48 
#           6) color <= E; criterion = 0.997, statistic = 12.829 
#             7)*  weights = 82  
#           6) color > E  

#Table of prediction errors 
table(predict(ct), diamonds$cut) 
#            Fair  Good Very Good Premium Ideal 
# Fair       1388   171        17       0    14 
# Good        102  2912       499      26    27 
# Very Good    54   998      3334     249   355 
# Premium      44   711      5054   11915  1167 
# Ideal        22   114      3178    1601 19988 
# Estimated class probabilities 
probs = predict(ct, newdata = diamonds, type = "prob") 
probs = do.call(rbind, probs) 
head(probs)