Случайный лес, в котором отсутствуют независимые переменные при прогнозировании

#r #random-forest #prediction

Вопрос:

Я работаю с набором данных из 14 тысяч строк со следующей независимой переменной, которая была изменена на факторы. Я использую randomForest для прогнозирования будущего падения на основе, когда я запускаю уравнение RF, вывод генерирует прогнозы только для 2 из 3 recent_fall переменных. Я попытался изменить ntree , mtry , и nodesize , но я не могу сгенерировать прогноз с 3 переменными. Я все еще очень новичок в R и анализе данных, поэтому любые предложения/советы будут высоко оценены. Спасибо!

Исходный набор данных(обучающий набор)

 full_id lt;- c("10019CNI", "10021YGW", "10043XFI", "10069AGJ", "10085CEW", "10093GTB", "10107OSZ", "10154ETO", "10174HKD", "10245RUI", "10270WID", "10292RMS", "10334TXS", "10367NMM", "10480SUN", "10482VXQ", "10489EHV", "10496MIO", "10524KKX", "10619WSC")  recent_fall lt;- c("no fall", "minor fall", "major fall", "major fall", "no fall", "no fall", "major fall", "minor fall", "major fall", "no fall", "minor fall", "minor fall", "major fall", "minor fall", "minor fall", "no fall", "no fall", "major fall", "major fall", "no fall")  er_visit lt;- c("hospitalized", "no visit", "no visit", "hospitalized", "no visit", "no visit", "no visit", "no visit", "no visit", "no visit", "no visit", "hospitalized", "hospitalized", "hospitalized", "hospitalized", "no visit", "no visit", "no visit", "hospitalized", "no visit")  age lt;- c(75, 89, 90, 90, 78, 80, 83, 91, 93, 72, 79, 82, 82, 90, 86, 70, 71, 93, 85, 95)  gender lt;- c("male", "male", "male", "female", "male", "male", "female", "female", "female", "male", "male", "male", "male", "male", "male", "female", "male", "male", "female", "female")  dx lt;- c("incontinence", "parkinsons", "stroke", "blind", "diabetes", "diabetes", "heart failure", "stroke", "heart attack", "uc", "incontinence", "cancer", "heart attack", "chf", "uc", "heart failure", "vertigo", "cancer", "alzheimers", "asthma")  

Набор тестовых данных RF(набор тестов )

 age_test lt;- c(74, 78, 79, 93, 87, 94, 86, 80, 90, 83, 82, 86, 74, 80, 78, 86, 80, 93, 72, 84)  gender_test lt;- c("female", "female", "male", "male", "female", "female", "male", "male", "female", "male", "male", "female", "female", "female", "male", "male", "male", "female", "female", "female")  dx_test lt;- c("asthma", "heart failure", "chf", "hearing loss", "incontinence", "diabetes", "chf", "copd", "ptsd", "diabetes", "diabetes", "stroke", "dementia", "copd", "vertigo", "none", "diabetes", "none", "cancer", "heart attack")  

Структура фрейма данных(обучающий набор)

 'data.frame': 14712 obs. of 9 variables:  $ full_id : chr "10000JTS" "10001NVH" "10002TJZ" "10003NQJ" ...  $ birth_month_year: chr "Nov-45" "Aug-33" "May-43" "Nov-41" ...  $ age : int 76 88 78 80 78 91 73 76 78 69 ...  $ gender : Factor w/ 2 levels "female","male": 1 1 2 1 1 2 1 1 2 2 ...  $ dx : Factor w/ 22 levels "alzheimers","amputee",..: 14 17 19 5 10 10 13 19 12 21 ...  $ recent_fall : Factor w/ 3 levels "major fall","minor fall",..: 3 3 3 1 3 2 3 3 2 2 ...  $ er_visit : Factor w/ 2 levels "hospitalized",..: 2 2 2 1 2 1 2 2 2 1 ...  $ id : int 1 2 3 4 5 6 7 8 9 10 ...  

Матрица путаницы

 randomForest(recent_fall~.,data=pt_data_new, ntree=500, mtry = 3)  
 Call:  randomForest(formula = recent_fall ~ ., data = pt_data_new, ntree = 500, mtry = 3)   Type of random forest: classification  Number of trees: 500 No. of variables tried at each split: 3   OOB estimate of error rate: 39.66% Confusion matrix:  major fall minor fall no fall class.error major fall 359 1524 883 0.8702097 minor fall 567 2838 1830 0.4578797 no fall 159 872 5680 0.1536284  

Радиочастотное уравнение

 fall.equation lt;- "recent_fall ~ age   full_id   gender   dx" fall.formula lt;- as.formula(fall.equation)  fall.model lt;- randomForest(formula=fall.formula,  data=pt_data_new,  ntree = 500,  mtry = 3,  nodesize = 0.01*nrow(pt_data_new)  )  Fall.Prediction lt;- predict(fall.model,newdata=fall_test_new)  PtID lt;- fall_test_new$id output.df lt;- as.data.frame(PtID)  output.df$Fall.Prediction lt;- Fall.Prediction  write.csv(output.df,"fall.prediction.csv",row.names = FALSE)  

Предсказанный recent_fall

 Fall.Prediction total_percent lt;chrgt; lt;chrgt; minor fall 44% no fall 56%  

Исходные recent_fall переменные набора данных и распределение

 recent_fall total_percent lt;fctgt; lt;chrgt; major fall 19% minor fall 36% no fall 46%  

Комментарии:

1. Может быть недостаточно информации для модели, недостаточно примеров серьезного падения. Но в вашем уравнении rf есть идентификатор (full_id). Вам нужно их удалить. Нет recent_fall ~ age full_id gender dx , но recent_fall ~ age gender dx

2. Вы original dataset (обучающий набор?), RF test dataset (тестовый набор?) и dataframe structure (из чего?) не совпадаете по переменным и типам переменных. Кроме того, в вашем наборе тестов (я полагаю), похоже, нет переменной наблюдения. Поэтому, по-видимому, довольно невозможно рассчитать показатели производительности моделей с помощью матрицы путаницы. Не могли бы вы, пожалуйста, исправить это? @Никмиранте

3. Вопрос для вас @Roman-Поскольку я новичок в области R и ML, можете ли вы дать некоторые рекомендации относительно того, что должен включать набор тестов на основе набора тренировок? Original dataset = обучающий набор, RF test dataset = набор тестов, Dataframe structure = структура обучающего набора