【问题标题】:how do I convert an arff file to libsvm file如何将 arff 文件转换为 libsvm 文件
【发布时间】:2015-06-10 17:14:31
【问题描述】:

我正在尝试在我的项目中将 arff 文件转换为 libsvm 文件,所以任何人都可以帮助我这样做,提前谢谢你

【问题讨论】:

    标签: svm libsvm arff


    【解决方案1】:

    我编写了自己的 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()
    

    此脚本可以将website中指定的这种weka ARFF文件转换为website中指定的LIBSVM文件。我希望这个脚本可以帮助你。

    要使用此脚本,您只需在终端中输入:

    ./python convertToSVM.py inputfilename outputfilename
    

    inputfilename是输入ARFF文件,outputfilename是输出libsvm文件的文件名。

    【讨论】:

    • 我发现这很有用,但我相信这个脚本在最里面的 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]+" ")
    【解决方案2】:

    Chang 的 answer 很好,但是,如果类标签不是实例数据中的最后一个条目,则脚本会失败。

    Weka 内置类LibSVMSaver (doc) 是实现所需结果的更好选择。它可以在项目中使用,也可以在命令行中使用。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-02-10
      • 2014-06-11
      • 2019-08-21
      • 2012-02-29
      • 1970-01-01
      • 2020-08-24
      • 2012-12-13
      • 2013-11-11
      相关资源
      最近更新 更多