使用分类和连续功能预处理大型数据文件

时间:2015-04-14 06:55:50

标签: python scikit-learn classification categorical-data

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

由于我是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中。此外,它的输入必须是数字的,因此必须事先标记所有内容。
  3. StandardScaler:这非常有用,但不是我需要的。我决定整合它以扩展我的连续价值。
  4. FeatureHasher:首先我不明白它的作用。然后,我看到它主要用于文本分析。我试着用它来解决我的问题。我通过创建一个包含转换结果的新数组来欺骗。我认为它不是以这种方式工作而构建的,它甚至不符合逻辑。
  5. DictVectorizer:可能很有用,但看起来像OneHotEncoder,并在内存中放入更多数据。
  6. partial_fit:此方法仅由5个分类器给出。我希望能够用Perceptron,KNearest和RandomForest这样做,至少它不符合我的需求
  7. 我查看了文档,并在页面PreprocessingFeature Extraction上找到了这些信息。

    我想有办法对所有名义值进行编码,以便它们不会被视为有序。此解决方案可应用于具有大量类别和弱资源的大型数据集。

    我有什么方法可以探索不适合我的需求吗?

    感谢任何线索和建议。

1 个答案:

答案 0 :(得分:1)

要转换无序分类功能,您可以在get_dummies中尝试pandas,更多详情可参考其documentation。另一种方法是使用catboost,它可以直接处理分类要素而不将它们转换为数字类型。