强大的sklearn库可以解决的问题:

train_test_split返回切分的数据集train/test:

train_test_split(*array,test_size=0.25,train_size=None,random_state=None,shuffle=True,stratify=None)

*array:切分数据源(list/np.array/pd.DataFrame/scipy_sparse matrices)
test_size和train_size是互补和为1的一对值
shuffle:对数据切分前是否洗牌 stratify:是否分层抽样切分数据(If shuffle=False then stratify must be None.)

from sklearn.model_selection import train_test_split
X_train,X_test,y_train,y_test =  train_test_split(X, y, test_size=0.2, random_state=666,shuffle=True)
# Parameters:
# *arrays :需要进行划分的X ;
# target :数据集的结果
# test_size :测试集占整个数据集的多少比例
# train_size :test_size +train_size = 1
# random_state : 随机种子
# shuffle : 是否洗牌 在进行划分前# 返回 X_train,X_test,y_train,y_test 
x = np.arange(10).reshape([5, 2])
y = np.arange(5)
x_train, x_test, y_train, y_test = train_test_split(x, y, test_size=0.3)
print(x_train)
print(y_train)

交叉验证

cross_val_score
对数据集进行指定次数的交叉验证并为每次验证效果评测
其中,score 默认是以 scoring='f1_macro’进行评测的,余外针对分类或回归还有:
分类、聚类、回归

这需要from sklearn import metrics ,通过在cross_val_score 指定参数来设定评测标准;
当cv 指定为int 类型时,默认使用KFold 或StratifiedKFold 进行数据集打乱,

from sklearn import svm
import math
from sklearn.model_selection import train_test_split
from sklearn import datasets
from sklearn.model_selection import cross_val_score
datas = datasets.load_iris()
print(datas.keys())x_train, x_test, y_train, y_test = train_test_split(datas['data'], datas['target'], test_size=0.4, random_state=0)
clf = svm.SVC(kernel='linear', C=1).fit(x_train, y_train)
print(clf.score(x_test, y_test))# 5折调查验证
scores = cross_val_score(clf, datas['data'], datas['target'], cv=5)
print(scores.mean())


3.cross_val_predict
cross_val_predict 与cross_val_score 很相像,不过不同于返回的是评测效果,cross_val_predict 返回的是estimator 的分类结果(或回归值),这个对于后期模型的改善很重要,可以通过该预测输出对比实际目标值,准确定位到预测出错的地方,为我们参数优化及问题排查十分的重要。
返回的是预测的结果:

from sklearn import metricsdatas = datasets.load_iris()x_train, x_test, y_train, y_test = train_test_split(datas["data"], datas['target'], test_size=0.3)clf = svm.SVC(kernel='linear', C=2).fit(x_train, y_train)
print(clf.score(x_test, y_test))predicteds = cross_val_predict(clf, datas["data"], datas["target"], cv=10)
print(predicteds)print(metrics.accuracy_score(datas['target'], predicteds))


4.KFold
K折交叉验证,这是将数据集分成K份的官方给定方案,所谓K折就是将数据集通过K次分割,使得所有数据既在训练集出现过,又在测试集出现过,当然,每次分割中不会有重叠。相当于无放回抽样。

In [33]: from sklearn.model_selection import KFoldIn [34]: X = ['a','b','c','d']In [35]: kf = KFold(n_splits=2)In [36]: for train, test in kf.split(X):...:     print train, test...:     print np.array(X)[train], np.array(X)[test]...:     print '\n'...:
[2 3] [0 1]
['c' 'd'] ['a' 'b'][0 1] [2 3]
['a' 'b'] ['c' 'd']

5.LeaveOneOut
LeaveOneOut 其实就是KFold 的一个特例,因为使用次数比较多,因此独立的定义出来,完全可以通过KFold 实现。

In [37]: from sklearn.model_selection import LeaveOneOutIn [38]: X = [1,2,3,4]In [39]: loo = LeaveOneOut()In [41]: for train, test in loo.split(X):...:     print train, test...:
[1 2 3] [0]
[0 2 3] [1]
[0 1 3] [2]
[0 1 2] [3]#使用KFold实现LeaveOneOtut
In [42]: kf = KFold(n_splits=len(X))In [43]: for train, test in kf.split(X):...:     print train, test...:
[1 2 3] [0]
[0 2 3] [1]
[0 1 3] [2]
[0 1 2] [3]

6.LeavePOut
这个也是KFold 的一个特例,用KFold 实现起来稍麻烦些,跟LeaveOneOut 也很像。

