# -*- coding: utf-8 -*-
'''
Created on 2018年1月18日
@author: Jason.F
@summary:
Pipeline,流水线工作流,串联模型拟合、数据转换等
K折交叉验证,采用无重复抽样技术,数据集划分k份,每次选择其中一份作为测试集,其他k-1作为训练集
'''
import pandas as pd
from sklearn.preprocessing import LabelEncoder
from sklearn.cross_validation import train_test_split
from sklearn.preprocessing import StandardScaler
from sklearn.decomposition import PCA
from sklearn.linear_model import LogisticRegression
from sklearn.pipeline import Pipeline
import numpy as np
from sklearn.cross_validation import StratifiedKFold
from sklearn.cross_validation import cross_val_score
#导入数据
df = pd.read_csv('https://archive.ics.uci.edu/ml/machine-learning-databases/breast-cancer-wisconsin/wdbc.data',header=None)
X=df.loc[:,2:].values
y=df.loc[:,1].values
le=LabelEncoder()
y=le.fit_transform(y)#类标整数化
print (le.transform(['M','B']))
#划分训练集合测试集
X_train,X_test,y_train,y_test = train_test_split (X,y,test_size=0.20,random_state=1)
#标准化、PCA降维、模型训练串联
pipe_lr=Pipeline([('scl',StandardScaler()),\('pca',PCA(n_components=2)),\('clf',LogisticRegression(random_state=1))])
pipe_lr.fit(X_train,y_train)
print ('Test Accuracy:%.3f' % pipe_lr.score(X_test, y_test))
#k折交叉验证
kfold=StratifiedKFold(y=y_train,n_folds=10,random_state=1)
scores=[]
for k,(train,test) in enumerate(kfold):pipe_lr.fit(X_train[train],y_train[train])score=pipe_lr.score(X_train[test],y_train[test])scores.append(score)print ('Fold: %s, Class dist.: %s,Acc: %.3f' % (k+1,np.bincount(y_train[train]),score))
print ('CV accuracy: %.3f +/- %.3f'%(np.mean(scores),np.std(scores)) )
#scikit-learn实现的k折交叉验证
scores=cross_val_score(estimator=pipe_lr,X=X_train,y=y_train,cv=10,n_jobs=1)#n_jobs分布到多少个cpu上执行
print ('Test Accuracy:%s' %scores)
print ('CV accuracy: %.3f +/- %.3f'%(np.mean(scores),np.std(scores)) )

结果:

[1 0]
Test Accuracy:0.947
Fold: 1, Class dist.: [256 153],Acc: 0.891
Fold: 2, Class dist.: [256 153],Acc: 0.978
Fold: 3, Class dist.: [256 153],Acc: 0.978
Fold: 4, Class dist.: [256 153],Acc: 0.913
Fold: 5, Class dist.: [256 153],Acc: 0.935
Fold: 6, Class dist.: [257 153],Acc: 0.978
Fold: 7, Class dist.: [257 153],Acc: 0.933
Fold: 8, Class dist.: [257 153],Acc: 0.956
Fold: 9, Class dist.: [257 153],Acc: 0.978
Fold: 10, Class dist.: [257 153],Acc: 0.956
CV accuracy: 0.950 +/- 0.029
Test Accuracy:[ 0.89130435  0.97826087  0.97826087  0.91304348  0.93478261  0.977777780.93333333  0.95555556  0.97777778  0.95555556]
CV accuracy: 0.950 +/- 0.029

