我想将python中的Pandas数据帧转换为LIBFM格式的稀疏矩阵txt文件。将Pandas DataFrame转换为LIBFM格式的txt文件
这里的格式需要是这样的:
4 0:1.5 3:-7.9
2 1:1e-5 3:2
-1 6:1
此文件包含三种情况。第一栏列出了三种情况中每一种的目标:即第一种情况为4,第二种情况为2,第三种情况为-1。在目标之后,每行包含x的非零元素,其中像0:1.5这样的条目读取x0 = 1.5和3:-7.9意味着x3 = -7.9等。这意味着INDEX:VALUE的左侧表示索引在x内,而右侧表示x的值。
在总从示例中的数据描述了以下设计矩阵X和目标向量y:
1.5 0.0 0.0 −7.9 0.0 0.0 0.0
X: 0.0 10−5 0.0 2.0 0.0 0.0 0.0
0.0 0.0 0.0 0.0 0.0 0.0 1.0
4
Y: 2
−1
这在Manual file下章2.
现在,这里还解释是我的问题:我有一个熊猫数据框,如下所示:
overall reviewerID asin brand Positive Negative \
0 5.0 A2XVJBSRI3SWDI 0000031887 Boutique Cutie 3.0 -1
1 4.0 A2G0LNLN79Q6HR 0000031887 Boutique Cutie 5.0 -2
2 2.0 A2R3K1KX09QBYP 0000031887 Boutique Cutie 3.0 -2
3 1.0 A19PBP93OF896 0000031887 Boutique Cutie 2.0 -3
4 4.0 A1P0IHU93EF9ZK 0000031887 Boutique Cutie 2.0 -2
LDA_0 LDA_1 ... LDA_98 LDA_99
0 0.000833 0.000833 ... 0.000833 0.000833
1 0.000769 0.000769 ... 0.000769 0.000769
2 0.000417 0.000417 ... 0.000417 0.000417
3 0.000137 0.014101 ... 0.013836 0.000137
4 0.000625 0.000625 ... 0.063125 0.000625
其中“overall”是目标列,其他所有105列都是要素。
需要将'ReviewerId','Asin'和'Brand'列更改为虚拟变量。所以每个独特的'ReviewerID','Asin'和品牌都有自己的专栏。这意味着如果'ReviewerID'具有100个唯一值,那么您将获得100列,其中值为1(如果该行表示特定审阅者,否则为0)。
所有其他列不需要重新格式化。所以这些列的索引可以只是列号。
所以在上面的熊猫数据帧中的第一3行需要被变换为下面的输出:
5 0:1 5:1 6:1 7:3 8:-1 9:0.000833 10:0.000833 ... 107:0.000833 108:0.00833
4 1:1 5:1 6:1 7:5 8:-2 9:0.000769 10:0.000769 ... 107:0.000769 108:0.00769
2 2:1 5:1 6:1 7:3 8:-2 9:0.000417 10:0.000417 ... 107:0.000417 108:0.000417
在LIBFM]包有,可以改变用户的程序 - 物品 - 分级插入LIBFM输出格式。但是这个程序无法与这么多列相处。
有没有简单的方法来做到这一点?我总共有100万行。