Java---划分训练集与测试集

本文介绍了一种使用Java实现的文本数据集划分方法,能够将原始数据集按指定比例分为训练集和测试集,适用于机器学习项目的前期数据准备。

使用Java完成文本数据的训练集与测试集划分
如:总数据1000条文本数据,划分成训练集800条,测试集200条

public class data_split {
	/** 测试集比例 */
	public static double test_percent = 0.2;
	public static void main(String[] args) throws Exception {
		splitData(source_path,train_path,test_path);
	}
	/**
	 * 写入训练集与测试集
	 * @param class_name
	 * @throws Exception 
	 */
	public static void splitData(String source_path,String train_path,String test_path) throws Exception {
		
		long allNum = getLineNumber(source_path);
		int end = (int) ((int)allNum * (1 - test_percent));
		// 打开文件
		FileInputStream fis = new FileInputStream(source_path);
		BufferedReader br = new BufferedReader(new InputStreamReader(fis, "UTF-8"));
		// 写入训练集
		FileWriter fw = new FileWriter(train_path, true);
		PrintWriter out = new PrintWriter(fw);
		String line = "";
		int count = 0;
		while ((line = br.readLine()) != null) {
			out.write(line);
			out.println();
			count ++;
			if (count == end) 
				break;
		}
		// 关闭文件
		fw.close();
		out.close();
		// 写入测试集
		FileWriter fw2 = new FileWriter(test_path, true);
		PrintWriter out2 = new PrintWriter(fw2);
		while ((line = br.readLine()) != null) {
			out2.write(line);
			out2.println();
		}
		// 关闭文件
		fw2.close();
		out2.close();		
		br.close();
		fis.close();
	}
	/**
	 * 获取文件的行数
	 * @param file
	 * @return
	 */
	public static long getLineNumber(String path) {
		File file = new File(path);
	    if (file.exists()) {
	        try {
	            FileReader fileReader = new FileReader(file);
	            LineNumberReader lineNumberReader = new LineNumberReader(fileReader);
	            lineNumberReader.skip(Long.MAX_VALUE);
	            long lines = lineNumberReader.getLineNumber() + 1;
	            fileReader.close();
	            lineNumberReader.close();
	            return lines;
	        } catch (IOException e) {
	            e.printStackTrace();
	        }
	    }
	    return 0;
	}
}

完!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值