数据集划分及简介
机器学习算法流程及数据集的简介
机器学习是一种数据驱动型的建模方法,可以根据已知数据,分析得到输入与输出之间的依赖关系,进而对未知数据进行预测。下图为机器学习算法流程图:
一般将数据集划分成训练集、测试集、验证集(开发集)或者只划分成训练集和测试集,其中训练数据集主要用于训练机器学习模型,测试集用于模型的预测,验证集用于评估已训练好的模型结果,进而辅助模型调参。这里的调参一般是超参数的调节,超参数通俗的讲就是在训练神经网络前必须设定的参数,例如卷积神经网络中的卷积核尺寸、步幅等,学习率等,具体参数可以参考链接: 神经网络的超参数。
按比例划分数据集(按照句子级别)
按照8:1:1比例划分数据集,下面展示一些代码:
# -*- coding: utf-8 -*-
"""
Created on Fri Jul 31 16:26:46 2020
随机将数据集按照句子级别划分训练集、测试集、验证集
@author: jpcheng2
"""
import random
def split(all_list, shuffle=False, ratio=0.8,ratio1 = 0.9):
num = len(all_list)
offset = int(num * ratio)
offset1 = int(num * ratio1)
if num == 0 or offset < 1:
return [], all_list
if shuffle:
random.shuffle(all_list) # 列表随机排序
train = all_list[:offset]
test = all_list[offset:offset1]
dev = all_list[offset1:]
return train, test,dev
def file_shffle_split(file,train,test,dev):
infilm = open(file, 'r', encoding='utf-8')
trainfilm = open(train, 'w+', encoding='utf-8')
testfilm = open(test, 'w+', encoding='utf-8')
devfilm = open(dev, 'w+', encoding='utf-8')
li = []
sentence=[]
for data in infilm.readlines():
if data!= '\n':
li.append(data)
else:
sentence.append(li)
li = []
traindatas, testdatas,devdatas = split(sentence, shuffle=True, ratio=0.6,ratio1=0.8)
#写入训练集
for sentence in traindatas:
for word in sentence:
trainfilm.write(word)
trainfilm.write('\n')
#写入测试集
for sentence in testdatas:
for word in sentence:
testfilm.write(word)
testfilm.write('\n')
#写入验证集
for sentence in devdatas:
for word in sentence:
devfilm.write(word)
devfilm.write('\n')
infilm.close()
trainfilm.close()
testfilm.close()
devfilm.close()
file_shffle_split('microsoft_test.txt','0001_train.txt','0001_test.txt','0001_dev.txt')
输入一个文件:microsoft_test.txt
输出三个文件:‘0001_train.txt’,
‘0001_test.txt’,
‘0001_dev.txt’