python利用train_test_split进行训练集、验证集、测试集的随机划分

众所周知,sklearn.model_selection.train_test_split()可以实现对数据集进行训练集、测试集的两类随机划分,

那如何对数据集进行训练集、验证集、测试集的三类的随机划分呢?

  • # 先将1.训练集,2.验证集+测试集,按照8:2进行随机划分
  • # 再将1.验证集,2.测试集,按照1:1进行随机划分

以文本数据集为例,代码如下:

# 从总的数据集中(有规律)选取固定大小部分作为训练集验证集测试集的总和。如此处选取总数据集的前10000句作为需要使用的数据集。
# 两次使用train_test_split()将选取的固定大小的数据集,按照一定的比例,如8:1:1随机划分为训练集,验证集,测试集。
# 并分别将划分好的数据集进行写入到固定目录下

from sklearn.model_selection import train_test_split


def write_data(datapath, line_sen_list):
    '''
    datapath: 需要写入的文件地址
    line_sen_list: 需要写入的文件内容行列表
    '''
    with open(datapath, 'w', encoding = 'utf-8') as o:
        o.write(''.join(line_sen_list))
        o.close()


def main():

    raw_data_path = './output_s044_final_final_final.txt'
    train_data_path = './train_80000.txt'
    validate_data_path = './validate_10000.txt'
    test_data_path = './test_10000.txt'

    line_sen_list = []
    
    with open(raw_data_path, 'r', encoding = 'utf-8') as f:
        lines = f.readlines()
        # 按某种规律选取固定大小的数据集
        for line in lines[0:100000]:
            line_sen_list.append(''.join(line))
        f.close()

    label_list = [0] * 100000  # 由于该数据形式为文本,且形式为数据和标签在一起,所以train_test_split()中标签可以给一个相同大小的0值列表,无影响。

    # 先将1.训练集,2.验证集+测试集,按照8:2进行随机划分
    X_train, X_validate_test, _, y_validate_test = train_test_split(line_sen_list, label_list, test_size = 0.2, random_state = 42)
    # 再将1.验证集,2.测试集,按照1:1进行随机划分
    X_validate, X_test, _, _ = train_test_split(X_validate_test, y_validate_test, test_size = 0.5, random_state = 42)
    
    # 分别将划分好的训练集,验证集,测试集写入到指定目录
    write_data(train_data_path, X_train)
    write_data(validate_data_path, X_validate)
    write_data(test_data_path, X_test)

if __name__ == '__main__':
    main()

 

  • 24
    点赞
  • 60
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值