In [44]: from sklearn.model_selection import LeavePOutIn [45]: X = np.ones(4)In [46]: lpo = LeavePOut(p=2)In [47]: for train, test in lpo.split(X):...:     print train, test...:
[2 3] [0 1]
[1 3] [0 2]
[1 2] [0 3]
[0 3] [1 2]
[0 2] [1 3]
[0 1] [2 3]

7.ShuffleSplit
ShuffleSplit 咋一看用法跟LeavePOut 很像,其实两者完全不一样,LeavePOut 是使得数据集经过数次分割后,所有的测试集出现的元素的集合即是完整的数据集,即无放回的抽样,而ShuffleSplit 则是有放回的抽样,只能说经过一个足够大的抽样次数后,保证测试集出现了完成的数据集的倍数。

In [48]: from sklearn.model_selection import ShuffleSplitIn [49]: X = np.arange(5)In [50]: ss = ShuffleSplit(n_splits=3, test_size=.25, random_state=0)In [51]: for train_index, test_index in ss.split(X):...:     print train_index, test_index...:
[1 3 4] [2 0]
[1 4 3] [0 2]
[4 0 2] [1 3]

8.StratifiedKFold
这个就比较好玩了,通过指定分组,对测试集进行无放回抽样。

In [52]: from sklearn.model_selection import StratifiedKFoldIn [53]: X = np.ones(10)In [54]: y = [0,0,0,0,1,1,1,1,1,1]In [55]: skf = StratifiedKFold(n_splits=3)In [56]: for train, test in skf.split(X,y):...:     print train, test...:
[2 3 6 7 8 9] [0 1 4 5]
[0 1 3 4 5 8 9] [2 6 7]
[0 1 2 4 5 6 7] [3 8 9]

9.GroupKFold
这个跟StratifiedKFold 比较像,不过测试集是按照一定分组进行打乱的,即先分堆,然后把这些堆打乱,每个堆里的顺序还是固定不变的。

In [57]: from sklearn.model_selection import GroupKFoldIn [58]: X = [.1, .2, 2.2, 2.4, 2.3, 4.55, 5.8, 8.8, 9, 10]In [59]: y = ['a','b','b','b','c','c','c','d','d','d']In [60]: groups = [1,1,1,2,2,2,3,3,3,3]In [61]: gkf = GroupKFold(n_splits=3)In [62]: for train, test in gkf.split(X,y,groups=groups):...:     print train, test...:
[0 1 2 3 4 5] [6 7 8 9]
[0 1 2 6 7 8 9] [3 4 5]
[3 4 5 6 7 8 9] [0 1 2]

10.LeaveOneGroupOut
这个是在GroupKFold 上的基础上混乱度又减小了,按照给定的分组方式将测试集分割下来。

In [63]: from sklearn.model_selection import LeaveOneGroupOutIn [64]: X = [1, 5, 10, 50, 60, 70, 80]In [65]: y = [0, 1, 1, 2, 2, 2, 2]In [66]: groups = [1, 1, 2, 2, 3, 3, 3]In [67]: logo = LeaveOneGroupOut()In [68]: for train, test in logo.split(X, y, groups=groups):...:     print train, test...:
[2 3 4 5 6] [0 1]
[0 1 4 5 6] [2 3]
[0 1 2 3] [4 5 6]

11.LeavePGroupsOut

这个没啥可说的,跟上面那个一样,只是一个是单组,一个是多组

from sklearn.model_selection import LeavePGroupsOutX = np.arange(6)y = [1, 1, 1, 2, 2, 2]groups = [1, 1, 2, 2, 3, 3]lpgo = LeavePGroupsOut(n_groups=2)for train, test in lpgo.split(X, y, groups=groups):print train, test[4 5] [0 1 2 3]
[2 3] [0 1 4 5]
[0 1] [2 3 4 5]

12.GroupShuffleSplit
这个是有放回抽样

n [75]: from sklearn.model_selection import GroupShuffleSplitIn [76]: X = [.1, .2, 2.2, 2.4, 2.3, 4.55, 5.8, .001]In [77]: y = ['a', 'b','b', 'b', 'c','c', 'c', 'a']In [78]: groups = [1,1,2,2,3,3,4,4]In [79]: gss = GroupShuffleSplit(n_splits=4, test_size=.5, random_state=0)In [80]: for train, test in gss.split(X, y, groups=groups):...:     print train, test...:
[0 1 2 3] [4 5 6 7]
[2 3 6 7] [0 1 4 5]
[2 3 4 5] [0 1 6 7]
[4 5 6 7] [0 1 2 3]

13.TimeSeriesSplit

针对时间序列的处理,防止未来数据的使用,分割时是将数据进行从前到后切割(这个说法其实不太恰当,因为切割是延续性的。。)


