交叉验证

sklearn总结

核能气质少年 提交于 2019-12-03 04:17:45
http://www.lining0806.com/sklearn使用总结/ scikit-learn 是Python实现的一个 传统机器学习 算法库,基本涵盖了机器学习涉及到的各个方面,包括数据的预处理、特征的提取、模型的构建、模型的训练、模型的验证以及模型的评价等等,目前项目已在 Github 上star数目超过2w。 scikit-learn一般简称为 sklearn ,我对sklearn开始接触已经有4年多的时间,期间好久时间没再搞过。本文仅基于以前我对sklearn的一些使用总结展开介绍,如果与最新版本有些出入,那就以后者为准。 sklearn的安装 sklearn依赖Python环境,需要预先安装NumPy和Scipy库,Matplotlib库也是必要的。 如果使用Windows系统,也可以从 Unofficial Windows Binaries for Python Extension Packages 上下载相应的whl文件进行安装。 有监督学习与无监督学习 机器学习分为 有监督学习 和 无监督学习 ,介于两者之间的叫 半监督学习 。有监督学习一般包括 分类 和 回归 ,对于一个classifier来说,通常需要你告诉它“这个东西被分为某某类”这样一些例子,理想情况下,一个classifier会从它得到的训练集中进行 “学习” ,从而具备对未知数据进行分类的能力

21_交叉验证与网络搜索

