按一定概率以行为单位分割文件

最近处理决策树输入数据的时候遇到一个问题:如果输入文件为一个文件,如何分为训练样本和测试样本呢?而且一般是训练数据多于测试数据。下面就说下我的实现思路:

假如以7:3的概率分割输入文件,那么可以使用一个随机数。随机产生一个0~9的随机数,判断此数是否小于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+"\n");
			 }else{
				 des2W.append(line+"\n");
			 }
		}
		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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值