使用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[廣告投放者] -> 0

DictField[廣告發行者] -> 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 Tran?

gist.github.com

pandas2libFFM | Kaggle?

www.kaggle.com


推薦閱讀:
相關文章