特征组合

图1. 线性问题

对于图1,可以画一条线将黄点和蓝点分开,这是个线性问题,这条线并不完美,有一两个蓝点可能落在了黄点的一侧,但画的这条线可以很好地做出预测。

图2. 非线性问题

对于图2,显然不能画一条直线将黄点和蓝点清晰地分开,这是个非线性问题。

要解决图2的非线性问题,可以创建一个特征组合。特征组合是指通过将两个或多个输入特征相乘来对特征空间中的非线性规律进行编码的合成特征。“cross”(组合)这一属于来自cross product(向量积)。通过将组合来创建一个名为的特征组合:

像处理任何其他特征一样来处理这个新建的特征组合。线性公式变为:

线性算法可以算出的权重,就像算出的权重一样。换言之,虽然表示非线性信息,但不需要改变线性模型的训练方式来确定的值。

特征组合的种类

  可以创建很多不同种类的特征组合。例如:

    • [A x B]:将两个特征的值相乘形成的特征组合。
    • [A x B x C x D x E]:将五个特征的值相乘形成的特征组合。
    • [A x A]:对单个特征的值求平方形成的特征组合。

  通过采用随机梯度下降法,可与有效地训练线性模型。因此,在使用扩展的线性模型时辅以特征组合一直都是训练大规模数据集的有效方法。

在实践中,机器学习模型很少会组合连续特征。不过,机器学习模型却经常组合one-hot特征矢量,将one-hot特征矢量的特征组合视为逻辑连接。例如,假设具有以下两个特征:国家/地区和语言。对每个特征进行one-hot编码会生成具有二元特征的矢量,这些二元特征克解读为country=USA,country=France或language=English,language=Spanish。然后,如果对这些one-hot编码进行特征组合,则会得到可解读为逻辑连接的二元特征,如下所示:

  country: usa AND language:spanish

再举一个例子,假设对纬度和经度进行分箱,获得单独的one-hot5元素特征矢量。例如,指定的纬度和经度可以表示如下:

  binned_latitude=[0, 0, 0, 1, 0]

  binned_longitude=[0, 1, 0, 0, 0]

假设对这两个特征矢量创建了特征组合:

  binned_latitude X binned_longitude

此特征组合是一个25元素one-hot矢量(24个0和1个1)。该组合中的单个1表示纬度与经度的特定连接。然后,你的模型就可以了解到有关这种连接的特定关联性。

假设更粗略地对纬度和经度进行分箱,如下所示:

  binned_latitude(lat) = [

   0 < lat <= 10

   10 < lat <= 20

      20 < lat <= 30 

  ]

  binned_longitude(lon) = [

    0 < lon <=15

   15 < lon <=30

  ]

针对这些粗略分箱创建特征组合会生成具有以下含义的合成特征:

  binned_latitude_X_longitude(lat, lon) = [

    0 < lat <=10 AND 0 < lon <= 15

    0 < lat <=10 AND 15 < lon <= 30

    10 < lat <= 20 AND 0 < lon <= 15

    10 < lat <= 20 AND 15 < lon <=30

    20 < lat <= 30 AND 0 < lon <=15

    20 < lat <=30 AND 15 < lon <= 30

  ]

现在,假设我们的模型需要根据以下两个特征来预测狗主人对狗狗的满意程度:

  • 行为类型(吠叫、叫、依偎等)
  • 时段

如果根据这两个特征构建以下特征组合:

  [behavior type X time of day]

最终获得的预测能力将远远超过任一特征单独的预测能力。例如,如果狗狗在下午5点主人下班回来时(快乐地)叫喊,可能表示对主人满意度的正面预测结果。如果狗狗在凌晨3点主人熟睡时(也许痛苦地)哀叫,可能表示对主人满意度的强烈负面预测结果。

线性学习器可以很好地扩展到大量数据。对大规模数据集使用特征组合是学习高度复杂模型的一种有效策略。神经网络可提供另一种策略。

 

参考资料:

https://developers.google.com/machine-learning/crash-course/

posted on 2018-10-16 18:18  Peyton_Li  阅读(582)  评论(0编辑  收藏  举报

导航