将Pandas DataFrame转换为LIBFM格式的文本文件

2024-10-01 09:41:35 发布

您现在位置:Python中文网/ 问答频道 /正文

我想将python中的Pandas数据帧转换为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,等等,这意味着索引:值状态x内的索引,而右侧表示x的值

示例中的数据总共描述了以下设计矩阵X和目标向量y:

^{pr2}$

这在第二章的Manual file中也有解释。在

现在我的问题是:我有一个pandas数据帧,它看起来像这样:

  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

其中“总体”是目标列,所有其他105列是特征。在

“ReviewerId”、“Asin”和“Brand”列需要更改为虚拟变量。所以每个独特的“ReviewerID”、“Asin”和brand都有自己的专栏。这意味着,如果“ReviewerID”有100个唯一值,那么如果该行表示特定的审阅者,则该行将获得100列,其中值为1,否则为零。在

所有其他列不需要重新格式化。所以这些列的索引可以是列编号。在

因此,上述pandas数据帧的前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输出格式。但是这个程序不能处理这么多列。在

有没有一个简单的方法可以做到这一点?我总共有一百万行。在


Tags: 文件数据程序目标pandas格式情况矩阵
1条回答
网友
1楼 · 发布于 2024-10-01 09:41:35

LibFM可执行文件需要您在这里解释过的libSVM格式的输入。如果LibFM包中的文件转换器不适用于您的数据,请尝试scikit learnsklearn.datasets.dump_svmlight_文件方法。在

参考号:http://scikit-learn.org/stable/modules/generated/sklearn.datasets.dump_svmlight_file.html

相关问题 更多 >