Классификаторы дерева решений в программировании на языке R
Классификация - это задача, в которой объекты нескольких категорий распределяются по соответствующим классам с использованием свойств классов. Классификационная модель обычно используется для:
- Предсказать метку класса для нового немаркированного объекта данных
- Предоставьте описательную модель, объясняющую, какие функции характеризуют объекты в каждом классе.
Существуют различные методы классификации, такие как,
- Логистическая регрессия
- Древо решений
- K-Ближайшие соседи
- Наивный байесовский классификатор
- Машины опорных векторов (SVM)
- Классификация случайных лесов
Классификаторы дерева решений
Дерево решений - это древовидная структура, подобная блок-схеме, в которой внутренний узел представляет функцию (или атрибут), ветвь представляет правило принятия решения, а каждый конечный узел представляет результат. Дерево решений состоит из:
- Узлы: проверка значения определенного атрибута.
- Ребра / ветвь: представляет правило принятия решения и подключение к следующему узлу.
- Концевые узлы: конечные узлы, которые представляют метки классов или распределение классов.
И этот алгоритм легко реализовать на языке R. Некоторые важные моменты о классификаторах дерева решений:
- Это более интерпретируемое
- Автоматически обрабатывает принятие решений
- Делит пространство пополам на более мелкие
- Склонен к переобучению
- Можно обучить на небольшом тренировочном наборе
- Сильно подвержен шуму
Реализация в R
Набор данных:
Выборочная группа из 400 человек поделилась своим возрастом, полом и зарплатой с продуктовой компанией, а также о том, купили они продукт или нет (0 означает нет, 1 означает да). Загрузите набор данных Advertising.csv.
р
# Importing the dataset dataset = read.csv ( 'Advertisement.csv' ) head (dataset, 10) |
Выход: ID пользователя Пол Возраст Расчетная зарплата Куплено 0 15624510 Мужчина 19 19000 0 1 15810944 Мужчина 35 год 20000 0 2 15668575 женский 26 год 43000 0 3 15603246 женский 27 57000 0 4 15804002 Мужчина 19 76000 0 5 15728773 Мужчина 27 58000 0 6 15598044 женский 27 84000 0 7 15694829 женский 32 150000 1 8 15600575 Мужчина 25 33000 0 9 15727311 женский 35 год 65000 0
р
# Encoding the target feature as factor dataset$Purchased = factor (dataset$Purchased, levels = c (0, 1)) # Splitting the dataset into # the Training set and Test set # install.packages('caTools') library (caTools) set.seed (123) split = sample.split (dataset$Purchased, SplitRatio = 0.75) training_set = subset (dataset, split == TRUE ) test_set = subset (dataset, split == FALSE ) # Feature Scaling training_set[-3] = scale (training_set[-3]) test_set[-3] = scale (test_set[-3]) # Fitting Decision Tree Classification # to the Training set # install.packages('rpart') library (rpart) classifier = rpart (formula = Purchased ~ ., data = training_set) # Predicting the Test set results y_pred = predict (classifier, newdata = test_set[-3], type = 'class' ) # Making the Confusion Matrix cm = table (test_set[, 3], y_pred) |
- Обучающий набор содержит 300 записей.
- Набор тестов содержит 100 записей.
Матрица неточностей: [[62, 6], [3, 29]]
Визуализация данных поезда:
р
# Visualising the Training set results # Install ElemStatLearn if not present # in the packages using(without hashtag) # install.packages('ElemStatLearn') library (ElemStatLearn) set = training_set # Building a grid of Age Column(X1) # and Estimated Salary(X2) Column X1 = seq ( min (set[, 1]) - 1, max (set[, 1]) + 1, by = 0.01) X2 = seq ( min (set[, 2]) - 1, max (set[, 2]) + 1, by = 0.01) grid_set = expand.grid (X1, X2) # Give name to the columns of matrix colnames (grid_set) = c ( 'Age' , 'EstimatedSalary' ) # Predicting the values and plotting them # to grid and labelling the axes y_grid = predict (classifier, newdata = grid_set, type = 'class' ) plot (set[, -3], main = 'Decision Tree Classification (Training set)', xlab = 'Age' , ylab = 'Estimated Salary' , xlim = range (X1), ylim = range (X2)) contour (X1, X2, matrix ( as.numeric (y_grid), length (X1), length (X2)), add = TRUE ) points (grid_set, pch = '.' , col = ifelse (y_grid == 1, 'springgreen3' , 'tomato' )) points (set, pch = 21, bg = ifelse (set[, 3] == 1, 'green4' , 'red3' )) |
Выход:
Визуализация тестовых данных:
р
# Visualising the Test set results library (ElemStatLearn) set = test_set # Building a grid of Age Column(X1) # and Estimated Salary(X2) Column X1 = seq ( min (set[, 1]) - 1, max (set[, 1]) + 1, by = 0.01) X2 = seq ( min (set[, 2]) - 1, max (set[, 2]) + 1, by = 0.01) grid_set = expand.grid (X1, X2) # Give name to the columns of matrix colnames (grid_set) = c ( 'Age' , 'EstimatedSalary' ) # Predicting the values and plotting them # to grid and labelling the axes y_grid = predict (classifier, newdata = grid_set, type = 'class' ) plot (set[, -3], main = 'Decision Tree Classification (Test set)', xlab = 'Age' , ylab = 'Estimated Salary' , xlim = range (X1), ylim = range (X2)) contour (X1, X2, matrix ( as.numeric (y_grid), length (X1), length (X2)), add = TRUE ) points (grid_set, pch = '.' , col = ifelse (y_grid == 1, 'springgreen3' , 'tomato' )) points (set, pch = 21, bg = ifelse (set[, 3] == 1, 'green4' , 'red3' )) |
Выход:
Диаграмма дерева решений:
р
# Plotting the tree plot (classifier) text (classifier) |
Выход: