圖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/