“巧婦難為無米之炊”截驮,放到數(shù)據(jù)行業(yè)笑陈,“巧婦”是模型,“米”就是數(shù)據(jù)與特征葵袭。正如業(yè)界經(jīng)典的一句話"Garbage in, garbage out"涵妥,如果沒有充足數(shù)據(jù)、合理的特征坡锡,再強大的模型結(jié)構(gòu)也難以得到令人滿意的結(jié)果蓬网。
實際工作中窒所,特征工程是去除數(shù)據(jù)中的雜質(zhì),提煉為更合理的特征帆锋,供算法和模型使用吵取。特征工程主要包括特征歸一化、類型特征的表示窟坐、特征選擇及非結(jié)構(gòu)化數(shù)據(jù)的表示海渊。本文主要介紹特征歸一化及類型特征的表示。
特征歸一化
為了消除特征之間量綱的影響哲鸳,使數(shù)據(jù)處于同一數(shù)量級具有可比性臣疑,需要進行特征歸一化。例如徙菠,分析一個顧客消費粘性與近三個月消費次數(shù)讯沈、消費金額的關(guān)系。消費次數(shù)一般最多幾十次婿奔,但消費金額可能幾千上萬缺狠,那消費粘性就會更受消費金額的影響。想要更準(zhǔn)確的結(jié)果萍摊,需要將特征進行歸一化挤茄,使特征在同一個數(shù)量級下。最常用的歸一化方法是最大最小歸一化冰木、零均值歸一化穷劈。
其中歇终,x為原始數(shù)據(jù),為數(shù)據(jù)最小值逼龟,為數(shù)據(jù)最大值评凝。
python實現(xiàn)方法:
import pandas as pd
import numpy as np
df= pd.DataFrame({'num':np.random.randint(0,50,size=10),
'money':np.random.randint(0,3000,size=10)})
print(df)
df1= (df-df.min())/(df.max()-df.min())
print(df1)
-
零均值歸一化
零均值z-score 歸一化將數(shù)據(jù)映射到均值為0,標(biāo)準(zhǔn)差為1的分布上腺律。歸一化公式定義為:
python實現(xiàn)方法:
df2= (df-df.mean())/df.std()
print(df2)
- 特征歸一化適用情況
歸一化的數(shù)據(jù)奕短,梯度下降可以更快找到最優(yōu)解。因此匀钧,梯度下降求解的模型需要歸一化篡诽,如線性回歸、邏輯回歸榴捡、支持向量機、神經(jīng)網(wǎng)絡(luò)等模型朱浴。但是決策樹模型并不適用吊圾,信息增益跟是否經(jīng)過歸一化無關(guān)达椰。
類別特征處理
類別特征原始數(shù)據(jù)是字符串的,如性別(男项乒、女)等啰劲。因為很多模型對各數(shù)據(jù)進行衡量時,需要依賴數(shù)值關(guān)系檀何,因此要將類別型特征處理成數(shù)值特征蝇裤。類別型編碼常用處理方式有序號編碼、獨熱編碼频鉴、二進制編碼栓辜。
1. 序號編碼
序號編碼適用于數(shù)據(jù)類別間有大小關(guān)系的,如銷售金額分為高垛孔、中藕甩、低三檔,可以分別用3周荐,2狭莱,1表示。
2. 獨熱編碼 OneHot-Encoding
如果數(shù)據(jù)類別沒有大小關(guān)系概作,如訂單來源取值為3個(淘寶腋妙、京東、拼多多)讯榕,獨熱編碼將訂單來源表示為3維稀疏變量骤素。淘寶為[1,0,0],京東為[0,1,0]瘩扼,拼多多為[0,0,1]谆甜。
如果類別取值過多,獨熱編碼要注意以下問題:
(1) 用稀疏向量表示節(jié)省空間
(2) 配合特征選擇降低維度
獨熱編碼python實現(xiàn):
df = pd.DataFrame({'source':['淘寶','京東','拼多多'],
'amount':[20,5,30]})
pd.get_dummies(df,prefix='source',prefix_sep='_')
- 二進制編碼以訂單來源淘寶集绰、京東规辱、拼多多為例,淘寶栽燕、京東罕袋、拼多多的ID分別為1、2碍岔、3浴讯,則二進制表示分別為001、010蔼啦、011榆纽。