代码之家  ›  专栏  ›  技术社区  ›  AdeeThyag

错误:至少有一个类级别不是有效的R变量名

  •  0
  • AdeeThyag  · 技术社区  · 6 年前

    我正在尝试使用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变量名(请参见?制造商名称寻求帮助)。

    > 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 回复  |  直到 6 年前
        1
  •  0
  •   Agile Bean    5 年前

    1. 包含空格
    2. 是空字符串

    如您所见,您的数据帧包含所有三个。

    这些需求的存在是因为每当caret::train()运行基于树的模型(这里是random forests)时,它都会将因子级别转换为用于拆分树的变量。因此,因子级别标签成为变量名。

    因此,对于这些变量中的每一个,可以使用以下代码将级别名称转换为有效标签。

    trainData %>% 
      mutate(Education = factor(Education, 
              labels = make.names(levels(Education))))
    

    labels = 你能做到的 levels = -后者更改数据,而前者更改显示(例如,通过打印(数据帧))。