sklearn中的随机森林
Random forest in sklearn
我试图使用 sklearn 的随机森林分类器包来拟合随机森林模型。但是,我的数据集由具有字符串值 ('country') 的列组成。这里的随机森林分类器不取字符串值。它需要所有特征的数值。我想用一些虚拟变量来代替这些列。但是,我对特征重要性图现在的样子感到困惑。会有 country_India、country_usa 等变量。如果我使用 R 进行分析,如何获得国家变量的综合重要性。
您将不得不手工完成。 sklearn 不支持通过特征映射的逆变换来映射分类器特定方法。 R 正在根据多值拆分计算重要性(正如@Soren 解释的那样)——当使用 scikit-learn 时,您将被限制为二进制拆分,并且您必须近似实际重要性。最简单的解决方案之一(尽管有偏见)是存储哪些特征实际上是分类变量的二进制编码,并将这些来自特征重要性向量的结果元素相加。从数学的角度来看,这并不能完全证明是合理的,但这是获得一些粗略估计的最简单的方法。要正确地做到这一点,您应该从头开始重新实现特征重要性,并且只需在计算 "for how many samples the feature is active during classification" 期间,您就必须使用映射将每个样本正确评估一次到实际特征(因为添加虚拟重要性将计算每个虚拟变量在分类路径上,而您想改为执行 min(1, #dummy on path)).
国家的随机枚举(为每个类别分配一些整数)有时会很有效。尤其是在类别很少且训练集很大的情况下。有时比单热编码更好。
一些线程讨论了 sklearn 的两个选项:
https://github.com/scikit-learn/scikit-learn/issues/5442
How to use dummy variable to represent categorical data in python scikit-learn random forest
您还可以选择使用真正支持分类数据的 RF 算法,例如 Arborist(python and R front end)、extraTrees(R, Java, RF'isch) 或 randomForest (右)。为什么 sklearn 选择不支持分类拆分,我不知道。也许实施方便。
在 10 个类别之后尝试进行的可能分类拆分的数量激增,搜索变慢并且拆分可能变得贪婪。 Arborist 和 extraTrees 只会在每个节点中尝试有限的拆分选择。
我试图使用 sklearn 的随机森林分类器包来拟合随机森林模型。但是,我的数据集由具有字符串值 ('country') 的列组成。这里的随机森林分类器不取字符串值。它需要所有特征的数值。我想用一些虚拟变量来代替这些列。但是,我对特征重要性图现在的样子感到困惑。会有 country_India、country_usa 等变量。如果我使用 R 进行分析,如何获得国家变量的综合重要性。
您将不得不手工完成。 sklearn 不支持通过特征映射的逆变换来映射分类器特定方法。 R 正在根据多值拆分计算重要性(正如@Soren 解释的那样)——当使用 scikit-learn 时,您将被限制为二进制拆分,并且您必须近似实际重要性。最简单的解决方案之一(尽管有偏见)是存储哪些特征实际上是分类变量的二进制编码,并将这些来自特征重要性向量的结果元素相加。从数学的角度来看,这并不能完全证明是合理的,但这是获得一些粗略估计的最简单的方法。要正确地做到这一点,您应该从头开始重新实现特征重要性,并且只需在计算 "for how many samples the feature is active during classification" 期间,您就必须使用映射将每个样本正确评估一次到实际特征(因为添加虚拟重要性将计算每个虚拟变量在分类路径上,而您想改为执行 min(1, #dummy on path)).
国家的随机枚举(为每个类别分配一些整数)有时会很有效。尤其是在类别很少且训练集很大的情况下。有时比单热编码更好。
一些线程讨论了 sklearn 的两个选项: https://github.com/scikit-learn/scikit-learn/issues/5442
How to use dummy variable to represent categorical data in python scikit-learn random forest
您还可以选择使用真正支持分类数据的 RF 算法,例如 Arborist(python and R front end)、extraTrees(R, Java, RF'isch) 或 randomForest (右)。为什么 sklearn 选择不支持分类拆分,我不知道。也许实施方便。
在 10 个类别之后尝试进行的可能分类拆分的数量激增,搜索变慢并且拆分可能变得贪婪。 Arborist 和 extraTrees 只会在每个节点中尝试有限的拆分选择。