一定の確率でファイルを動作単位で分割する
2214 ワード
最近、決定ツリーの入力データを処理するときに、入力ファイルがファイルであれば、どのようにトレーニングサンプルとテストサンプルに分けますか?また、通常、トレーニングデータはテストデータより多い.次に、私の実現の考え方を説明します.
入力ファイルを7:3の確率で分割すると、乱数を1つ使用できます.0~9の乱数をランダムに1つ生成し、この数が7未満であるか否かを判断し(ここで数値は訓練データと試験データの比に基づいて設定することができる)、未満であればこの行の入力データを訓練データに帰すべきであり、そうでなければ試験データに帰すべきである.
次はjava実装コードです.
分かち合う
転載は出典を明記してください:http://blog.csdn.net/fansy1990
入力ファイルを7:3の確率で分割すると、乱数を1つ使用できます.0~9の乱数をランダムに1つ生成し、この数が7未満であるか否かを判断し(ここで数値は訓練データと試験データの比に基づいて設定することができる)、未満であればこの行の入力データを訓練データに帰すべきであり、そうでなければ試験データに帰すべきである.
次はjava実装コードです.
package org.fansy.filesplit.random;
import java.io.*;
import java.util.*;
public class SplitFile {
/**
*
* , ;
* @param args
* @throws IOException
*/
public static void main(String[] args) throws IOException {
String sourceStr="/home/fansy/data/forest/car.txt";
String des1Str="/home/fansy/data/forest/car_train.txt";
String des2Str="/home/fansy/data/forest/car_test.txt";
File source =new File(sourceStr);
File des1=new File(des1Str);
File des2=new File(des2Str);
if(!source.exists()){
System.out.println("source file does not exist");
return ;
}
exist(des1);
exist(des2);
FileWriter des1W=new FileWriter(des1,true);
FileWriter des2W=new FileWriter(des2,true);
// read source file and split it into two files
FileReader fileReader =new FileReader(source);
BufferedReader bf=new BufferedReader(fileReader);
String line=null;
Random r=new Random();
int temp=0;
while((line=bf.readLine())!=null){
temp=Math.abs(r.nextInt())%10;
if(temp<7){ // '7' can be changed in order to set the probability of train data and test data
des1W.append(line+"
");
}else{
des2W.append(line+"
");
}
}
bf.close();
fileReader.close();
des1W.close();
des2W.close();
System.out.println("split file done ...");
}
private static void exist(File f){
if(f.exists()){
f.delete();
boolean flag=false;
try {
flag = f.createNewFile();
} catch (IOException e) {
e.printStackTrace();
}
System.out.println("create file:"+f.getName()+" :"+flag);
}
}
}
分かち合う
転載は出典を明記してください:http://blog.csdn.net/fansy1990