Я признаю, что это довольно сложный вопрос для всех, кроме человека, который их написал, но я постоянно получаю разные результаты для трех разных версий случайного леса в R.
Три методаречь идет о пакете randomForest, методе «rf» в каретке и пакете ranger.Код приведен ниже.
Данные являются одним из примеров;Я вижу похожие вещи в других спецификациях похожих данных.
Переменная LHS: идентификация партии (Dem, Rep, Indep.).Предикторы с правой стороны - это демография.Чтобы попытаться выяснить, что, черт возьми, происходит с некоторыми странными результатами в пакете randomForest , я попытался реализовать ту же модель в двух других методах.Я обнаружил, что они НЕ воспроизводят эту конкретную аномалию;это особенно странно, потому что, насколько я могу судить, метод rf в карете является просто косвенным использованием пакета randomForest.
Три спецификации, которые я запускаю в каждой реализации, это (1) классификация трех категорий,(2) удаление независимой категории, и (3) то же самое, что и 2, но скремблирование одного наблюдения в «Независимое», чтобы сохранить три категории в модели, что должно дать результаты, аналогичные 2. Насколько я могу судить, вВ случаях, когда для отбора результатов может быть какое-либо превышение или недополнение выборки.
Я также замечаю следующие тенденции:
- Пакет randomForest - единственный пакет, который полностью работает только с двумяКатегории.
- Пакет рейнджера последовательно идентифицирует (как правильно, так и неправильно) больше наблюдений как независимые.
- Пакет рейнджера всегда немного хуже с точки зрения общей точности прогнозирования.
- Пакет каретки по общей точности похож на randomForest (sliнемного выше), но последовательно лучше в более общем классе и хуже в менее общем классе.Это странно, потому что, насколько я могу судить, я не использую избыточную или недостаточную выборку в обоих случаях, и потому что я думаю, что Caret полагается на пакет randomForest.
Ниже я включил обакод и матрицы путаницы, показывающие различия в вопросе.Повторный запуск кода приводит к аналогичным тенденциям в матрицах путаницы каждый раз;это не проблема «хорошо, что любой отдельный запуск может привести к странным результатам».
Есть ли у кого-нибудь какие-либо идеи, почему эти пакеты будут последовательно выдавать немного разные (а в случае связанной проблемы в randomForest, ОЧЕНЬ разные) результаты в целом, или даже лучше, почему они будут отличаться в этом конкретном случае?Например, есть ли в пакете этих пакетов какое-то взвешивание / стратификация образца, о которых мне следует знать?
Код:
num_trees=1001
var_split=3
load("three_cat.Rda")
rf_three_cat <-randomForest(party_id_3_cat~{RHS Vars},
data=three_cat,
ntree=num_trees,
mtry=var_split,
type="classification",
importance=TRUE,confusion=TRUE)
two_cat<-subset(three_cat,party_id_3_cat!="2. Independents")
two_cat$party_id_3_cat<-droplevels(two_cat$party_id_3_cat)
rf_two_cat <-randomForest(party_id_3_cat~{RHS Vars},
data=two_cat,
ntree=num_trees,
mtry=var_split,
type="classification",
importance=TRUE,confusion=TRUE)
scramble_independent<-subset(three_cat,party_id_3_cat!="2. Independents")
scramble_independent[1,19]<-"2. Independents"
scramble_independent<- data.frame(lapply(scramble_independent, as.factor), stringsAsFactors=TRUE)
rf_scramble<-randomForest(party_id_3_cat~{RHS Vars},
data=scramble_independent,
ntree=num_trees,
mtry=var_split,
type="classification",
importance=TRUE,confusion=TRUE)
ranger_2<-ranger(formula=party_id_3_cat~{RHS Vars},
data=two_cat,
num.trees=num_trees,mtry=var_split)
ranger_3<-ranger(formula=party_id_3_cat~{RHS Vars},
data=three_cat,
num.trees=num_trees,mtry=var_split)
ranger_scram<-ranger(formula=party_id_3_cat~{RHS Vars},
data=scramble_independent,
num.trees=num_trees,mtry=var_split)
rfControl <- trainControl(method = "none", number = 1, repeats = 1)
rfGrid <- expand.grid(mtry = c(3))
rf_caret_3 <- train(party_id_3_cat~{RHS Vars},
data=three_cat,
method="rf", ntree=num_trees,
type="classification",
importance=TRUE,confusion=TRUE,
trControl = rfControl, tuneGrid = rfGrid)
rf_caret_2 <- train(party_id_3_cat~{RHS Vars},
data = two_cat,
method = "rf",ntree=num_trees,
type="classification",
importance=TRUE,confusion=TRUE,
trControl = rfControl, tuneGrid = rfGrid)
rf_caret_scramble <- train(party_id_3_cat~{RHS Vars},
data = scramble_independent,
method = "rf",ntree=num_trees,
type="classification",
importance=TRUE,confusion=TRUE,
trControl = rfControl, tuneGrid = rfGrid)
rf_three_cat$confusion
ranger_3$confusion.matrix
rf_caret_3$finalModel["confusion"]
rf_two_cat$confusion
ranger_2$confusion.matrix
rf_caret_2$finalModel["confusion"]
rf_scramble$confusion
ranger_scram$confusion.matrix
rf_caret_scramble$finalModel["confusion"]
Результаты (форматирование слегка изменено длясопоставимость):
> rf_three_cat$confusion
1. Democrats (including leaners) 2. Independents 3. Republicans (including leaners) class.error
1. Democrats (including leaners) 1121 3 697 0.3844042
2. Independents 263 7 261 0.9868173
3. Republicans (including leaners) 509 9 1096 0.3209418
> ranger_3$confusion.matrix
1. Democrats (including leaners) 2. Independents 3. Republicans (including leaners) class.error
1. Democrats (including leaners) 1128 46 647 0.3805601
2. Independents 263 23 245 0.9566855
3. Republicans (including leaners) 572 31 1011 0.3736059
> rf_caret_3$finalModel["confusion"]
1. Democrats (including leaners) 2. Independents 3. Republicans (including leaners) class.error
1. Democrats (including leaners) 1268 0 553 0.3036793
2. Independents 304 0 227 1.0000000
3. Republicans (including leaners) 606 0 1008 0.3754647
> rf_two_cat$confusion
1. Democrats (including leaners) 3. Republicans (including leaners) class.error
1. Democrats (including leaners) 1775 46 0.0252608
3. Republicans (including leaners) 1581 33 0.9795539
> ranger_2$confusion.matrix
1. Democrats (including leaners) 3. Republicans (including leaners) class.error
1. Democrats (including leaners) 1154 667 0.3662823
3. Republicans (including leaners) 590 1024 0.3655514
> rf_caret_2$finalModel["confusion"]
1. Democrats (including leaners) 3. Republicans (including leaners) class.error
1. Democrats (including leaners) 1315 506 0.2778693
3. Republicans (including leaners) 666 948 0.4126394
> rf_scramble$confusion
1. Democrats (including leaners) 2. Independents 3. Republicans (including leaners) class.error
1. Democrats (including leaners) 1104 0 717 0.3937397
2. Independents 0 0 1 1.0000000
3. Republicans (including leaners) 501 0 1112 0.3106014
> ranger_scram$confusion.matrix
1. Democrats (including leaners) 2. Independents 3. Republicans (including leaners)
1. Democrats (including leaners) 1159 0 662 0.3635365
2. Independents 0 0 1 1.0000000
3. Republicans (including leaners) 577 0 1036 0.3577185
> rf_caret_scramble$finalModel["confusion"]
1. Democrats (including leaners) 2. Independents 3. Republicans (including leaners) class.error
1. Democrats (including leaners) 1315 0 506 0.2778693
2. Independents 0 0 1 1.0000000
3. Republicans (including leaners) 666 0 947 0.4128952