机器学习中的特征构建和规范化


13

可以说我想为电影M创建一个Logistic分类器。我的特征将是诸如人的年龄,性别,职业,位置之类的东西。因此,训练集将类似于:

  • 年龄性别职业位置Like(1)/ Dislike(0)
  • 23 M软件US 1
  • 24 F Doctor UK 0

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

在这里表示功能的最佳方法是什么?另外,我在一些例子中也注意到了。sklearn的研究表明所有特征均已按某种方式进行了缩放/归一化,例如,性别由两个值分别代表,男性和女性为0.0045和-.0.0045。我不知道如何进行这样的缩放/道德化?


我不清楚,为什么要扩展功能?通常将特征标准化为具有0的均值std dev。您可能需要根据要尝试分类的类来定义问题,逻辑回归对于二进制分类很有用。
BGreene

您当然不希望对年龄进行分类。如何评价“电影的评分”?是1到10的比例,“喜欢/不喜欢”还是什么?
彼得·弗洛姆

为简单起见,让我们假设只有两个类,即Like和Dislike。就像是1和不喜欢是0。已更改问题说明以反映这一点。
snow_leopard 2012年

Answers:


15

二进制情况

如果您希望特征是二进制的,则分类实数)值的良好表示形式是一种热实数温度计)编码。你并不需要正常化他们。

对于分类功能的一种热编码,您只需为每个类保留一位。因此,此编码的长度就是要素的类数。让我们以国家为例,

  • 美国00001
  • 英国的00010
  • 亚洲地区00100
  • 欧洲01000
  • 10000其他

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

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

00010UK01130yo

连续情况

00010UK3030yo

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

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

(3025)/10=0.5

00010UK0.530yo

太酷了,所以可以说我们有一个示例人,例如:国家/地区:英国,年龄组:25-34。如果我们使用一种热编码,这将导致值为Country:2Agegroup:4。现在,在创建特征向量时,我们应该将其标准化。因此,假设它们分别为0.4和0.6,那么我们要建模的输入特征向量实质上变为[0.4,0.6],对吗?
snow_leopard

嗯..如果我使用“一种热门”编码,是否应该将编码值转换为其整数表示形式作为特征,例如0010变为2。还是应该将其视为4个特征的集合,其中只有一个会打开?在前一种情况下,它不是引入了一个概念,即1000比0001再远至0100,再到0100了,这可能不是故意的,因为我们不希望美国要素的价值比英国要素的价值更接近于亚洲或其他东西。
snow_leopard 2012年

我编辑了答案以澄清这些问题。您无需标准化二进制特征,也不必将其视为向量,也不必将其转换为整数。
Emile

真正有用且清晰的解释。谢谢!
乔治·刘
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.