<pre name="code" class="java">
public class IrisUCI2LibSVM {
static BufferedReader br = null; //read the file to bufferedreader
static int classification = 0; //classification number
static FileWriter fw = null; //put the result to file
public static void main(String[] args) {
// TODO Auto-generated method stub
String sourceFileName = "iris.data.set.txt";
String destFileName = "iris.libsvm.txt";
uci2Libsvm(sourceFileName, destFileName);
}
public static void uci2Libsvm(String sourceFileName,String destFileName){
String strline = null;
//whether the file is exists
File file = new File(sourceFileName);
if(!file.exists()){
System.out.println("file not exists!");
return;
}
try {
br = new BufferedReader(new FileReader(sourceFileName));
fw = new FileWriter(destFileName);
int i = 1; //the index of the libsvm format file
while((strline = br.readLine().trim()) != null){
String[] elements = strline.split(",");
if(elements.length < 4){
break;
}
if(elements[4].equals("Iris-setosa")){
classification = 1;
}else if(elements[4].equals("Iris-versicolor")){
classification = 2;
}else if(elements[4].equals("Iris-virginica")){
classification = 3;
}
String result = classification + " " + i++ + ":" + elements[0]
+ " " + i++ + ":" + elements[1]
+ " " + i++ + ":" + elements[2]
+ " " + i + ":" + elements[3];
i = 1;
System.out.println(result);
fw.write(result.trim() + "\n");
}
fw.close();
br.close();
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally{
}
System.out.println("succeed!");
}
}
如何验证是否转换正确呢?
使用libsvm自带的格式检查checkdata.py(libsvm-3.20\tools\checkdata.py)进行验证,该文件是用Python写的,所以验证的前提是你的电脑上首先安装Python。
D:\Python27>python d:\libsvm-3.20\tools\checkdata.py d:\libsvm-3.20\tools\iris.libsvm.txt
No error.
说明转换成功!