利用sklearn.StratifiedKFold函数实现K折交叉验证

定义

所谓K折交叉验证就是将数据集分为K份,先拿其中的K-1份当作训练集,另外一份当作测试集,依次进行K次(让每份数据轮流当测试集)。将K次实验的结果取平均值就是最终的结果。

StratifiedKFold函数是从sklearn模块中导出的函数,StratifiedKFold函数采用分层划分的方法(分层随机抽样思想),验证集中不同类别占比与原始样本的比例保持一致,故StratifiedKFold在做划分的时候需要传入标签特征。

参数

StratifiedKFold函数共有三个参数:

n_splits:默认为3,表示将数据划分为多少份,即k折交叉验证中的k;

shuffle:默认为False,表示是否需要打乱顺序,这个参数在很多的函数中都会涉及,如果设置为True,则会先打乱顺序再做划分,如果为False,会直接按照顺序做划分;

random_state:默认为None,表示随机数的种子,只有当shuffle设置为True的时候才会生效。当设定某个值时,模型的训练集和测试集就固定了,方便复现结果。

举例

import numpy as np
rs = np.random.randint(0,1000,1)[0]  # 在0-999中随机取一个数
from sklearn.model_selection import StratifiedKFold
X = np.array([[1,2],[3,4],[1,2],[3,4],[5,9],[1,5],[3,9],[5,8],[1,1],[1,4]])
y = np.array([0, 1, 1, 1, 0, 0, 1, 0, 1, 0])  

# print('X:',X)
# print('y:',y)

kf = StratifiedKFold(n_splits=5,shuffle=True,random_state=1111)  # 五折交叉验证,随机种子取为1111
print(kf)
#做split时既要传入数据,也要传入标签
for train_index, test_index in kf.split(X,y):
    print("TRAIN:", train_index, "TEST:", test_index)
    X_train, X_test = X[train_index], X[test_index]
    y_train, y_test = y[train_index], y[test_index]
    

在用StratifiedKFold函数时,因为在split时,分的测试集和训练集中的正样本、负样本比例和原数据集中的正样本、负样本比例要相同,所以在选择K的时候要考虑能否正确的划分测试集、训练集!!!

  • 3
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
sklearn.modelselection是scikit-learn库中的一个模块,用于数据集的划分和交叉验证。它包含了一些用于模型选择和评估的函数和类。在使用这个模块之前,你需要先安装并导入scikit-learn库。 例子代码引用和中的内容展示了如何使用sklearn.modelselection中的train_test_split函数来划分数据集。它可以将数据集划分为训练集和测试集,以便进行模型的训练和评估。首先,你需要导入需要的库,如numpy和pandas。然后,你可以使用train_test_split函数来划分数据集,传入参数X和y,分别表示特征和标签。该函数还可以传入其他参数,如random_state来控制随机划分的种子值。 除了数据集划分,sklearn.modelselection模块还提供了其他功能,如交叉验证交叉验证可以更好地评估模型的性能,尤其是在数据集较小的情况下。你可以使用该模块中的函数和类来执行交叉验证,比如KFold和StratifiedKFold。 总之,sklearn.modelselection是scikit-learn库中用于数据集划分和交叉验证的模块,它提供了方便的函数和类来帮助你进行模型的选择和评估。可以根据具体的需求使用相应的函数和类来实现你的任务。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [Sklearn学习笔记3 model_selection模块](https://blog.csdn.net/edwinhaha/article/details/108469012)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* [ModuleNotFoundError: No module named ‘sklearn.cross_validation’](https://download.csdn.net/download/weixin_38685882/14853742)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值