在随机森林中使用“一个热”编码的因变量

Posted

技术标签:

【中文标题】在随机森林中使用“一个热”编码的因变量【英文标题】:Using "one hot" encoded dependent variable in random forest 【发布时间】:2019-05-04 12:36:12 【问题描述】:

我正在使用 sklearn-learn 在 python 中构建一个随机森林,并且我已经对所有分类变量应用了“one hot”编码。问题:如果我对我的 DV 应用“one hot”, 我应该将其所有虚拟列都应用为 DV,还是应该以不同方式处理 DV?

【问题讨论】:

简短回答:您可以在没有一个热编码决策变量的情况下构建模型。 【参考方案1】:

您需要对值不是数字的所有列应用 one-hot 编码。您可以使用 one-hot 处理 DV,也可以使用其他编码处理其他非数字列。例如:假设有一列带有城市名称,您需要将其更改为数字形式。这称为数据成型。您也可以在没有 one-hot 的情况下进行这种成型。

例如:有糖尿病的 DV 列,条目为“是”和“否”。这没有 one-hot 编码。

diabetes_map = True : 1, False : 0
df['diabetes'] = df['diabetes'].map(diabetes_map)

【讨论】:

最好把投反对票的原因说清楚,以便更正答案。【参考方案2】:

取决于您遇到的问题类型。对于二元或多类问题,您不需要对scikit-learn 中的一个热编码因变量。进行 one-hot 编码会将输出变量的形状从一维更改为多维。这称为标签指示矩阵,其中每一列表示该标签的存在或不存在。

例如,对以下内容进行 one-hot 编码:

['high', 'medium', 'low', 'high', 'low', 'high', 'medium']

将返回:

high    medium    low
 1        0        0
 0        1        0
 0        0        1
 1        0        0
 0        0        1
 1        0        0
 0        1        0

并非scikit-learn 中的所有分类器都能够支持这种格式,(即使它们支持多类分类)即使在那些支持这种格式的分类器中,这将触发多标签分类(其中可以同时存在多个标签),这是您在多类问题中不想要的。

【讨论】:

以上是关于在随机森林中使用“一个热”编码的因变量的主要内容,如果未能解决你的问题,请参考以下文章

在随机森林中的树中的每个节点处随机选择变量

单标签多类分类随机森林python

将条件变量添加到 R 中的随机森林模型

R和sklearn中的随机森林

r 随机森林错误 - 新数据中的预测变量类型不匹配

如何使用 R 在随机森林中生成决策树图和变量重要性图?