我正在尝试使用R中的插入符号包在数据集上实现随机森林。查看此站点上的先前示例,我更改了列名和因子级别。似乎没有任何作用。一遍又一遍地得到相同的错误。这是我的代码,数据集的结构和错误:
model_rf = train(Promoted ~ Department + Region+ Education+Gender+ RecruitmentChannel+TrainingNumber+Age+LengthOfService +EmployeePerformance+AvgTrainingPerformance, data=train, method='rf', tuneLength=5, trControl = fitControl)
model_rf
predicteds_rf <- predict(model_rf, newdata=test)
错误:至少一个班级等级无效 R变量名;当类概率为 生成是因为变量名称将被转换为 不提拔,提拔。请使用可以用作 有效的R变量名称(有关帮助,请参见?make.names)。
> str(trainData)
'data.frame': 54808 obs. of 12 variables:
$ EmployeeID : int 65438 65141 7513 2542 48945 58896 20379 16290 73202 28911 ...
$ Department : Factor w/ 9 levels "Analytics","Finance",..: 8 5 8 8 9 1 5 5 1 8 ...
$ Region : Factor w/ 34 levels "region_1","region_10",..: 32 15 11 16 19 12 13 28 13 1 ...
$ Education : Factor w/ 4 levels "","Bachelor's",..: 4 2 2 2 2 2 2 4 2 4 ...
$ Gender : Factor w/ 2 levels "f","m": 1 2 2 2 2 2 1 2 2 2 ...
$ RecruitmentChannel : Factor w/ 3 levels "other","referred",..: 3 1 3 1 1 3 1 3 1 3 ...
$ TrainingNumber : Factor w/ 5 levels "Average training",..: 5 5 5 3 5 3 5 5 5 5 ...
$ Age : Factor w/ 3 levels "Middle Age","Old",..: 1 3 1 1 1 1 1 1 3 1 ...
$ LengthOfService : Factor w/ 6 levels "Junior","Mid Level",..: 6 2 6 6 1 6 2 2 2 2 ...
$ EmployeePerformance : Factor w/ 7 levels "Average Performer",..: 4 3 5 7 5 5 5 5 3 4 ...
$ AvgTrainingPerformance: Factor w/ 6 levels "Average","Below Average",..: 5 1 2 2 4 6 2 1 6 2 ...
$ Promoted : Factor w/ 2 levels "Not Promoted",..: 1 1 1 1 1 1 1 1 1 1 ...
如果有人可以给我一些建议,那将是一个很大的帮助。非常感谢。
答案 0 :(得分:0)
因子水平的有效名称应不
如您所见,您的数据框包含所有这三个。
之所以存在这些要求,是因为每当caret :: train()运行基于树的模型(此处为随机森林)时,它都会将因子级别转换为用于拆分树的变量。因此,因子级别标签成为变量名。
因此对于这些变量中的每一个,您都可以使用以下代码将级别名称转换为有效的标签。
trainData %>%
mutate(Education = factor(Education,
labels = make.names(levels(Education))))
您可以执行labels =
而不是levels =
-后者更改数据,而前者更改显示(例如,通过print(dataframe))。