11 Як кластеризація підвищує точність моделей “з учителем” (kmeans + renadomForest)
Курс: Математичне моделювання в R
Увага. Для використання подібного підходу до підвищення точності прогнозів варто переконатися, що це працює.
randomForest 4.7-1.1
Type rfNews() to see new features/changes/bug fixes.
Attaching package: 'dplyr'
The following object is masked from 'package:randomForest':
combine
The following objects are masked from 'package:stats':
filter, lag
The following objects are masked from 'package:base':
intersect, setdiff, setequal, union
11.1 Набір даних
Детальна інформація про набір даних вже описана у матеріалі “Дерева рішень. Регресія. Баланс кредитної карти” (Примітка. Додати лінк)
Переглянемо структуру даних:
'data.frame': 400 obs. of 12 variables:
$ X : int 1 2 3 4 5 6 7 8 9 10 ...
$ Income : num 14.9 106 104.6 148.9 55.9 ...
$ Limit : int 3606 6645 7075 9504 4897 8047 3388 7114 3300 6819 ...
$ Rating : int 283 483 514 681 357 569 259 512 266 491 ...
$ Cards : int 2 3 4 3 2 4 2 2 5 3 ...
$ Age : int 34 82 71 36 68 77 37 87 66 41 ...
$ Education: int 11 15 11 11 16 10 12 9 13 19 ...
$ Gender : chr "Male" "Female" "Male" "Female" ...
$ Student : chr "No" "Yes" "No" "No" ...
$ Married : chr "Yes" "Yes" "No" "No" ...
$ Ethnicity: chr "Caucasian" "Asian" "Asian" "Asian" ...
$ Balance : int 333 903 580 964 331 1151 203 872 279 1350 ...
Підготуємо дані до моделювання. Перетворимо категоріальні показники до факторів:
11.2 Тренувальна та тестова вибірки
Розділимо на тестову та тренувальну вибірки:
set.seed(2)
train_index <- sample(nrow(data), size = 0.5*nrow(data))
train_data <- data[train_index, ]
test_data <- data[-train_index, ]
nrow(train_data)
nrow(test_data)
200
200
11.3 Побудова моделі на основі RandomForest
Length Class Mode
call 3 -none- call
type 1 -none- character
predicted 200 -none- numeric
mse 500 -none- numeric
rsq 500 -none- numeric
oob.times 200 -none- numeric
importance 10 -none- numeric
importanceSD 0 -none- NULL
localImportance 0 -none- NULL
proximity 0 -none- NULL
ntree 1 -none- numeric
mtry 1 -none- numeric
forest 11 -none- list
coefs 0 -none- NULL
y 200 -none- numeric
test 0 -none- NULL
inbag 0 -none- NULL
terms 3 terms call
- 2
- 1038
- 4
- 1331
- 5
- 433
- 6
- 1010
- 7
- 182
- 10
- 1224
Перевіримо детермінацію та похибки
0.973839956466162
0.883183673751305
11.4 Кластеризуємо числові дані
Для початку об’єднаємо усі дані в один датасет, памятаємо, що пропорція розбиття 280/120
значень:
Згенеруємо, наприклад, 5 кластерів длише для числових показників без параметру Balance
(чому без балансу?):
Income | Limit | Rating | Cards | Age | Education | |
---|---|---|---|---|---|---|
<dbl> | <int> | <int> | <int> | <int> | <int> | |
1 | 27.794 | 3807 | 301 | 4 | 35 | 8 |
2 | 50.699 | 3977 | 304 | 2 | 84 | 17 |
3 | 180.379 | 9310 | 665 | 3 | 67 | 8 |
4 | 73.327 | 6555 | 472 | 2 | 43 | 15 |
5 | 30.413 | 3690 | 299 | 2 | 25 | 15 |
6 | 13.433 | 1134 | 112 | 3 | 70 | 14 |
- 3
- 3
- 1
- 2
- 3
- 4
- 2
- 2
- 3
- 3
- 3
- 3
- 4
- 2
- 3
- 4
- 4
- 3
- 3
- 3
- 3
- 4
- 4
- 2
- 4
- 4
- 3
- 2
- 3
- 3
- 3
- 3
- 4
- 3
- 4
- 2
- 2
- 2
- 3
- 3
- 3
- 2
- 3
- 2
- 4
- 2
- 2
- 3
- 4
- 3
- 1
- 4
- 2
- 2
- 4
- 4
- 4
- 1
- 4
- 3
- 3
- 3
- 4
- 3
- 2
- 2
- 4
- 3
- 3
- 3
- 3
- 2
- 4
- 3
- 4
- 4
- 3
- 3
- 2
- 4
- 4
- 4
- 1
- 4
- 3
- 4
- 3
- 1
- 3
- 4
- 3
- 3
- 3
- 3
- 3
- 4
- 4
- 3
- 3
- 2
- 3
- 2
- 3
- 2
- 4
- 2
- 2
- 4
- 2
- 1
- 3
- 4
- 3
- 4
- 2
- 4
- 4
- 4
- 3
- 1
- 3
- 3
- 3
- 3
- 3
- 2
- 4
- 2
- 3
- 4
- 4
- 4
- 2
- 3
- 3
- 4
- 4
- 1
- 3
- 2
- 4
- 4
- 4
- 2
- 4
- 3
- 4
- 3
- 3
- 4
- 3
- 4
- 4
- 4
- 1
- 4
- 4
- 4
- 2
- 4
- 3
- 4
- 4
- 2
- 3
- 4
- 2
- 3
- 3
- 3
- 2
- 4
- 2
- 3
- 4
- 4
- 4
- 2
- 3
- 3
- 2
- 2
- 4
- 3
- 2
- 4
- 1
- 4
- 1
- 4
- 4
- 3
- 2
- 3
- 4
- 3
- 3
- 1
- 2
- 4
- 2
- 1
- 3
- 2
- 4
- 2
- 4
- 3
- 2
- 2
- 4
- 2
- 3
- 3
- 4
- 3
- 3
- 4
- 2
- 3
- 4
- 4
- 2
- 3
- 3
- 4
- 3
- 4
- 3
- 3
- 4
- 3
- 3
- 4
- 4
- 3
- 3
- 3
- 3
- 3
- 3
- 4
- 4
- 2
- 2
- 4
- 3
- 4
- 3
- 1
- 3
- 4
- 2
- 2
- 4
- 3
- 4
- 4
- 4
- 4
- 2
- 2
- 4
- 4
- 4
- 4
- 3
- 1
- 3
- 4
- 3
- 3
- 3
- 3
- 4
- 3
- 4
- 2
- 4
- 4
- 2
- 3
- 3
- 3
- 2
- 3
- 4
- 3
- 1
- 4
- 3
- 2
- 4
- 3
- 4
- 3
- 1
- 4
- 3
- 3
- 3
- 4
- 3
- 2
- 2
- 2
- 3
- 3
- 2
- 4
- 3
- 4
- 4
- 4
- 4
- 4
- 4
- 4
- 3
- 2
- 3
- 4
- 4
- 3
- 4
- 3
- 3
- 3
- 4
- 3
- 2
- 4
- 4
- 2
- 2
- 4
- 4
- 4
- 4
- 3
- 1
- 4
- 4
- 3
- 4
- 3
- 2
- 3
- 3
- 2
- 3
- 3
- 2
- 3
- 2
- 3
- 4
- 4
- 4
- 4
- 1
- 4
- 3
- 3
- 3
- 3
- 3
- 4
- 1
- 3
- 3
- 4
- 3
- 1
- 4
- 3
- 2
- 3
- 3
- 1
- 4
- 3
- 3
- 3
- 2
- 2
- 3
- 4
- 3
- 3
- 3
- 3
- 4
- 3
- 4
- 3
- 2
- 3
- 4
- 3
Додамо кластери як фактори до даних:
Розібємо знову на тестову та тренувальну вибірки:
Length Class Mode
call 3 -none- call
type 1 -none- character
predicted 200 -none- numeric
mse 500 -none- numeric
rsq 500 -none- numeric
oob.times 200 -none- numeric
importance 11 -none- numeric
importanceSD 0 -none- NULL
localImportance 0 -none- NULL
proximity 0 -none- NULL
ntree 1 -none- numeric
mtry 1 -none- numeric
forest 11 -none- list
coefs 0 -none- NULL
y 200 -none- numeric
test 0 -none- NULL
inbag 0 -none- NULL
terms 3 terms call
- 201
- 1026
- 202
- 1352
- 203
- 423
- 204
- 1036
- 205
- 173
- 206
- 1211
0.973839956466162
0.883183673751305
0.974638302729307
0.892714294123845