机器学习中的特征构建和归一化

机器算法验证 机器学习 特征工程
2022-03-04 19:50:29

假设我想为电影 M 创建一个逻辑分类器。我的特征可能是人的年龄、性别、职业、位置。所以训练集会是这样的:

  • 年龄 性别 职业 地点 喜欢(1)/不喜欢(0)
  • 23 M 软件 美国 1
  • 24 F 英国医生 0

等等....现在我的问题是我应该如何缩放和表示我的特征。我想到的一种方法:将年龄划分为年龄组,因此 18-25、25-35、35 岁以上,性别为 M、F,位置为美国、英国、其他。现在为所有这些值创建一个二元特征,因此年龄将有 3 个二元特征,每个特征对应一个年龄组,依此类推。因此,来自美国的 28 岁男性将表示为 010 10 100(010-> 年龄组 25-35、10 -> 男性、100 -> 美国)

在这里表示特征的最佳方式是什么?另外,我注意到一些例如 sklearn 的所有特征都以某种方式进行了缩放/标准化,例如,性别由两个值表示,男性和女性分别为 0.0045 和 -.0.0045。我不知道如何像这样进行缩放/规范化?

1个回答

二进制大小写

如果您希望您的特征是二进制的,分类(resp. real)值的良好表示是一种热(resp. thermometer)编码。不需要标准化它们。

对于分类特征的单一热编码,您只需为每个类保留一位。因此,此编码的长度就是您的特征的类别数。让我们以你的国家为例,

  • 00001 代表美国
  • 00010 代表英国
  • 00100 代表亚洲
  • 01000 代表欧洲
  • 10000 其他

对于实数/整数特征的温度计编码,您必须选择长度和阈值。对于您的年龄示例,您选择根据阈值 18,25 和 35 拆分年龄。编码将是

  • 000 代表 0-17
  • 001 代表 18-25
  • 011 代表 25-34
  • 35岁以上111

将两者放在一起,您将在此处获得大小为 5+3=8 位的编码。对于一个 30 岁的英国居民,我们有

00010UK01130yo

连续案例

如果您的回归模型允许,您应该更喜欢为包含更多信息的实数/整数特征保留实值。让我们重新考虑您的示例。这次我们简单地将年龄的值设为整数。因此,30 岁英国居民的编码是

00010UK3030yo

正如 BGreene 所说,您应该对该值进行归一化以保持平均值为 0 和标准差为 1,从而确保许多回归模型的稳定性。为此,只需减去经验平均值并除以经验标准差。

Y_normalized = ( Y - mean(Y) ) / std(Y)

如果您的数据库中所有人的所有年龄的平均值为 25,其标准差为 10,则为 30 岁的归一化值。person 将是,导致表示 (3025)/10=0.5

00010UK0.530yo