现在的位置: 首页 > 综合 > 正文

怎么把数据转化为libsvm需要的数据格式

2014年03月05日 ⁄ 综合 ⁄ 共 1877字 ⁄ 字号 评论关闭

我自己对数据转化为libsvm所需要的数据格式也花了一点时间。现在把我找的方式总结下,方便大家。

数据转换成libsvm的数据格式

1.网上有一个FormatDataLibsvm.xls具有宏命令,可以利用其中的宏命令来实现。对于属性数据只有一二百的,这种工具简单方便。(本人用的时候感觉不好)
2.网上搜下有matlip的直接转换的程序。

3.可以利用weka来转换,用weka打开csv文件,再将文件重新保存为libsvm格式。(个人用的时候不好用,好像他转化的数据就在weka里面添加的libsvm运行的)

4自己写的java程序。

 在用这个程序的时候,先利用txt的替换功能,把数据中的一些分开数据的符号替换为(分号:)记得实在英文环境下面。用txt打开数据---------编辑---------替换(查找内容写文件中的符号,替换写:分号)

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;

/*
 *
n是你的属性个数
m是你的label     m自己每次自己换下,自己也可以加个循环,这个简单就不写了。
str1是你的原始文件
str2是初步转化的文件
str3是我们需要的数据
 */

public class TransferFinal {

public static void main(String[] args) throws IOException {
int n=12;//n是你的属性个数
int m=2;//m是你的label选取1,2,3------------------------------------
String str;
StringBuffer sb;
String str1="E:/libsvmdata/2train.txt";//源文件地址
String str2="E:/libsvmdata/2train2.txt";//初步转化之后的文件地址
String str3="E:/libsvmdata/2finaltrain.txt";//最终的数据格式
BufferedReader br=new BufferedReader(new FileReader(str1)); 
BufferedWriter bw=new BufferedWriter(new FileWriter(str2));

while((str=br.readLine())!=null){
int j=1;
sb=new StringBuffer(str);

for(int i=0;i<sb.length()&&j<n;i++){

if(j<9){
if(sb.charAt(i)==':'){
j++;
sb.insert(i, ' ').insert(i+1,j);
//str=sb.toString();如果上面是str.length()
i=i+2;
}
}
else{
if(sb.charAt(i)==':'){
j++;
sb.insert(i, ' ').insert(i+1,j);
//str=sb.toString();如果上面是str.length()
i=i+3;
}
}
}
//System.out.println(sb.toString());
bw.write(sb.toString());
bw.newLine();
bw.flush();
}
br.close();
bw.close();


BufferedReader br1=new BufferedReader(new FileReader(str2)); 
BufferedWriter bw1=new BufferedWriter(new FileWriter(str3));
while((str=br1.readLine())!=null){
sb=new StringBuffer(str);
sb.insert(0, m ).insert(1, "  1:");
sb.insert(sb.length(),'\n');
System.out.println(sb.toString());
bw1.write(sb.toString());
}
br1.close();
bw1.close();
}

}
这个得到几个label的数据再把他们复制到一个txt文件中,好了分一个测试集和一个训练集,libsvm可以用了,自己已经试过了。

抱歉!评论已关闭.