在随机森林中使用“一个热”编码的因变量
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
中的所有分类器都能够支持这种格式,(即使它们支持多类分类)即使在那些支持这种格式的分类器中,这将触发多标签分类(其中可以同时存在多个标签),这是您在多类问题中不想要的。
【讨论】:
以上是关于在随机森林中使用“一个热”编码的因变量的主要内容,如果未能解决你的问题,请参考以下文章