【问题标题】:Why sklearn.tree.DecisionTreeClassifier and sklearn.ensemble.RandomForestClassifier don't accept categorial input variables?为什么 sklearn.tree.DecisionTreeClassifier 和 sklearn.ensemble.RandomForestClassifier 不接受分类输入变量?
【发布时间】:2020-09-03 15:01:21
【问题描述】:

决策树算法和随机森林算法自然适用于分类数据(输入和输出)。为什么实现 sklearn.tree.DecisionTreeClassifier 和 sklearn.ensemble.RandomForestClassifier 不能处理分类输入数据?

【问题讨论】:

  • 所有 scikit-learn 都被设计成只接受数字输入。查看OneHotEncoder 将您的分类级别转换为可以建模的虚拟特征
  • 您的问题和预期答案究竟是什么?对其原理的设计/工程解释?

标签: python machine-learning scikit-learn


【解决方案1】:

Scikit-learn 严重依赖于 Numpy/Scipy,它本机地处理数字数据。我们需要将每个文本类别转换为数字,以便算法使用数学方程式处理它们。如果使用决策树来选择具有最小基尼杂质值的节点,我们应该将它们概括为具有多个级别的类别。

需要注意的是,这些细节取决于具体的实现。例如,R 提供了表示分类数据的因子,这些数据由 R 内存中的整数表示。 这一事实也引发了有关该算法的“空间复杂度”的问题。参考文档,在早期版本的 R 中,即使存在一小部分重复,将字符数据存储为一个因素也会更节省空间。但是,相同的字符串现在共享存储,因此在大多数情况下差异很小。 (整数值存储在 4 个字节中,而对字符串的每个引用都需要一个 4 或 8 个字节的指针。)

【讨论】:

  • 机器理解数字,而不是文本”的断言在这里不适用;它也没有解释为什么在其他决策树实现中(尤其是在 R 中)可以直接处理分类特征而无需特殊预处理(例如 one-hot 编码)。可以说,这里的 OP 询问了 scikit-learn 的具体 设计选择
  • 好吧,我应该澄清一下,这些细节取决于具体的实现。 R 提供了因子来表示分类数据,这些数据由 R 内存中的整数表示。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-10-07
  • 1970-01-01
  • 2020-12-25
相关资源
最近更新 更多