```csharp
In [81]: from sklearn.model_selection import TimeSeriesSplitIn [82]: X = np.array([[1,2],[3,4],[1,2],[3,4],[1,2],[3,4]])In [83]: tscv = TimeSeriesSplit(n_splits=3)In [84]: for train, test in tscv.split(X):...:     print train, test...:
[0 1 2] [3]
[0 1 2 3] [4]
[0 1 2 3 4] [5]

sklearn中sklearn.model_selection的应用与实践相关推荐

  1. sklearn中的model_selection

    import numpy as np from sklearn import datasets import matplotlib.pyplot as plt X,y = datasets.make_ ...

  2. sklearn中的xgboost_xgboost来了

    一.xgboost前奏 1,介绍一下啥是xgboost XGBoost全称是eXtreme Gradient Boosting,即极限梯度提升算法.它由陈天奇所设计,致力于让提升树突破自身的计算极限, ...

  3. Sklearn中的CV与KFold详解

    关于交叉验证,我在之前的文章中已经进行了简单的介绍,而现在我们则通过几个更加详尽的例子.详细的介绍 CV %matplotlib inline import numpy as np from skle ...

  4. sklearn中的支持向量机SVM(下)

    1 二分类SVC的进阶 1.1 SVC用于二分类的原理复习 sklearn中的支持向量机SVM(上) 1.2 参数C的理解进阶 有一些数据,可能是线性可分的,但在线性可分状况下训练准确率不能达到100 ...

  5. sklearn中的支持向量机SVM(上)

    1 概述 支持向量机(SVM,也称为支持向量网络),是机器学习中获得关注最多的算法.它源于统计学习理论,是除了集成学习算法之外,接触到的第一个强学习器. 从算法的功能来看,SVM囊括了很多其他算法的功 ...

  6. sklearn中一些参数

    转载:http://www.cnblogs.com/chenyaling/p/7826229.html 1.监督学习 1.1.广义线性模型 1.1.1.普通最小二乘法  class sklearn.l ...

  7. sklearn中分类器的比较

    简 介: 运行对比了 分类器的比较? 中的sklearn中的分类的性能对比.这为我们理解机器学习中的特性提供了理解基础. 关键词: sklearn,python #mermaid-svg-UbOwlP ...

  8. 导入训练好的决策树文件_决策树在sklearn中的实现

    小伙伴们大家好~o( ̄▽ ̄)ブ,今天做一下如何使用sklearn实现决策树,首先声明一下,我的开发环境是Jupyter lab,所用的库和版本大家参考: Python 3.7.1(你的版本至少要3.4 ...

  9. sklearn中的交叉验证(Cross-Validation)

    sklearn中的交叉验证(Cross-Validation) cross validation大概的意思是:对于原始数据我们要将其一部分分为traindata,一部分分为test data.trai ...

最新文章

  1. go移植linux内核书名叫啥,Go语言移植Linux内核数据结构hlist
  2. Oracle varchar2或char类型的byte和char的区别
  3. oracle:sql约束
  4. GPUimage实时滤镜的实现
  5. java数组拼字符串_java数组、字符串拼接
  6. HelloWorld 和相关设置
  7. Wi-Fi闪开,网速快 100 倍的Li-Fi要来了
  8. c语言内部堆排序的实现,内部排序之堆排序的实现详解
  9. Kaggle 数据清洗挑战 Day 4 - 字符编码(Character Encoding)处理
  10. thinkphp 个别字段无法更新_ThinkPHP setField 方法更新个别字段的值
  11. 精通javascript、javascript语言精粹读书笔记
  12. ICSharpCode.SharpZipLib实现压缩解压缩
  13. IDEA最右侧栏的Maven窗口不见了怎么调出来
  14. 使用 Proteus 仿真单片机
  15. 《我们在时光的列车上,没有终点》
  16. 实验——贝叶斯决策论预测贷款是否违约
  17. C++利用openssl进行公钥解密
  18. describe函数描述性统计
  19. 大学计算机实验教程实验报告2.2,大学计算机实验2实验报告.doc
  20. Groovy快速入门指南

热门文章

  1. lmms 平移_用LMMS放下节奏
  2. javaweb基于SSM开发网上电子购物商城系统+论文+PPT 课程设计 毕业设计源码
  3. Atmel Studio 6使用
  4. Springboot+vue项目人事管理系统
  5. 个人使用向7:easypoi EXCEL导入去空格
  6. 基于数字型雷电计数器的雷电在线监测预警的系统组成
  7. 浦发银行软件测试面试真题(小编面试亲测)
  8. OSPF 多区域实验报告
  9. 单链表(Java实现)
  10. 弗里德曼张五常施蒂格勒对“口味”“偏好”“爱好”分析的不同意见?