CSV轉換LibFFM格式
使用xLearn中的FFM功能,通常需要先把CSV格式的文件改成LibFFM格式,網上很少有對LibFFM格式的介紹,這裡先講解一下格式原理。
官方GitHub針對該格式講解本人翻譯如下:
數據格式
===========
LIBFFM格式如下:<label> <field1>:<feature1>:<value1> <field2>:<feature2>:<value2> .....
.field 和 feature 應該是非負整數. 參見例子 `bigdata.tr.txt.理解 field 和 feature的區別很重要. 例如,我們的原始數據如下:點擊 廣告投放者 廣告發行者===== ========== =========
0 Nike CNN 1 ESPN BBC這裡,我們有 * 2 fields: 廣告投放者 和 廣告發行者* 4 features: 廣告投放者-Nike, 廣告投放者-ESPN, 廣告發行者-CNN, 廣告發行者-BBC
通常你需要建立兩個字典, 一個給廣告商建立,另一個給發行商建立, 例如: DictField[廣告投放者] -> 0DictField[廣告發行者] -> 1
DictFeature[廣告投放者-Nike] -> 0 DictFeature[廣告發行者-CNN] -> 1 DictFeature[廣告投放者-ESPN] -> 2 DictFeature[廣告發行者-BBC] -> 3然後, 你就可以轉換為 FFM 格式的數據: 0 0:0:1 1:1:1 1 0:2:1 1:3:1注意feature是類別形式的, 這裡值都為1.
上面第一個FFM數據是 0:0:1,配合<field1>:<feature1>:<value1>
我們明白了,0:0:1 代表的是 Field廣告投放者:Fearure廣告投放者-Nike0:Value1
問題來了,這個Value是啥東西,很多文章根本沒有說清楚,這裡提一下。
Value是對應的Feature的值。
如果是類別型的特徵categorical,由於執行了OneHot,這裡的值就是0或者1,比如性別、學歷。
這裡要和之前的Feature搭配起來看,比如0:0:1,第二個0表示這個Feature是[廣告投放者-Nike],而這個特徵確實是Nike的,所以是Yes,就寫1。
如果是numerical數值型的,就寫實際數據。
實際上已經有很多Kaggle大佬針對CSV2FFM寫了輪子了,可以參考:
Nhuan Tranpandas2libFFM | Kaggle推薦閱讀: