как преобразовать файл arff в файл libsvm

Я пытаюсь преобразовать файл arff в файл libsvm в своем проекте, так что кто-нибудь может мне помочь в этом, заранее спасибо


person user3882220    schedule 06.04.2015    source источник


Ответы (2)


Я написал свой собственный скрипт Python для выполнения этой работы:

import sys

if(len(sys.argv) < 3):
    print("usage: ./python convertToSVM.py inputfilename outputfilename")
#print sys.argv[1]

inputfilename = sys.argv[1]
fin = open(inputfilename,'r')
lines = fin.readlines()
fin.close()
outputfilename = sys.argv[2]
fout = open(outputfilename,'w')

beginToRead = False
for line in lines:
    if beginToRead == True:
        if len(line) > 5:# not an empty line
            #read this line
            dataList = line.split(',')
            resultLine = ''
            resultLine += dataList[-1].strip()
            resultLine += ' '
            for i in range(1,len(dataList)-1):
                resultLine += str(i)
                resultLine += (":"+dataList[i]+" ")
            #print(resultLine)
            fout.write(resultLine+"\n")

    if line[0:5] == '@data':
        beginToRead = True

fout.close()

Этот сценарий может преобразовать этот тип файла ARFF weka, указанный на этом веб-сайте в файл LIBSVM, указанный на этом веб-сайте. Я надеюсь, что этот скрипт может помочь вам.

Чтобы использовать этот скрипт, в терминале вы можете просто ввести:

./python convertToSVM.py inputfilename outputfilename

Имя входного файла — это входной файл ARFF, а имя выходного файла — имя выходного файла libsvm.

person Iching Chang    schedule 27.04.2015
comment
Я нашел это полезным, но я считаю, что в этом скрипте есть ошибка в самом внутреннем цикле for: for i in range(1,len(dataList)-1): resultLine += str(i) resultLine += (":"+dataList[i]+" ") Это пропускает первую точку данных каждой строки, должно быть: for i in range(1,len(dataList)): resultLine += str(i) resultLine += (":"+dataList[i-1]+" ") - person Vito; 08.12.2016

ответ от Chang в порядке, однако сценарий дает сбой в тех случаях, когда метка класса не является последней записью в экземпляре. данные.

Встроенный класс Weka LibSVMSaver (doc) является лучшим вариантом для достижения требуемых результатов. Его можно использовать внутри проектов, а также из командной строки.

person Atif    schedule 07.03.2017