【问题标题】:Feature Importance for machine learning models in (Caret)package(Caret) 包中机器学习模型的特征重要性
【发布时间】:2020-10-07 14:41:19
【问题描述】:

我对 Caret 包中的特征重要性函数有疑问。

我有一个具有更多数字和因子特征的数据集。 我使用下面的命令来获取模型的特征重要性。它给了我每个(sub_feature)对于因子变量的重要性。但是,我只想了解功能本身的重要性,而没有详细介绍功能的每个因素。

gbmImp

【问题讨论】:

    标签: r variables r-caret feature-selection


    【解决方案1】:

    我将创建一些示例数据,因为我们没有您的问题:

    library(caret)
    
    # example data
    df <- data.frame("x" = rnorm(100),
                     "fac" = as.factor(sample(c(rep("A", 30), rep("B", 35), rep("C", 35)))),
                     "y" = as.numeric((rpois(100, 4))))
    # model
    model <- train(y ~ ., method = "glm", data = df)
    # feature importance
    varImp(model, scale = TRUE)
    

    这会返回您不希望在问题中出现的特征重要性:

    # glm variable importance
    #
    #      Overall
    # facB  100.00
    # facC   13.08
    # x       0.00
    

    您可以将因子变量转换为数字并做同样的事情:

    # make the factor variable numeric
    trans_df <- transform(df, fac = as.numeric(fac))
    # model
    trans_model <- train(y ~ ., method = "glm", data = trans_df)
    # feature importance
    varImp(trans_model, scale = TRUE)
    

    这会返回“整体”特征的重要性:

    # glm variable importance
    # 
    #     Overall
    # x       100
    # fac       0
    

    但是,我不知道当我们运行varImp(trans_model, scale = TRUE) 时,对因子变量的as.numeric() 操作是否不会导致不同的特征重要性。

    另外,如果您发现您的特定因子/字符变量在转换为数字时有问题,请查看this SO thread

    【讨论】:

      猜你喜欢
      • 2019-11-07
      • 1970-01-01
      • 2021-01-06
      • 2022-12-10
      • 1970-01-01
      • 2014-03-11
      • 2014-02-12
      • 2019-07-14
      • 1970-01-01
      相关资源
      最近更新 更多