【发布时间】: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之间的距离短,这是错误的
标签: python scikit-learn classification categorical-data