预处理具有分类和连续特征的大型数据文件

Posted

技术标签:

【中文标题】预处理具有分类和连续特征的大型数据文件【英文标题】:Preprocess large datafile with categorical and continuous features 【发布时间】:2015-06-19 16:31:27 【问题描述】:

首先感谢您阅读我的内容,如果您能提供任何线索帮助我解决此问题,非常感谢。

由于我是 Scikit-learn 的新手,请不要犹豫,提供任何可以帮助我改进流程并使其更加专业的建议。

我的目标是在两个类别之间对数据进行分类。我想找到一个能给我最精确结果的解决方案。目前,我仍在寻找最合适的算法和数据预处理。

在我的数据中,我有 24 个值:13 个是标称值,6 个是二值化的,其他是连续的。这是一行的示例

“雷诺”;“CLIO III”;“CLIO III (2005-2010)”;“柴油”;2010;“HOM”;“_AAA”;“_BBB”;“_CC”;0;668.77;3; "Fevrier";"_DDD";0;0;0;1;0;0;0;0;0;0;247.97

我有大约 900K 行可供学习,我的测试超过 100K 行

由于我想比较几种算法实现,我想对所有标称值进行编码,以便可以在多个分类器中使用它。

我尝试了几件事:

    LabelEncoder :这非常好,但它给了我分类器错误解释的有序值。 OneHotEncoder :如果我理解得很好,它非常适合我的需求,因为我可以选择要二值化的列。但由于我有很多标称值,它总是出现在 MemoryError 中。此外,它的输入必须是数字,因此必须对之前的所有内容进行 LabelEncode。 StandardScaler:这非常有用,但不是我需要的。我决定整合它来扩展我的连续值。 FeatureHasher:首先我不明白它的作用。然后,我看到它主要用于文本分析。我试图用它来解决我的问题。我通过创建一个包含转换结果的新数组来作弊。我认为它不是为那样工作而设计的,甚至不合逻辑。 DictVectorizer :可能很有用,但看起来像 OneHotEncoder 并将更多数据放入内存。 partial_fit :此方法仅由 5 个分类器给出。我希望至少能够使用 Perceptron、KNearest 和 RandomForest 来做到这一点,因此它不符合我的需求

我查看了文档并在页面Preprocessing 和Feature Extraction 上找到了这些信息。

我想有一种方法来编码所有标称值,这样它们就不会被认为是有序的。该方案适用于类别多、资源薄弱的大型数据集。

有什么我没有探索的方法可以满足我的需求吗?

感谢您提供任何线索和建议。

【问题讨论】:

"但它给了我分类器会错误解释的有序值。" 这是什么意思? 正如preprocessing documentation 上所写。如果我给我的标称值一个增量整数,它们将被视为连续值。示例:A=1,B=2,C=3。这里A和B之间的距离会比A和C之间的距离短,这是错误的 【参考方案1】:

要转换无序的分类特征你可以试试get_dummies in pandas,更多细节可以参考它的documentation。另一种方法是使用catboost,它可以直接处理分类特征,而不需要将它们转换为数值类型。

【讨论】:

如果我 get_dummies 在我调用 fit() 时将这些列标识为我的依赖 (y) 变量的语法是什么? @埃里克

以上是关于预处理具有分类和连续特征的大型数据文件的主要内容,如果未能解决你的问题,请参考以下文章

机器学习实战基础:sklearn中的数据预处理和特征工程 数据预处理 Preprocessing & Impute 之 处理分类特征:处理连续性特征 二值化与分段

在 R 中处理大型数据集

如何使用 python 运行具有分类特征的 Spark 逻辑回归?

决策树模型本质连续值

具有分类特征的线性回归分析

如何在python中对没有标题的大型csv信号文件进行分类?