python - 将训练数据更改为 libsvm 格式以将其传递给 libsvm 中的 grid.py

标签 python libsvm cross-validation

我是 python 的新手,我正在尝试使用 libsvm。我正在尝试在 grid.py 的帮助下进行交叉验证。我从数据库中获取数据,因此它不是稀疏形式。有什么办法可以按照grid.py中数据格式的要求将其转换为稀疏形式。在文档中指出数据集应采用以下格式:

<label> <index1>:<value1> <index2>:<value2> ...

我尝试使用 svm_train 并在 svm_parameter 的帮助下生成模型。

y,x=[location_list,data_list]
prob=svm_problem(y,x)
param=svm_parameter('-t 2') 
model=svm_train(prob,param)

这里我的训练数据是格式

   location_list=[8143L,8163L....]
    data_list=[[ -62L, -72L, -62L, -55L, -75L, -66L, -66L, -56L, -57L, -76L, -75L, -79L, -68L, -74L,
 -59L....],[-62L, -72L, -62L, -55L, -75L, -66L, -66L, -56L, -57L, -76L, -75L, -79L, -68L, -74L,
 -59L....],......]

我尝试将概率作为数据集传递到 grid.py 中,但它说找不到数据集,所以可能应该将其写入文件中。或者有什么方法可以将 prob 变量作为数据集传递给 grid.py。

我可以获得上面或下面显示的格式的训练数据:

    [8143L, -62L, -72L, -62L, -55L, -75L, -66L, -66L, -56L, -57L, -76L, -75L, -79L, -68L, -74L,
 -59L,...]
    [8163L, -62L, -72L, -62L, -55L, -75L, -66L, -66L, -56L, -57L, -76L, -75L, -79L, -68L, -74L,
 -59L...]
    ...................

其中前 8143 和 8163 是标签(类),其余是特征。所以我的问题是:

1)如何将此数据集转换为稀疏形式并将其保存在文件中以传递给 grid.py?

2) 我可以将 prob 变量保存在文件中吗?

3)是否可以直接传递grid.py中的prob变量而不保存到文件中?

最佳答案

我要回答我自己的问题。我将数据库中的数据保存在一个 csv 文件中并使用了 csv2libsvm.py将 csv 转换为 libsvm 数据:

csv2libsvm.py <input file> <output file> [<label index = 0>] [<skip headers = 0>]

例如:

 python csv2libsvm.py mydata.csv libsvm.data 0 True

将 CSV 转换为 LIBSVM 格式。如果输入文件中没有标签,则指定标签索引 = -1。如果输入文件中有标题,则指定 skip headers = 1。

关于python - 将训练数据更改为 libsvm 格式以将其传递给 libsvm 中的 grid.py,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24162544/

相关文章:

r - 从 cva.glmnet 对象中提取最佳参数

python - 如何使用 django-admin 面板或管理员帐户发送 Firebase 通知?

python - 如何以字典形式转换单个列表的元素

python - .NET API 的 cPython

machine-learning - SVM文件格式说明

weka - Weka 中的 10 折交叉验证

python - 如何在python中的特定索引处获取列表中没有元素的所有元素?

java - 我无法在 java 中安装库 LibSVM

matlab - LIBSVM 是否处理训练中的缺失值?

r - 使用 Caret 在 R 中为 k-fold CV 创建折叠