我正在使用fastai
Intro to Machine Learning course,并且在
Lesson 1他使用了Kaggle在
Blue Book for Bulldozers dataset的随机森林.
在对我的一个奇怪的举动中,教师没有使用来自SKlearn的pd.get_dummies()或OneHotEncoder来处理分类数据.相反,他在所有分类列上调用了pd.Series.cat.codes.
我注意到当调用thefit()方法时,它使用pd.Series.cat.codes在数据集上计算得更快(大约1分钟),而虚拟变量的数据集在我运行的虚拟服务器上崩溃了60 GB的RAM.
每个数据帧占用的内存大约相同…….. 54 MB.我很好奇为什么一个数据帧的性能比另一个更高?
是因为对于单个整数列,随机森林只考虑该列的平均值作为其切割点,从而使计算更容易吗?或者是别的什么?
最佳答案 为了更好地理解这一点,我们需要研究基于树的模型的工作.在基于树的算法中,数据基于特征及其值被分成多个区间.分裂算法考虑所有可能的分裂并学习最佳分裂(最小化的杂质).
当我们考虑分割的连续数字特征时,会有一些树可以分割的组合.
分类特征处于不利地位,只有少数分裂选项,导致决策树非常稀疏.只有两个级别的类别会变得更糟.
还创建虚拟变量以避免模型学习虚假的正常性.由于基于树的模型基于拆分原理工作,因此这不是问题,也不需要创建虚拟变量.