Scikit-Learn 中的分类数据转换

Posted

技术标签:

【中文标题】Scikit-Learn 中的分类数据转换【英文标题】:Categorical data transformation in Scikit-Learn 【发布时间】:2015-03-07 13:06:43 【问题描述】:

我有一个用于分类任务的 4000 万 x 22 numpy 整数数据数组。 大多数特征是分类数据,使用不同的整数值来表示不同的类别。例如,在“颜色”列中:0 表示蓝色,1 表示红色,依此类推。我已经使用 LabelEncoder 对数据进行了预处理。

    将这些数据拟合到 SK-learn 中的任何分类模型中是否有意义?我试图将数据拟合到随机森林模型中,但准确性极差。我也尝试过 One Hot Encoding 将数据转换为虚拟变量,但是我的计算机在使用 One Hot Encoding 后只能处理稀疏矩阵,问题是随机森林只能取密集矩阵,这会超出我计算机的内存。 在 SK-learn 中处理分类数据的正确策略是什么?

【问题讨论】:

在尝试处理 4000 万行数据之前,我会减少您的训练数据大小并首先确定哪些特征最有用。 RandomForest 有一个属性feature_importances_,它会告诉你它认为最有用的特性是什么:scikit-learn.org/stable/modules/… 感谢您的帮助!我不知道 sklearn 有这个。 【参考方案1】:

LabelEncoder 在您的情况下没用,因为输出数字作为数字没有任何意义(即对它们执行算术运算是没有意义的)。 OneHotEncoder 在处理分类数据时必不可少。

最近在随机森林和决策树中使用 sklearn got support for sparse input,因此您可能想查看最新版本。此外,LogisticRegression 等其他方法也支持稀疏数据。

此外,我认为您不需要使用全部 40M 的示例来获得不错的准确性。随机抽取 100k 个样本就足够了(这个数字取决于 OneHotEncoding 之后的特征数量、它们的可变性和目标类的数量)。

【讨论】:

哇!那是好消息!我目前使用的是最新的稳定版本 0.15.2。我应该更新到最新的开发版本吗?抱歉,我不知道如何为那个 git merge 找到正确的版本。 @JimGB,我不熟悉 sklearn 的版本政策,所以当我需要稀疏的随机森林时,我刚刚签出了master

以上是关于Scikit-Learn 中的分类数据转换的主要内容,如果未能解决你的问题,请参考以下文章

使用scikit-learn 估计器分类

Python Scikit-Learn 库中分类数据的异常值预测

python将scikit-learn自带数据集转换为pandas dataframe格式

在 scikit-learn 中拟合数据与转换数据

如何将此 scikit-learn 部分转换为 pandas 数据框? [复制]

如何将数据从 Scikit-learn Bunch 对象转换为 Pandas DataFrame?