图1. 线性问题git
对于图1,能够画一条线将黄点和蓝点分开,这是个线性问题,这条线并不完美,有一两个蓝点可能落在了黄点的一侧,但画的这条线能够很好地作出预测。算法
图2. 非线性问题网络
对于图2,显然不能画一条直线将黄点和蓝点清晰地分开,这是个非线性问题。机器学习
要解决图2的非线性问题,能够建立一个特征组合。特征组合是指经过将两个或多个输入特征相乘来对特征空间中的非线性规律进行编码的合成特征。“cross”(组合)这一属于来自cross product(向量积)。经过将与
组合来建立一个名为
的特征组合:学习
像处理任何其余特征同样来处理这个新建的特征组合。线性公式变为:google
线性算法能够算出的权重,就像算出
和
的权重同样。换言之,虽然
表示非线性信息,但不须要改变线性模型的训练方式来肯定
的值。编码
特征组合的种类spa
能够建立不少不一样种类的特征组合。例如:3d
经过采用随机梯度降低法,可与有效地训练线性模型。所以,在使用扩展的线性模型时辅以特征组合一直都是训练大规模数据集的有效方法。blog
在实践中,机器学习模型不多会组合连续特征。不过,机器学习模型却常常组合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/