如何为随机森林分类拟合分类数据类型?

数据挖掘 Python scikit-学习 数据挖掘 随机森林
2021-09-18 02:17:10

我需要通过应用随机森林算法来找到训练数据集的准确性。但是我的数据集类型既是分类的又是数字的。当我试图拟合这些数据时,我得到了一个错误。

'输入包含 NaN、无穷大或对于 dtype('float32') 来说太大的值'。

可能问题出在对象数据类型上。如何在不为应用 RF 进行转换的情况下拟合分类数据?

这是我的代码。

截屏

截屏

截屏

3个回答

您需要将分类特征转换为数字属性。一种常见的方法是使用一次性编码,但这绝对不是唯一的选择。如果您有一个具有大量分类级别的变量,您应该考虑组合级别或使用散列技巧。Sklearn 配备了几种方法(请查看“另见”部分):一种热编码器散列技巧

如果您不致力于 sklearn,则h2o 随机森林实现直接处理分类特征。

据我所知,出现此类错误存在一些问题。第一个是,在我的数据集中存在额外的空间,为什么显示错误,'输入包含 NAN 值;其次,python 不能处理任何类型的对象值。我们需要将此对象值转换为数值。为了将对象转换为数字,存在两种类型的编码过程:标签编码器和一种热编码器。其中标签编码器对 0 到 n_classes-1 之间的对象值进行编码,一个热编码器对 0 到 1 之间的值进行编码。在我的工作中,在为任何类型的分类方法拟合我的数据之前,我使用标签编码器来转换值,并且在转换之前我确保我的数据集中不存在空格。

是的,你可以用数字化,df.category_name.codes但你会看到 1 或 0 或 -1 所以你必须编写这样的函数。

def numericalize(df, col, name, max_n_cat):

    if not is_numeric_dtype(col) and (max_n_cat is None or len(col.cat.categories) > max_n_cat):
        df[name] = col.cat.codes + 1