将分类数据转换为数字并保存为 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 格式
如何使用 python 和 pandas 将 Csv 文件转换为 libsvm?