【Python-ML】SKlearn库Pipeline工作流和K折交叉验证相关推荐

  1. python k折交叉验证,python中sklearnk折交叉验证

    python中sklearnk折交叉验证 发布时间:2018-06-10 11:09, 浏览次数:492 , 标签: python sklearnk 1.模型验证回顾 进行模型验证的一个重要目的是要选 ...

  2. k折交叉验证python代码_K折交叉验证法原理及python实现

    本文为原创文章,转载请注明出处! 在训练数据的过程或者参加数据比赛的时候,常常会遇到数据量不够大的情况,在一次比赛过程我学到一个小技巧-K折交叉验证法(k-fold CrossValidation), ...

  3. python交叉验证法_Python实现K折交叉验证法的方法步骤

    学习器在测试集上的误差我们通常称作"泛化误差".要想得到"泛化误差"首先得将数据集划分为训练集和测试集.那么怎么划分呢?常用的方法有两种,k折交叉验证法和自助法 ...

  4. k折交叉验证法python实现_Jason Brownlee专栏| 如何解决不平衡分类的k折交叉验证-不平衡分类系列教程(十)...

    作者:Jason Brownlee 编译:Florence Wong – AICUG 本文系AICUG翻译原创,如需转载请联系(微信号:834436689)以获得授权 在对不可见示例进行预测时,模型评 ...

  5. k折交叉验证matlab 流程_第51集 python机器学习:分层K折交叉验证及其他方式

    由于出现类似鸢尾花数据集这种分段数据可能简单的交叉验证无法适用,所以这里引用了分层K折交叉验证.在分层交叉验证中,我们划分数据,使得每个折中类别之间的比例整数与数据集中的比例相同,如下图所示: mgl ...

  6. 五折交叉验证/K折交叉验证, python代码到底怎么写

    五折交叉验证: 把数据平均分成5等份,每次实验拿一份做测试,其余用做训练.实验5次求平均值.如上图,第一次实验拿第一份做测试集,其余作为训练集.第二次实验拿第二份做测试集,其余做训练集.依此类推~ 但 ...

  7. python 实现k折交叉验证

    k折交叉验证原理: k折交叉验证是将数据分为k份,选取其中的k-1份为训练数据,剩余的一份为测试数据.k份数据循环做测试集进行测试.此原理适用于数据量小的数据. # k-折交叉验证(此处设置k=10) ...

  8. Python:K折交叉验证,将数据集分成训练集与测试集

    注意文件夹格式:父文件夹/类别/图像(同torch读取图像格式保存一致),传入路径为父文件夹路径. """ 对图像进行交叉验证, 用于检验分类效果 对每个类别的n张图像进 ...

  9. ML:模型训练/模型评估中常用的两种方法代码实现(留一法一次性切分训练和K折交叉验证训练)

    ML:模型训练/模型评估中常用的两种方法代码实现(留一法一次性切分训练和K折交叉验证训练) 目录 模型训练评估中常用的两种方法代码实现 T1.留一法一次性切分训练 T2.K折交叉验证训 模型训练评估中 ...

最新文章

  1. mybatisplus 结果_Java之MyBatis Plus介绍
  2. Tungsten Fabric SDN — VNC API — API Client 的 Python SDK
  3. centos6.5下安装python3安装、python3虚拟环境创建venv
  4. Pinnacle Studio Ultimate中文版
  5. Android4.4.2KK竖屏强制更改为横屏的初步简略方案
  6. Tomcat的安装与配置(新手向)
  7. 如何快速转化PSD为UI界面?
  8. 微软彻底告别移动操作系统!
  9. JAVA基础(4/17)-基本语法_流程控制
  10. 新路由3 高恪魔改固件+底包
  11. java网页木马代码_能够解网页木马代码的高人来看以下。谢谢!```
  12. 会议会展产业要善用信息技术提高活动运营管理效率
  13. 程序员的算法趣题 python3 - (4)
  14. 气象信息无线监测采集系统
  15. 2020届高考冲刺提分技巧;圆锥曲线系统秒杀技巧
  16. 学习笔记Android弹框material-dialogs
  17. 1.Twitter开发者之如何申请一个twitter开发者账号
  18. 理解信号处理中的卷积
  19. 【已解决】AndroidStudio不显示控件解决方案
  20. Unexpected error while running MyBatis Generator. Cannot resolve classpath entry: mysql-connector-ja

热门文章

  1. Redis:Redis集群模式(Cluster)原理
  2. ppt矩形里面的图片怎么放大缩小_ppt 怎么才能做到图片的放大缩小???? 下面有图...
  3. windows服务器指定IP地址才能进行远程访问桌面设置方法
  4. 【转】tf中的padding方式SAME和VALID有什么区别?
  5. 关于sql和MySQL的语句执行顺序
  6. 数据分析处理库Pandas——merge操作
  7. Minimum Path Sum,最短路径问题,动态规划
  8. JavaScript学习笔记(备忘录)
  9. 解决[warn] _default_ VirtualHost overlap on port 80, the first has precedence问题
  10. 工作中发现的相对布局中的一个小技巧