【问题标题】:turn categorical data to numeric and save to libsvm format python将分类数据转换为数字并保存为 libsvm 格式 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

【问题讨论】:

    标签: python csv dataframe libsvm


    【解决方案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 :-)
    猜你喜欢
    • 2017-03-19
    • 2017-10-10
    • 2020-08-11
    • 2015-10-05
    • 2014-12-18
    • 1970-01-01
    • 2022-11-12
    • 1970-01-01
    • 2023-03-04
    相关资源
    最近更新 更多