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 中的分类数据转换的主要内容,如果未能解决你的问题,请参考以下文章
Python Scikit-Learn 库中分类数据的异常值预测
python将scikit-learn自带数据集转换为pandas dataframe格式