根据给定概率随机按行分割文件
2013-01-23 17:57
232 查看
最近处理决策树输入数据的时候遇到一个问题:如果输入文件为一个文件,如何分为训练样本和测试样本呢?而且一般是训练数据多于测试数据。下面就说下我的实现思路:
假如以7:3的概率分割输入文件,那么可以使用一个随机数。随机产生一个0~9的随机数,判断此数是否小于7(此处数值可以根据训练数据和测试数据的比值进行设置),若小于则应该把此行输入数据归为训练数据,否则归为测试数据;
下面是java实现代码:
分享,快乐,成长
转载请注明出处:http://blog.csdn.net/fansy1990
假如以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
相关文章推荐
- 根据给定分割文件的分数进行进行分割与使用配置文件合并文件
- 根据时间随机数生成随机文件名 ,SpringMVC 上传文件
- 根据内容按行号分割文本文件(仅适用小文件)
- 可以根据文件大小分割文件的工具---超级文件切割刀 V2.0绿盟绿色干净版
- 给定一个最多包含40亿个随机排列的32位整数的顺序文件,找出一个不在文件中的32位整数
- 【转】给定一个函数rand5(),使函数rand7()可以随机等概率的生成1-7的整数
- Linux 按行分割文件(转载)
- 「Linux」Linux下根据CET听力文件关键字和lcr时间对mp3进行剪辑分割
- 给定函数返回01概率为p和1-p,根据这个函数构造函数使得返回01的概率一样
- Log4j按级别输出日志到不同的文件2009-09-07 13:29会按日存分割日志文件,并且根据级别输出到不同的文件
- js 根据权重概率随机
- Python根据数值大小随机返回一个key,并保证返回这个key的概率和它所对应的value成正比
- Perl按行分割文件
- 根据文件的路径 分割文件名 文件后缀
- 尝试按行分割一个4G的csv文件
- Perl根据日期分割数据文件
- 概率随机问题【3】给定能随机生成1到5的函数,写出能随机生成1到7的函数
- 根据定制的 XML 文件进行随机抽取节
- C语言按行读文件及字符串分割
- 给定一个最多包含40亿个随机排列的32位整数的顺序文件,找出一个不在文件中的32位整数。