测试集和训练集8:2切分

测试集和训练集8:2切分

最近接到个需求:测试集和训练集8:2切分,翻阅了很多资料封装了一个切分方法。

首先介绍下shuffle()函数

shuffle() 方法将序列的所有元素随机排序。

import randomrandom.shuffle (lst )

注意:shuffle()是不能直接访问的,需要导入 random 模块,然后通过 random 静态对象调用该方法。

切分对象是一个列表

def split(full_list, shuffle=False, ratio=0.2):
    n_total = len(full_list)
    offset = int(n_total * ratio)
    if n_total == 0 or offset < 1:
        return [], full_list
    if shuffle:
        random.shuffle(full_list)
    sublist_1 = full_list[:offset]
    sublist_2 = full_list[offset:]
    return sublist_1, sublist_2
    if __name__ == "__main__":
	    li = range(5)
       sublist_1,sublist_2 = split(li,shuffle=True,ratio=0.2)
 
       print sublist_1,len(sublist_1)
       print sublist_2,len(sublist_2)

切分文本

机器学习的数据集是存放在文本当中如何切分?
小编是把每条数据放到一个list,然后在进行切分。

 full_list= []
 with open(filename, 'r')as f:
      for line in f:
      	 #  删除每一行的换行符
          line = line.rstrip()
          if line:
              full_list.append(line)
           #  如果有空行跳过继续
          else:
              continue
 def split(full_list, shuffle=False, ratio=0.2):
    n_total = len(full_list)
    offset = int(n_total * ratio)
    if n_total == 0 or offset < 1:
        return [], full_list
    if shuffle:
        random.shuffle(full_list)
    sublist_1 = full_list[:offset]
    sublist_2 = full_list[offset:]
    return sublist_1, sublist_2
#接下来就可以把 sublist_1, sublist_2 分别写到tesx.txt,train.txt

如果想修改比例按自己想要的比例划分

 if __name__ == "__main__":
	    li = range(5)
       sublist_1,sublist_2 = split(li,shuffle=True,ratio=0.2)
 
       print sublist_1,len(sublist_1)
       print sublist_2,len(sublist_2)

修改此处的ratio = 0.2会覆盖掉函数的ratio


你可能感兴趣的:(训练集测试集按比例切分)