【发布时间】:2019-02-16 04:38:28
【问题描述】:
我可能遗漏了一些东西,但是在遵循了很长一段时间之后(一些高级数据科学家的)对LabelEncoder().fit 的建议仅用于训练数据而不是测试数据,然后我开始思考为什么这真的有必要.
具体来说,在SkLearn,如果我只想在LabelEncoder().fit 训练数据,那么有两种不同的场景:
测试集有一些与训练集相关的新标签。例如,测试集只有标签
['USA', 'UK'],而测试集有标签['USA', 'UK', 'France']。然后,正如其他地方报告的那样(例如Getting ValueError: y contains new labels when using scikit learn's LabelEncoder),如果您尝试根据此LabelEncoder()转换测试集,则会收到错误消息,因为它恰好遇到了一个新标签。测试集与训练集具有相同的标签。例如,训练集和测试集都有标签
['USA', 'UK', 'France']。但是,那么LabelEncoder().fit仅用于训练数据本质上是多余的,因为测试集与训练集具有相同的已知值。
因此,LabelEncoder().fit 仅对训练数据有什么意义,然后LabelEncoder().tranform 训练和测试数据如果在情况 (1) 中会引发错误,如果在情况 (2) 中会引发错误是多余的吗?
让我澄清一下,我见过LabelEncoder().fit 的(知识渊博的)高级数据科学家只针对训练数据,他们已经证明了这一点,因为即使是最简单的模型,测试集也应该是全新的像编码器一样,它不应该与训练数据混合。他们没有提及任何生产或词汇外的目的。
【问题讨论】:
标签: python machine-learning scikit-learn categorical-data