如何在libsvm-python中加载数据集

如何在libsvm-python中加载数据集,python,dataset,libsvm,Python,Dataset,Libsvm,我想知道如何加载数据集,以便从libsvm python实现中读取数据集。我的数据是一个250X500矩阵,第一列是数据集标签。我使用以下代码读取数据: with open("dataset3.txt") as textFile: lines = [line.split() for line in textFile] Matrix = [[0 for x in xrange(len(lines[0]))] for x in xrange(len(lines))] for y in rang

我想知道如何加载数据集,以便从libsvm python实现中读取数据集。我的数据是一个250X500矩阵,第一列是数据集标签。我使用以下代码读取数据:

with open("dataset3.txt") as textFile:
lines = [line.split() for line in textFile]

Matrix = [[0 for x in xrange(len(lines[0]))] for x in xrange(len(lines))] 

for y in range(0, len(lines)):
    for x in range(0, len(lines[0])):
        Matrix[y][x] = lines[y][x]
使用上面的代码,我将数据读入一个int的2d数组。如何使用该数组来执行svm训练和评估

param = svm_parameter('-t 0 -c 4 -b 1')
m = svm_train(Matrix, param)
文本文件:

1   0   9   0   0   0   0   5   2   5   15   2   3   50   0   4   6   27   0   16   34   0   11   30   12   23   41   1   0   2   0   10   67   34 ...
-1   0   10   0   0   0   0   1   0   2   5   1   8   14   0   12   11   4   2   4   22   0   6   40   8   20   47   2   1   0   0   2   1   21   0   1   11   1  ...
...

Matrix = []
with open('dataset3.txt') as f:
row = []
for line in f:
    data = line.split()
    target = float(data[0]) # target value
    str1 = str(target) 
    for i,j in enumerate(data):
        if i==0:
            continue
        else:   
            str1 = str1 + " " + str(i) +":"+ str(j) +" " 
row.append(str1)
试试这个代码

with open('dataset3.txt') as f:
    Matrix = [map(float, line.split()) for line in f]
  • 对于f中的行
    读取每一行
  • line.split()
  • map(float,line.split())
    值转换为
    float
已更新

OP注释了不同的输入格式

Matrix = []
with open('dataset3.txt') as f:
    for line in f:
        data = line.split()
        target = float(data[0]) # target value
        row = []

        for i, (idx, value) in enumerate([item.split(':') for item in data[1:]]):
            n = int(idx) - (i + 1) # num missing
            for _ in range(n):
                row.append(0) # for missing
            row.append(float(value))
        Matrix.append(row)

请提供
dataset3.txt
。不,它不起作用,我发现数据形态必须是这样的:+1:0.708333 2:1 3:1 4:-0.320755:-0.105023 6:-1 7:1 8:-0.419847 9:-1 10:-0.225806 12:1 13:-1您提供的文本文件是
1 0 9 0 0 0 0 5 2 15 2
…是的,正是一个由251x461个值组成的数组,与提供的值相同。我得到的是:for I,(idx,value)在枚举中([1:][1]中的项的[item.split(':')):值错误:需要多个值才能解包