从R中的字符文件转换为.libfm格式

时间:2017-09-04 07:41:59

标签: r recommendation-engine

我在R中有一个稀疏矩阵。使用包 libFMexe 我可以将矩阵转换为正确的libFM格式。我得到了

head(libFMmat)
[1] "1 0:1 5000:1 33736:1 33737:1 33738:1 33739:1 33740:1 33741:1 
33742:1 33743:1 33744:1 33745:1 33746:1 33747:1"
[2] "1 0:1 5001:1 33735:1 33737:1 33738:1 33739:1 33740:1 33741:1 
33742:1 33743:1 33744:1 33745:1 33746:1 33747:1"
[3] "1 0:1 5002:1 33735:1 33736:1 33738:1 33739:1 33740:1 33741:1 
33742:1 33743:1 33744:1 33745:1 33746:1 33747:1"
[4] "1 0:1 5003:1 33735:1 33736:1 33737:1 33739:1 33740:1 33741:1 
33742:1 33743:1 33744:1 33745:1 33746:1 33747:1"
[5] "1 0:1 5004:1 33735:1 33736:1 33737:1 33738:1 33740:1 33741:1 
33742:1 33743:1 33744:1 33745:1 33746:1 33747:1"
[6] "1 0:1 5005:1 33735:1 33736:1 33737:1 33738:1 33739:1 33741:1 
33742:1 33743:1 33744:1 33745:1 33746:1 33747:1"

根据我的数据和我想要的格式是正确的。现在我想对这些数据使用libFM。

首先我尝试使用

libFM(libFMmat_train, libFMmat_test)

但我得到

sh: libFM: command not found
Error in system(libfm_exe, intern = TRUE) : error in running command

所以现在我想在我的终端上做这件事。我用

save(libFMmat_train, file= "/.../libFMmat_train.libfm")

但是当我对这些数据运行libFM时,我得到了

Loading train...    
has x = 0
has xt = 1

ERROR: cannot parse line "??=???U??;p;?x"?k??Kb??X??? ?ƭV08?P0r?
@ոS.$%F$JZ(i??) I73?f?D4?qG?lG????[????5?n??<??{??ֵ?u]????ӿ????'>???o???
w????c?ϻO??O??????_~??????W?̡?,???:??}???|???7~??????Q/?C?(???̣ƴ>K?a?
ϔ???)?g?u???a?????ߕ9??}
            ??;?????qL??>???s???????_l???_??\Kܿ???s5?i?[cl??1?_W???5?
>???u???ge__(??ʈQ????c?y?}?u?????f??b֟co?{ZJs???h=?V?{??L?????ܟ?<????j??
q??_??\R,?S????^???ܿ>??????}????^rߟ???Q?:?^_???K\_??{???q??????3??????
R.a??^uaIXS?_X???1?bϽ??????????~o}??^????????N~t}a?:?iؿ?k???Ӿ???s??Y???
{J)v=?0????K?z?m
}???:???H9??,|?s}??????5??<?cZ?Y???????om???=???Ǖί?1???cLC????+k!?9???
ޖJ~[|oW??"?ף?u!?Ԧ????u????h?Xߐs?" at character 

所以我的问题是 - 如何以正确的格式将R字符文件保存为.libfm文件以便我可以使用libFM?

1 个答案:

答案 0 :(得分:0)

我自己解决了,文件已经是正确的文本格式,并且不需要转换为.libfm格式。所以我只是使用(在另一个stackoverflow线程中找到)将我的角色向量libFMmat转换为libFM格式

fileConn <- file("output.txt")
writeLines(libFMmat, fileConn)
close(fileConn)

获取可与libFM一起使用的.txt文件。