在scorecardpy库中,split_df函数用于将数据集(通常是包含特征和目标变量的DataFrame)分割成训练集和测试集。
本文和你一起来探索scorecardpy中的split_df函数,让你以最短的时间明白这个函数的原理。
也可以利用碎片化的时间巩固这个函数,让你在处理工作过程中更高效。
一、安装scorecardpy
split_df是scorecardpy库下的函数,调用需先要安装库。打开cmd,安装语句如下:
pip install scorecardpy
二、split_df函数定义
split_df是scorecardpy库中一个函数,用于将数据集分割成训练集和测试集。其基本调用语法如下:
import scorecardpy as sc
sc.split_df(dt, y=None, ratio=0.7, seed=186)
参数详解:
dt
:数据框,通常是DataFrame,指需要分割的数据集,通常包含特征变量和目标变量(如果有的话)。
y
:目标变量名,即需要预测或分类的列名,默认值为None。如果提供了目标变量,数据将会基于该列进行分割。
ratio
:训练集和测试集的分割比例,默认值0.7。可以调整这个比例以确定训练集和测试集的量。
seed:随机数生成器的种子,设置种子可以确保每次调用split_df函数时都能得到相同的分割结果,如果不设置,每次运行的结果可能会有所不同。
函数返回值:
注意:参数的具体名称和默认值可能因库的版本不同而有所变化,因此最好查阅你所使用的scorecardpy版本的官方文档以获取最准确的信息。
分割数据集是机器学习和数据分析中非常常见的步骤,它有助于评估模型在未见数据上的性能。通过调整ratio参数,你可以控制用于训练和测试的数据量,以适应你的具体需求。
三、split_df函数实例
1 导入用到的库 首先导入用到的库,具体代码如下: 2 使用默认参数分割数据集 首先创建一个包含特征和目标变量的数据集,具体代码如下: # 创建一个包含特征和目标变量的数据集df data = { 'feature1': [1, 2, 3, 4, 5, 6, 7, 8, 9, 10], 'feature2': [10, 9, 8, 7, 6, 5, 4, 3, 2, 1], 'target': [0, 1, 0, 1, 0, 1, 0, 1, 0, 1] } df = pd.DataFrame(data) display(df) 得到结果:
然后使用默认参数分割数据集,具体代码如下: # 使用默认参数分割数据集 train_df, test_df = split_df(df).values() print('='*10, 'train_df','='*10) display(train_df) print('='*10, 'test_df','='*10) display(test_df) print('='*10, 'train_test_shape','='*10) print(train_df.shape, test_df.shape) 得到结果:
从结果知,按默认值划分训练集占比70%、测试集占比30%。 3 指定分割比例 接着调整训练集和测试集占比,设置80%数据用于训练,20%数据用于测试,具体代码如下: # 假设我们想要将80%的数据用于训练,20%用于测试 train_ratio = 0.8 train_df, test_df = split_df(df, ratio=train_ratio).values() print('='*10, 'train_df','='*10) display(train_df) print('='*10, 'test_df','='*10) display(test_df) print('='*10, 'train_test_shape','='*10) print(train_df.shape, test_df.shape) 得到结果:
从结果知,总计10行的数据,训练集有8行,测试集有2行,符合训练集占比80%,测试集占比20%。 4 设置随机数种子 若我们想要确保每次分割的结果一致,我们可以设置随机数种子,具体代码如下: seed_value = 42 train_df, test_df = split_df(df, seed=seed_value).values() 由于设置了种子,多次运行这段代码将会得到相同的分割结果。 5 指定按目标列进行分割 首先来看下指定按目标列分割,具体代码如下: data = { 'feature1': [1, 2, 3, 4, 5, 6, 7, 8, 9, 10], 'target': [1, 1, 1, 1, 1, 0, 0, 0, 0, 0], 'feature2': [10, 9, 8, 7, 6, 5, 4, 3, 2, 1] } df = pd.DataFrame(data) train_df, test_df = split_df(df, y='target', ratio=0.7).values() print('='*10, 'train_df','='*10) display(train_df) print('='*10, 'test_df','='*10) display(test_df) print('='*10, 'train_test_shape','='*10) print(train_df.shape, test_df.shape) 得到结果:
可以发现当指定了按目标列target进行分割时,虽然指定的分割比例是0.7,但是训练集的占比是80%,测试集的占比是20%。 这是由于这时切割是按目标列进行,尽可能保证训练集和测试集中好坏样本比例差距不大时,把训练集和测试集数据划分成指定比例。 为了对比,我们不指定目标列,看下结果,具体代码如下: data = { 'feature1': [1, 2, 3, 4, 5, 6, 7, 8, 9, 10], 'feature2': [10, 9, 8, 7, 6, 5, 4, 3, 2, 1], 'target': [1, 1, 1, 1, 1, 0, 0, 0, 0, 0], } df = pd.DataFrame(data) train_df, test_df = split_df(df, ratio=0.7).values() print('='*10, 'train_df','='*10) display(train_df) print('='*10, 'test_df','='*10) display(test_df) print('='*10, 'train_test_shape','='*10) print(train_df.shape, test_df.shape) 得到结果:
从结果知,此时训练集和测试集的比例确实占比分别为0.7和0.3,且未考虑目标列中好坏样本的占比,测试集中目标列的值全为1。 至此,Python中的split_df函数已讲解完毕,如想了解更多Python中的函数,可以翻看公众号中“学习Python”模块相关文章。
扫码关注腾讯云开发者
领取腾讯云代金券
Copyright © 2013 - 2025 Tencent Cloud. All Rights Reserved. 腾讯云 版权所有
深圳市腾讯计算机系统有限公司 ICP备案/许可证号:粤B2-20090059 深公网安备号 44030502008569
腾讯云计算(北京)有限责任公司 京ICP证150476号 | 京ICP备11018762号 | 京公网安备号11010802020287
Copyright © 2013 - 2025 Tencent Cloud.
All Rights Reserved. 腾讯云 版权所有