特征工程
?我們做比賽的初衷是想在比賽中鍛煉用深度學(xué)習(xí)模型解決實際問題的能力橘霎。所以我們做特征工程時更多的考慮了深度學(xué)習(xí)的特點(自動學(xué)習(xí)數(shù)據(jù)的分布,自動學(xué)習(xí)出數(shù)據(jù)的高階特征)碑宴,因此我們做特征工程的出發(fā)點是盡最大可能保留原始數(shù)據(jù)的信息软啼。
1、數(shù)據(jù)集:
?官方提供的數(shù)據(jù)集有三部分延柠,
1祸挪、用戶特征文件(用戶池),2贞间、廣告特征文件(廣告池), 3贿条、訓(xùn)練集(現(xiàn)實中用戶(id)對特定廣告(id)推送的點擊情況(label -> +1,-1 ))
2增热、目標(biāo)分析
首先必須通過官方提供的三個文件構(gòu)建出可以用于模型訓(xùn)練的數(shù)據(jù)集整以。即將用戶id替換成用戶特征,廣告id替換成廣告特征峻仇。label變成0和1(便于做sigmoid)公黑。之后便可以用建立好的數(shù)據(jù)集進(jìn)行模型訓(xùn)練,爽快進(jìn)行結(jié)果提交上分了础浮。
3、面臨的問題及解決辦法:
- 樣本數(shù)據(jù)對齊:
?原始數(shù)據(jù)中廣告特征屬于category特征奠骄,很容易用one-hot 方式進(jìn)行編碼豆同,用戶特征中部分特征(age,gender等)屬于category特征含鳞,也可以用one-hot方式進(jìn)行編碼影锈,但是用戶特征中有很多特征不是category特征,例如interest蝉绷,topic鸭廷,這類特征的特點是特征的values是不固定的多值(有多有少,甚至為0)熔吗,無序辆床。對于這種特征使用multi-hot編碼方式,其實就是bag of words的方法桅狠,只是有效位的值只能為1讼载。通過將廣告特征和用戶特征進(jìn)行one-hot以及multi-hot編碼后轿秧,實現(xiàn)了各個sample的數(shù)據(jù)對齊,緊接著產(chǎn)生了另外一個問題數(shù)據(jù)高度稀疏即數(shù)據(jù)集存儲咨堤。
- 數(shù)據(jù)高度稀疏及數(shù)據(jù)集存儲:
? 經(jīng)過one-hot和multi-hot編碼之后每一個sample的維度急劇上升至幾十萬菇篡,而且高度稀疏,有效位(填1的位置)極少一喘,同時自然而然的帶來另外一個問題---存儲驱还。普通的存儲方式(直接將0,1存入硬盤)幾乎是不現(xiàn)實的,首先是運算過程中的內(nèi)存開銷他太大凸克,其次是占用非常多的硬盤存儲空間议蟆,可能硬盤大小不是問題,但是接下來的模型訓(xùn)練還要對文件進(jìn)行讀取触徐,考慮到調(diào)試時數(shù)據(jù)的讀取時間咪鲜,這種方式幾乎不可行。解決辦法是用稀疏矩陣來表征稀疏數(shù)據(jù)撞鹉,借助scipy中的sparse模塊可以很容易將數(shù)據(jù)表示成csr形式的稀疏矩陣疟丙,之后再進(jìn)行存儲,因為稀疏表示只記錄了矩陣的結(jié)構(gòu)鸟雏、有效位的位置和有效值享郊,所以數(shù)據(jù)的存儲大幅下降。同時我們發(fā)現(xiàn)現(xiàn)在的機器學(xué)習(xí)孝鹊、深度學(xué)習(xí)框架幾乎都支持對稀疏矩陣的計算炊琉,所以接下來的步驟都變得容易起來。
4又活、總結(jié)
?我們的特征工程及其簡陋苔咪,完全不夠高大上。(很慚愧柳骄,特征工程這塊沒太多經(jīng)驗团赏,只能簡單的做一下,比賽時重心過多的放在了模型上)不過還好耐薯,因為我們的特征構(gòu)建方式對原始信息的保留還可以舔清,再加上深度學(xué)習(xí)的強學(xué)習(xí)能力,最終這種特征也能在比賽中和各路高手抗衡一下曲初。