python中sklearn实现交叉验证
来源:互联网 发布:ubuntu配置lamp环境 编辑:程序博客网 时间:2024/04/23 19:13
质量要比数量重要,就像一个本垒打胜过两个双打。——《蚂蚁金服》
1、概述
在实验数据分析中,有些算法需要用现有的数据构建模型,如卷积神经网络(CNN),这类算法称为监督学习(Supervisied Learning)。构建模型需要的数据称为训练数据。
模型构建完后,需要利用数据验证模型的正确性,这部分数据称为测试数据。测试数据不能用于构建模型中,只能用于最后检验模型的准确性。
有时候模型的构建的过程中,也需要检验模型,辅助模型构建。所以会将训练数据分为两个部分,1)训练数据;2)验证数据。
将数据分类就要采用交叉验证的方法,个人写的交叉验证算法不可避免有一定缺陷,考虑使用强大sklearn包可以实现交叉验证算法。
2、python实现
请注意:以下的方法实现根据最新的sklearn版本实现,老版本的函数很多已经过期。
2.1 K次交叉检验(K-Fold Cross Validation)
K次交叉检验的大致思想是将数据大致分为K个子样本,每次取一个样本作为验证数据,取余下的K-1个样本作为训练数据。
from sklearn.model_selection import KFoldimport numpy as npX = np.array([[1, 2], [3, 4], [1, 2], [3, 4]])y = np.array([1, 2, 3, 4])kf = KFold(n_splits=2)for train_index, test_index in kf.split(X): 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]
2.2 Stratified k-fold
StratifiedKFold()这个函数较常用,比KFold的优势在于将k折数据按照百分比划分数据集,每个类别百分比在训练集和测试集中都是一样,这样能保证不会有某个类别的数据在训练集中而测试集中没有这种情况,同样不会在训练集中没有全在测试集中,这样会导致结果糟糕透顶。
from sklearn.model_selection import StratifiedKFoldimport numpy as npX = np.array([[1, 2], [3, 4], [1, 2], [3, 4]])y = np.array([0, 0, 1, 1])skf = StratifiedKFold(n_splits=2)for train_index, test_index in skf.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]
2.3 train_test_split
随机根据比例分配训练集和测试集。这个函数可以调整随机种子。
import numpy as npfrom sklearn.model_selection import train_test_splitX, y = np.arange(10).reshape((5, 2)), range(5)X_train, X_test, y_train, y_test = train_test_split( X, y, test_size=0.33, random_state=42)
3、总结
sklearn功能非常强大提供的交叉验证函数也非常多,如:
'BaseCrossValidator', 'GridSearchCV', 'TimeSeriesSplit', 'KFold', 'GroupKFold', 'GroupShuffleSplit', 'LeaveOneGroupOut', 'LeaveOneOut', 'LeavePGroupsOut', 'LeavePOut', 'ParameterGrid', 'ParameterSampler', 'PredefinedSplit', 'RandomizedSearchCV', 'ShuffleSplit', 'StratifiedKFold', 'StratifiedShuffleSplit', 'check_cv', 'cross_val_predict', 'cross_val_score', 'fit_grid_point', 'learning_curve', 'permutation_test_score', 'train_test_split', 'validation_curve'
感兴趣的可以查看sklearn源码。
0 0
- python中sklearn实现交叉验证
- python中sklearn实现交叉验证
- python sklearn包----------交叉验证
- Python 之 sklearn 交叉验证 数据拆分
- Python 之 sklearn 交叉验证 数据拆分
- 交叉验证在sklearn中的实现
- 转:交叉验证在sklearn中的实现
- Sklearn-CrossValidation交叉验证
- sklearn--交叉验证
- Python机器学习库sklearn网格搜索与交叉验证
- sklearn中k折交叉验证函数使用
- 转:sklearn中k折交叉验证函数使用
- sklearn(五)--------交叉验证
- 交叉验证 sklearn.model_selection.cross_val_score
- 转:Sklearn-CrossValidation交叉验证
- Python机器学习库sklearn KFold交叉验证分组情况样本
- sklearn中的交叉验证(Cross-Validation)
- sklearn学习笔记(2)交叉验证
- 深度神经网络训练的小技巧
- __attribute__变量属性
- Problem E: 新奇的加法运算
- cpu 内核
- TCP、UDP、IP 协议分析
- python中sklearn实现交叉验证
- java 使用comparator接口对ArrayList排序无效
- SliberControl
- Hibernate中的常用API
- 《转》MIMO技术杂谈(三):知己知彼,百战不殆--信道信息的获取和应用
- Git的使用四:基本命令
- http、https 等 常用默认端口号
- socket网络通信相关概念解析
- C++第五次上机作业