不问归期 提交于 2019-12-03 01:51:58
1.模型的选择与调优:   1、交叉验证(增强准确率) ;2、网格搜索(自动给算法进行调参); 2.交叉验证:为了让被评估的模型更加准确可信; 3.交叉验证过程:   交叉验证:将拿到的数据,分为训练和验证集。   以下图为例:将数据分成5份,其中一份作为验证集。然后经过5次(组)的测试,每次都更换不同的验证集。即得到5组模型的结果,取平均值作为最终结果。又称5折交叉验证。    4.超参数搜索-网格搜索:   通常情况下,有很多参数是需要手动指定的(如k-近邻算法中的K值, 这种叫超参数。但是手动过程繁杂,所以需要对模型预设几种超参数组合。   每组超参数都采用交叉验证来进行评估,最后选出最优参数组合建立模型。    5.超参数搜索-网格搜索API:sklearn.model_selection.GridSearchCV 6.使用方法: sklearn.model_selection.GridSearchCV(estimator, param_grid=None,cv=None) 对估计器的指定参数值进行详尽搜索         estimator:估计器对象;         param_grid:估计器参数(dict){“n_neighbors”:[1,3,5]};         cv:指定几折交叉验证;       fit:输入训练数据;       score:准确率;

Sklearn-CrossValidation 交叉验证

匿名 (未验证) 提交于 2019-12-03 00:39:02
1. 交叉验证概述 进行模型验证的一个重要目的是要选出一个最合适的模型,对于监督学习而言,我们希望模型对于未知数据的泛化能力强,所以就需要模型验证这一过程来体现不同的模型对于未知数据的表现效果。 最先我们用训练准确度(用全部数据进行训练和测试)来衡量模型的表现,这种方法会导致模型过拟合;为了解决这一问题,我们将所有数据分成训练集和测试集两部分,我们用训练集进行模型训练,得到的模型再用测试集来衡量模型的预测表现能力,这种度量方式叫测试准确度,这种方式可以有效避免过拟合。 测试准确度的一个缺点是其样本准确度是一个 高方差估计 ( high varianceestimate ),所以该样本准确度会依赖不同的测试集,其表现效果不尽相同。 2. K折交叉验证 将数据集平均分割成 K个等份 使用 1份数据作为测试数据,其余作为训练数据 计算测试准确率 使用不同的测试集,重复 2、3步骤 对 测试准确率做平均 ,作为对未知数据预测准确率的估计 sklearn.model_selection.Kfold classsklearn.model_selection.KFold(n_splits=3,shuffle=False, random_state=None) 参数: n_splits 3 ,最小为 2 ; K 折验证的 K ֵ shuffle False; shuffle会对数据产生随机搅动 (

普通交叉验证(OCV)和广义交叉验证(GCV)

匿名 (未验证) 提交于 2019-12-03 00:38:01
普通交叉验证OCV OCV是由Allen(1974)在回归背景下提出的,之后Wahba和Wold(1975)在讨论 了确定多项式回归中多项式次数的背景,在光滑样条背景下提出OCV。 Craven和Wahba(1979),Silverman(1985),Bates和其他人(1987),Wahba(1990)等人提出了所谓的GCV标准。 广义交叉验证的加权验证技术被用于协方差模型选择和参数估计。 The GCV funtion V(λ) is defined by : 相关参考文献: Allen, David M. The Relationship Between Variable Selection and Data Agumentation and a Method for Prediction. Technometrics, Vol. 16, No. 1 (February, 1974), pp. 125-127 Craven, Peter and Wahba, Grace. Smoothing Noisy Data with Spline Functions. Numerische Mathematik 31, (1979), pp. 377-403 Efron, Bradley. How Biased Is the Apparent Error Rate of a

Blending 和 Stacking

匿名 (未验证) 提交于 2019-12-03 00:34:01
stacking和blending是两种集成分类器的相似方法 Stacking stacking是一种分层模型集成框架。以两层为例,第一层由多个基学习器组成,其输入为原始训练集,第二层的模型则是以第一层基学习器的输出作为特征加入训练集进行再训练,从而得到完整的stacking模型。 以两层stacking模型为例,要得到stacking模型,关键在于如何构造第二层的特征(下记为元特征,meta feature),构造元特征的原则是尽可能的避免信息泄露,因此对原始训练集常常采用类似于K折交叉验证的划分方法。 以5折划分为例,我们将原始训练集分为5折,分别记为fold1、fold2、fold3、fold4和fold5。此时我们使用fold2-fold5的数据来训练基模型1,并对fold1进行预测,该预测值即作为基模型1对fold1生成的元特征;同样地,使用fold1、fold3-fold5的数据来训练基模型1,并对fold2进行预测,该预测值即作为基模型1对fold2生成的元特征;以此类推,得到基模型1对整个原始训练集生成的元特征。同样地,对其他基模型也采用相同的方法生成元特征,从而构成用于第二层模型(下记为元模型,meta model)训练的完整元特征集。对于测试集,我们可以在每次基模型训练好时预测,再将预测值做均值处理;也可以将基模型拟合全部的训练集之后再对测试集进行预测。

深度学习-超参数和交叉验证

匿名 (未验证) 提交于 2019-12-03 00:27:02
一、 1.什么是超参数 没接触过机器学习的人可能对这个概念比较模糊。我们可以从两方面来理解 (1)参数值的产生由来 超参数是在开始学习过程之前设置值的参数(人为设置),而不是通过训练得到的参数数据。 (2)超参数含义 定义关于模型的更高层次的概念,如复杂性或学习能力。 不能直接从标准模型培训过程中的数据中学习,需要预先定义。 可以通过设置不同的值,训练不同的模型和选择更好的测试值来决定 (3)举例 超参数的一些示例: 树的数量或树的深度 矩阵分解中潜在因素的数量 学习率(多种模式) 深层神经网络隐藏层数 k均值聚类中的簇数 随着学习的深入,大家以后会慢慢理解 2.交叉验证 交叉验证的目的是什么? 一般有两种: 普通的验证不行吗,为什么要交叉的? 因为数据集中某部分可能不纯(比如验证块中某些数据可能存在误差值,异常值,导致测试结果偏低,或者某些部分验证的数据过于简单,使得测试结果偏高) 关于交叉验证的具体分类和操作详见 https://zhuanlan.zhihu.com/p/24825503?refer=rdatamining http://blog.csdn.net/linkin1005/article/details/42869331 二、 CS231n课程笔记5.4:超参数的选择&交叉验证 3.交叉验证 对于训练集再次进行切分,得到训练集以及验证集。通过训练集训练得到的模型

广义交叉验证(GCV)

匿名 (未验证) 提交于 2019-12-03 00:22:01
G C V = 1 N ∑ N n = 1 [ y n f ( X n ) ] 2 [ 1 d f / N ] 2 = 1 N R S S [ 1 d f / N ] 2 G C V = 1 N ∑ n = 1 N [ y n f ( X n ) ] 2 [ 1 d f / N ] 2 = 1 N R S S [ 1 d f / N ] 2 (df是指用于估计模型的自由度数值) 值得注意的是GCV是交叉验证方法中计算花费最少的,并且广泛用于这一理论。 文章来源: 广义交叉验证(GCV)

sklearn 中的RidgeCV函数

匿名 (未验证) 提交于 2019-12-03 00:18:01
更多内容请参阅用户指南。* 参数名:alphas 类型: numpy array of shape [n_alphas] 说明: α α 值的数组。正则化的力度,必须是正浮点数。正则化提升了问题的条件,减少了估计器的方差。较大的值指定了更强的正则化。在其他模型,比如LogisticRegression 或者LinearSVC, α α 对应 C 1 C 1 。 参数名:fit_intercept 类型:boolean 说明:是否计算该模型的截距。如果设置为False,将不会在计算中使用截距(比如,预处理数据已经中心化) 参数名:normalize 类型:boolean, optional, default False 说明:当fit_intercept设置为False时,该参数将会被忽略。如果为True,则回归前,回归变量X将会进行归一化,减去均值,然后除以L2范数。如果想要标准化,请在评估器(normalize参数为False)调用fit方法前调用sklean.preprocessing.StandardScaler, 参数名:scoring 类型:string, callable or None, optional, default: None 说明:一个字符串(见模型评估文档)或一个评估分数的可调用的对象/函数,对象/函数带有注册的评估器(estimator, X, y)

sklearn之交叉验证

匿名 (未验证) 提交于 2019-12-03 00:17:01
一、简介   在用机器学习训练模型的时候,会将数据集D划分成训练集和测试集,因为如果在相同的数据上训练并测试无法评估模型的效果,常用的划分方法有K折交叉验证、p次k折交叉验证、留出法、留一法、留P法、随机分配、自助法等。另外,在训练模型的时候,经常需要进行调参,当我们有一堆参数的时候,也可以用类似的较差验证的方式依次使用不同的参数建模,最后选择最好的一个参数。在sklearn中要实现主要用sklearn.model_selection包的各种类,下面进行详细介绍。 二、数据集交叉验证方法 1、留出法   留出法的方法很简单,将数据集D分为两个部分,一个作为训练集另一个作为测试集,一般会选择70%的数据作为训练集。 对应的方法:    sklearn.model_selection.train_test_split(*arrays, **options) *arrays:数组,可以传入多个,例如同时传入x,y或者传入x,y,z。传入的数据类型为lists,、numpy arrays、scipy-sparse matrices、pandas dataframes。 test_size:如果是float数据,表示测试集的占比;如果是None则默认取占比0.25;如果是int数据,则表示测试集样本个数。 train_size:如果是float数据,表示训练集的占比

模型性能评估

匿名 (未验证) 提交于 2019-12-03 00:03:02
模型性能评估 模型性能评估是为了评价模型的泛化能力,模型性能评估主要有两个问题要解决: 1)用什么数据来评估? 2)用什么标准来评估? 1.用什么数据来评估模型性能 常用的有3中,按照复杂程度程度排序分别为: 1)训练集+测试集 2)holdout方法 3)K折交叉验证 其中第1种方法是用测试集来评估模型的性能;第二种方法是用验证集+测试集来评估,验证集用于训练过程中的评估,测试集用于最终的评估;第3种方法也是用验证集+测试集的方式,但是不同于第2种,在k折交叉验证方法下验证集是不重复的,且一次训练会得到k个模型。 最简单的方法,就是将数据集按比例分为训练集和测试集,训练集用来训练模型,测试集用来测试模型性能; 优点:简洁,易操作; 缺点:鲁棒性差,可能存在性能评估失真和过拟合情况;(原因:重复使用同一组测试集来评估,意味这测试集也在间接的参与模型训练,那么测试集有又当运动员又当裁判的风险) scikit-learn库中的model_selection模块下提供了train_test_split方法,专门用于这种方式的数据集划分; from sklearn.model_selection import train_test_split X_train,X_test,y_train,y_test = train_test_split(X,y,test_size=0.3,random