使用类别和连续特征对大型数据文件进行预处理

9

首先感谢您阅读我的问题,如果您能提供任何线索帮助我解决这个问题,我将不胜感激。

由于我对Scikit-learn很陌生,请不要犹豫,提供任何有助于改进过程和使其更专业的建议。

我的目标是将数据分类为两个类别。我希望找到一种解决方案,可以给我最精确的结果。目前,我仍在寻找最合适的算法和数据预处理方法。

我的数据中有24个值:13个名义值,6个二进制化值,其他是连续值。以下是一行的示例:

"RENAULT";"CLIO III";"CLIO III (2005-2010)";"Diesel";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行上进行测试。

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

我尝试了几件事情:

  1. LabelEncoder:这很不错,但它给我提供了有序的值,这可能会被分类器误解。
  2. OneHotEncoder:如果我理解正确,它非常适合我的需求,因为我可以选择要二进制化的列。但是由于我有很多名义值,它总是会出现MemoryError。此外,它的输入必须是数字,因此必须先将所有内容LabelEncode。
  3. StandardScaler:这很有用,但不是我需要的。我决定将其集成到缩放我的连续值中。
  4. FeatureHasher:起初我不明白它的作用。然后,我发现它主要用于文本分析。我试图将其用于我的问题。我通过创建一个包含转换结果的新数组来欺骗它。我认为它不是为以那种方式工作而构建的,甚至不合逻辑。
  5. DictVectorizer:可能有用,但看起来像OneHotEncoder,并且会在内存中放置更多数据。
  6. partial_fit:只有5个分类器提供了此方法。我希望能够至少使用Perceptron、KNearest和RandomForest来完成它,以便它符合我的需求。

我查看了文档,并在预处理特征提取页面上找到了这些信息。

我希望有一种方法可以对所有名义值进行编码,以便它们不会被视为有序。这个解决方案适用于具有许多类别和弱资源的大型数据集。

有没有我没有探索过的方法可以满足我的需求?

感谢任何线索和建议。


但它给我有序的值,这可能会被分类器误解。 - AGS
正如预处理文档所述,如果我给我的名义值一个增量整数,它们将被视为连续值。例如:A=1,B=2,C=3。这里A和B之间的距离将比A和C之间的距离更短,这是错误的。 - RPresle
1个回答

1

为了转换无序分类特征,您可以尝试在 pandas 中使用 get_dummies,更多细节可以参考其 文档。另一种方法是使用 catboost,它可以直接处理分类特征,而不需要将它们转换为数值类型。


如果我使用get_dummies函数,当我调用fit()时,如何将这些列标识为我的因变量(y)? @Erik - Matthew Arthur

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接