我想将我的数据框保存为带有特定分隔符(libsvm 格式)的 txt 格式,如下所示:
1 qid:0 0:1.465648768921554 1:-0.2257763004865357 2:0.06752820468792384 3:-1.424748186213457 4:-0.5443827245251827
1 qid:0 0:1.465648768921554 1:-0.2257763004865357 2:0.06752820468792384 3:-1.424748186213457 4:-0.5443827245251827
2 qid:0 0:0.7384665799954104 1:0.1713682811899705 2:-0.1156482823882405 3:-0.3011036955892888 4:-1.478521990367427
注意前两列用空格分隔,然后用冒号分隔,其中冒号前的整数是该列的标识符。
这是我当前的数据集:
data = {'label': [2,3,2],
'qid': ['qid:0', 'qid:1','qid:0'],
'0': [0, 0, 0],
'0': [0.4967, 0.4967,0.4967],
'1': [1,1,1],
'1': [0.4967, 0.4967,0.4967],
'2': [2,2,2],
'2': [0.4967, 0.4967,0.4967],
'3': [3,3,3],
'2': [0.4967, 0.4967,0.4967],
'4': [4,4,4]}
df = pd.DataFrame(data)
有没有办法将其另存为 txt 以完全匹配该格式?
对于上下文,我的机器学习模型是在这种特定的 txt 格式的数据集上训练的,我需要匹配它才能将其用于我自己的数据集。
类似的问题被回答here,有一个特定的sklearn方法:dump_svmlight_file.
对于这种特殊情况,您需要添加 quid 并删除修改以使 qid 只是数字整数并删除其他整数列:
从 sklearn.datasets 导入 dump_svmlight_file
def df_to_libsvm(df: pd.DataFrame):
x = df.drop(columns = ['label','qid'], axis=1)
y = df['label']
query_id = df['qid']
dump_svmlight_file(X=x, y=y, query_id= query_id, f='libsvm.dat', zero_based=True)
df_to_libsvm(df)