在我开始之前,让我注意做特征工程没有正确和错误的方法。如果你想彻底,你需要尝试一些东西,看看它们是否有效。
现在让我给你我的意见(即我如何处理事情),但不能保证它们会起作用:
1) 其中一个变量可以取 3 个值(Girls、Boys、Girls&Boys)。将其转换为单热编码或二进制编码会将所有三个值视为不同的类。我怎样才能有效地使用它来保留“Girls&Boys”包含的信息?在这种情况下,将女孩和男孩分成两列是唯一的方法吗?
我认为 one-hot 编码在这里效果最好。根据Girls&Boys存储的信息,您可以选择如何对其进行编码。如果Girls&Boys == 1两者都是Girlsand Boysare 1,那么我认为您可以放心地省略它。
2) 年龄范围:(18-35、35-50 等)我将其分解为 2 列 age_min 和 age_max。有没有更好的方法来使用这种具有范围值的特征?
你所做的并不坏。另一种选择是将其视为有序变量,并简单地将每个范围映射到一个数字(同时保留顺序)。例如18-35 --> 1,35-50 --> 2等。
3)百分比范围:只能取5个值(0、1、1-5、5-10、10)。我应该如何使用这个变量来训练我的模型?在这里,由于“1”和“10”固定值,我无法将其分解为 2 列(如年龄)。如何处理具有固定值和范围值的变量?
和以前一样。我会将其视为有序变量。你甚至可以离开0,1就像他们一样。其余的会像这样:1-5 --> 2, 5-10 --> 3, 10 --> 4. 如果这 5 个类别中的某些类别的值很少,您可以将其与相邻的类别合并!
4) 相似性:它也可以取 5 个值(0、1、1-5、5-10、10),但它也有一个“自动”选项。这意味着如果它是“自动”的,它可以采用我们不知道的任何随机值。我应该如何合并它?我应该为“它是否是自动的”创建一个单独的列吗?然后,在原始相似度列中,我应该为“自动”观察值设置什么值。我不能输入“0”,因为它已经是一个值,并且我确信“auto”不会为 0。将其输入“None”会产生差异吗?如何处理未知值?
这里比较棘手。我要做的一件事就是您提到的:拥有一个auto可以是1或者0如果用户选择“自动”或不选择的列。但是,现在对范围进行编码很棘手,因为您将如何对选择“自动”的范围进行编码?一种方法是创建一个单独的类别(例如auto --> 5),但这不适用于序数变量。另一种选择是对其进行一次热编码。我认为您的选择取决于两个原因:a)鉴于“自动”选项,保留范围信息的重要性如何?你能把类别组合在一起吗?你能无视他们的命令吗?b) 有多少样本是“自动”的?如果他们很少,它甚至可能不会有所作为。如果它们太多,那么编码范围可能没有意义。