motivation:讓模型學習到更復雜的非線性特征。
method:原始特征 + 組合特征。
notes:
連續特征和離散特征都可以做交叉。
HOW TO?
離散特征:笛卡爾積
比如屬性A有三個特征,屬性B有兩個特征,笛卡爾積后就有六個組合特征,然后用one hot 或其他embedding方式給新的特征編碼。
問題:這種暴力做交叉很可能導致特征稀疏的問題。
連續特征:
除了一般對於連續型特征的加減乘除生成新的特征以外,還可以對多個特征(連續特征離散化)進行組合。
構造多項式
多項式生成函數:
sklearn.preprocessing.PolynomialFeatures(degree=2, interaction_only=False, include_bias=True)
示例:
from sklearn.preprocessing import PolynomialFeatures x = np.arange(6).reshape(3,2) print x [[0 1] [2 3] [4 5]] poly = PolynomialFeatures()#默認輸入兩個參數 help(poly) poly.fit_transform(x) array([[ 1., 0., 1., 0., 0., 1.], [ 1., 2., 3., 4., 6., 9.], [ 1., 4., 5., 16., 20., 25.]])
input_feature = (x1,x2), output_feature =
特征組合與業務理解
日常工作場景中的特征往往都是以用戶和其對應的屬性作為出發點,然后和物品對應的屬性特征或者上下文特征進行交叉組合,比如:
- 用戶與類別特征組合(eg:電商平台中,用戶在不同類別下的點擊次數,可以簡單衡量用戶的類別偏好)
- 用戶不同年齡檔與類別特征組合(eg:新聞平台中,少年用戶在娛樂新聞下的點擊次數會比較高,青年用戶在社會新聞下的點擊次數會比較高)
- 用戶身份與時間特征組合(eg:學生周六周日、節假日,在某娛樂APP內的行為會比較豐富,上班族早晚高峰,在某娛樂APP內的行為會比較豐富)
- 用戶的價格偏好與物品的價格級別特征組合(eg:用戶A偏好的價格級別為中,物品的價格級別為高,那么組合特征就是0,即兩者不匹配)
在實際的場景中,往往會結合數據分析去挖掘潛在的價值特征組合。這時候便會借助數據分析、數據挖掘、分析者的敏感直覺和對業務的深入理解去進行挖掘。例如,不同人群對於APP推送消息的處理風格和處理時間很不一樣,有的人會直接划掉,有的人則會在某個時間段進行消息查看,這時候便可以考慮對用戶Push消息提供個性化時間分發,從而提高用戶的打開率。