将分类数据转换为数字并保存为 libsvm 格式 python

Posted

技术标签:

【中文标题】将分类数据转换为数字并保存为 libsvm 格式 python【英文标题】:turn categorical data to numeric and save to libsvm format python 【发布时间】:2017-02-13 04:41:44 【问题描述】:

我有一个看起来像这样的 DataFrame:

    A         B        C        D
1   String1   String2  String3  String4
2   String2   String3  String4  String5
3   String3   String4  String5  String6
.........................................

我的目标是将此 DataFrame 转换为 libSVM 格式。

到目前为止我尝试过的如下:

dummy= pd.get_dummies(dataframe)
dummy.to_csv('dataframe.csv', header=False, index=False)

有没有办法将数据框或 csv 文件转换为这种格式。还是有更聪明的方法来进行转换?

我尝试从该存储库加载用于执行 this 的脚本,如下所示:

%load libsvm2csv.py

并且脚本已正确加载,但是当我运行时:

libsvm2csv.py dataframe.csv dataframe.data 0 True

libsvm2csv.py dataframe.csv dataframe.txt 0 True

我得到 "SyntaxError: invalid syntax" 指向 dataframe.csv

【问题讨论】:

【参考方案1】:

预处理数据后,您可以提取矩阵并使用 scikit-learns dump_svmlight_file 创建此格式。

示例代码:

import pandas as pd
from sklearn.datasets import dump_svmlight_file

dummy = pd.get_dummies(dataframe)
mat = dummy.as_matrix()
dump_svmlight_file(mat, y, 'svm-output.libsvm')  # where is your y?

备注/备选:

您提到 libsvm2csv.py 来进行此转换,但这只是错误的方向。它是 libsvm-format -> csv

如果您想从 cvs -> libsvm(不使用 scikit-learn)进行转换,请检查 phraugs csv2libsvm.py

我更喜欢使用 scikit-learn(与 phraug 相比)

【讨论】:

谢谢@sascha,我的 y 值应该是目标,但在应用转换后,我有 50 多列,并且没有一个可以设置为目标。在我的问题中提到的数据框中,目标是最后一列。 @Kratos 那么你的预处理不正确。首先提取并移除目标 Y,然后仅在 X 部分构建虚拟对象。有什么问题。这是非常基本的东西。还有:为什么不使用 scikit-learn 很好地包装了 libsvm(无需手动调用)? 这是我第一次进入这个领域,我找不到任何来源来获取有关我应该如何正确执行此操作的信息。感谢您的帮助 @Kratos 只需使用 scikit-learn。将最后一列 = target 提取为 Y 并对 X 进行预处理。Scikit-learn 将能够按原样处理 Y(字符串或其他)。在 scikit-learn 中调用 SVM,它将使用 libsvm。 scikit-learn 的文档是一流的,包含许多教程和示例。 Viel erfolg :-)

以上是关于将分类数据转换为数字并保存为 libsvm 格式 python的主要内容,如果未能解决你的问题,请参考以下文章

LIBSVM 数据准备:将 Excel 数据转换为 LIBSVM 格式

将数据帧转换为 libsvm 格式

如何使用 python 和 pandas 将 Csv 文件转换为 libsvm?

使用 libsvm 进行情绪分类

如何从 libSVM 中使用的数据集转换为 weka 中使用的格式数据(*.arff 或 *.csv)

LIBSVM 如何准备带有图像的训练数据集以进行徽标检测?