一定の確率でファイルを動作単位で分割する

2214 ワード

最近、決定ツリーの入力データを処理するときに、入力ファイルがファイルであれば、どのようにトレーニングサンプルとテストサンプルに分けますか?また、通常、トレーニングデータはテストデータより多い.次に、私の実現の考え方を説明します.
入力ファイルを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