交叉验证

CDA 数据分析师 level1 part 5

断了今生、忘了曾经 提交于 2019-12-06 16:30:35
数据分析师-机器学习 数据分析师-机器学习 机器学习概念 机器学习概念 ●机器学习研究如何让计算机不需要明确的程序也能具备学习能力。( Arthur Samuel,1959) ●一个计算机程序在完成了任务T之后,获得经验E,其表现效果为P,如果任务T的性能表现,也就是用以衡量的P,随着E的增加而增加,可以称其为学习。(Tom Mitchell11977) 虽然机器学习的研究来源于人工智能领域,但是机器学习的方法却应用于数据科学领域,因此我们将机器学习看作是一种数学建模更合适。 机器学习的本质就是借助数学模型理解数据。当我们给模型装上可以适应观测数据的可调参数时,“学习”就开始了;此时的程序被认为具有从数据中“学习”的能力。一旦模型可以拟合旧的观测数据,那么它们就可以预测并解释新的观测数据。 模型构建流程 第一步:获取数据 既然我们机器学习是借助数学模型理解数学,那么最重要的原材料就是数据了。获取数据通常指的是获取原始数据,当然这里可以是一手数据,也可以是二手数据,关键看机器学习的学习任务。 “数据决定机器学习结果的上限,而算法只是尽可能的逼近这个上限”,可见数据在机器学习中的作用。那么一般而言对于数据我们有哪些要求呢? 数据要具有代表性,数据需要包含尽可能多的信息,数据也需要同学习任务有关联性。 对于监督学习中的分类问题,数据偏斜不能过于严重

对交叉验证的理解

大憨熊 提交于 2019-12-04 23:58:36
交叉验证, 每一折都对应一个模型,例如5折交叉验证就需要训练5个模型。 交叉验证重点在于验证,通过模型在验证集上的表现,来选择相应的参数,交叉验证,会让验证值更为可靠。 对于有独立测试集的数据,用不用交叉验证来调参根据实际情况,这个时候交叉验证是可有可无的,因为只要测试集是一样的,其他的不管怎么样都行。 对于需要自己划分测试集的情况,模型最终在测试集上的表现,是需要进行,交叉验证的,应该说是交叉测试,因为测试集是随机的,不具有说服力,进行交叉测试用到了全部的数据,这样更有说服力。 对于有独立测试集的情况,在划分训练集和验证集之后,同样可以使用交叉验证,训练多个模型,然后多个模型在测试集上进行测试,最后结果取平均。大家在论文上作指标比较的时候,需要通过前面论文报道结果的方式来选择对应的计算方式,这样才公平。 最终论文报道的结果都是,跑过多次,然后取最高值,因为大家都这样做(滑稽)。 通过验证集上的表现来选择模型参数,一般使用early stop。 我个人是不太喜欢交叉验证的,因为交叉验证浪费时间,神经网络训练一次需要不少时间。 来源: https://www.cnblogs.com/mlgjb/p/11719925.html

机器学习之交叉验证和网格搜索

て烟熏妆下的殇ゞ 提交于 2019-12-04 15:15:21
交叉验证 将拿到的训练数据,分为训练集和验证机。以下图为例:将训练数据分为4份,其中一份作为验证集,。然后经过5次的测试,每次都更换不同的验证机, 最后得到5组模型的结果。最后取平均值作为最后的结果。这也称为4折交叉验证。 网格搜索(超参数搜索): 通常情况下,有很多参数是需要手动指定的(如K-近邻算法中的K值),这种教超参数。但是手动过程繁杂,所提需要对模型预设几种超参数组合。每组超参数都采用 交叉验证 来进行评估。最后选出最优参数组合建立模型。 作用:调参数。 API: sklearn.model_selection.GridSearchCV 以K-近邻那篇文章的例子进行修改,代码如下: 1 from sklearn.model_selection import GridSearchCV 2 from sklearn.datasets import load_iris 3 from sklearn.model_selection import train_test_split 4 from sklearn.preprocessing import StandardScaler 5 from sklearn.neighbors import KNeighborsClassifier 6 7 def knn(): 8 """ 9 鸢尾花分类 10 :return: None 11

Kaggle案例之泰坦尼克船员幸存预测(sklearn机器学习库)

微笑、不失礼 提交于 2019-12-04 00:25:53
无意间在网易云课堂上找了一个Kaggle案例,泰坦尼克获救船员预测,在此之前我是从没接触过kaggle,毕竟是刚入门的小白,看着视频,算是真正实战了一次,主要是在这个过程中学到了很多东西。 下面视频地址 http://study.163.com/course/courseLearn.htm?courseId=1003551009#/learn/video?lessonId=1004052093&courseId=1003551009 还有数据集,是在GitHub里面找的 https://github.com/fayduan/Kaggle_Titanic 里面有大佬的ipython 源码,不过我也没仔细去看。还是按照视频上的一步一步下来。 首先是整体的流程我大概总结了一下。 拿到数据集分析数据 找出数据集中每个特征中是否含有缺失值或者异常值,填充缺失值 将特征中为字符的特征值转换为数值型,比如将性别男女用0和1表示 分析数据集适合采用什么算法进行预测,比如适合用分类算法还是适合用回归算法 建立特征工程(这算是整个过程下来最重要的) K阶交叉验证,划分数据集(k-1份训练,1份验证,每次换一个。重复k次,用来调优), 将交叉验证后的数据集扔进算法中进行训练及测试准确率。 接下来代码实现(按照视频教程实现)。 1导入数据,进行分析 import pandas as pd import

sklearn之交叉验证

非 Y 不嫁゛ 提交于 2019-12-03 20:32:17
一、简介   在用机器学习训练模型的时候,会将数据集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数据,表示训练集的占比

深度学习基础模型算法原理及编程实现--04.改进神经网络的方法

≡放荡痞女 提交于 2019-12-03 18:45:43
文章列表 1. 深度学习基础模型算法原理及编程实现–01.感知机 . 2. 深度学习基础模型算法原理及编程实现–02.线性单元 . 3. 深度学习基础模型算法原理及编程实现–03.全链接 . 4. 深度学习基础模型算法原理及编程实现–04.改进神经网络的方法 . 5. 深度学习基础模型算法原理及编程实现–05.卷积神经网络 . 6. 深度学习基础模型算法原理及编程实现–06.循环神经网络 . 9. 深度学习基础模型算法原理及编程实现–09.自编码网络 . 9. 深度学习基础模型算法原理及编程实现–10.优化方法:从梯度下降到NAdam . … 深度学习基础模型算法原理及编程实现–04.改进神经网络的方法 4.1 基本激活函数认知 4.1.1 sigmoid 5.1.2 tf.tanh 5.1.3 ReLU 5.1.4 Leaky ReLU 5.1.5 Softplus 5.2 增加隐藏层数 5.3 提升学习速率 5.3.1 梯度下降改为随机梯度下降 5.3.2 输出层激活函数与目标函数的选择 5.3.2.1 激活函数为sigmoid函数、损失函数为交叉项 5.3.2.2 激活函数为线性函数且损失函数为平方损失函数 5.3.2.3 损失函数为交叉项的好处 5.3.2.4 柔性最大值(softmax函数) 5.3.2.5 Softmax-loss 5.3.3

机器学习模型选择:调参参数选择

馋奶兔 提交于 2019-12-03 17:31:54
http:// blog.csdn.net/pipisorry/article/details/52902797 调参经验 好的实验环境是成功的一半 由于深度学习实验超参众多,代码风格良好的实验环境,可以让你的人工或者自动调参更加省力,有以下几点可能需要注意: 将各个参数的设置部分集中在一起。如果参数的设置分布在代码的各个地方,那么修改的过程想必会非常痛苦。 可以输出模型的损失函数值以及训练集和验证集上的准确率。 可以考虑设计一个子程序,可以根据给定的参数,启动训练并监控和周期性保存评估结果。再由一个主程序,分配参数以及并行启动一系列子程序。 画图 画图是一个很好的习惯,一般是训练数据遍历一轮以后,就输出一下训练集和验证集准确率。同时画到一张图上。这样训练一段时间以后,如果模型一直没有收敛,那么就可以停止训练,尝试其他参数了,以节省时间。 如果训练到最后,训练集,测试集准确率都很低,那么说明模型有可能欠拟合。那么后续调节参数方向,就是增强模型的拟合能力。例如增加网络层数,增加节点数,减少dropout值,减少L2正则值等等。 如果训练集准确率较高,测试集准确率比较低,那么模型有可能过拟合,这个时候就需要向提高模型泛化能力的方向,调节参数。 从粗到细分阶段调参 实践中,一般先进行初步范围搜索,然后根据好结果出现的地方,再缩小范围进行更精细的搜索。 建议先参考相关论文

模型评估、过拟合欠拟合以及超参数调优方法

人走茶凉 提交于 2019-12-03 17:31:23
机器学习入门系列(2)–如何构建一个完整的机器学习项目,第十一篇! 该系列的前 10 篇文章: 机器学习入门系列(2)–如何构建一个完整的机器学习项目(一) 机器学习数据集的获取和测试集的构建方法 特征工程之数据预处理(上) 特征工程之数据预处理(下) 特征工程之特征缩放&特征编码 特征工程(完) 常用机器学习算法汇总比较(上) 常用机器学习算法汇总比较(中) 常用机器学习算法汇总比较(完) 简单聊聊模型的性能评估标准 上一篇文章 介绍了性能评估标准,但如何进行模型评估呢,如何对数据集进行划分出训练集、验证集和测试集呢?如何应对可能的过拟合和欠拟合问题,还有超参数的调优,如何更好更快找到最优的参数呢? 本文会一一介绍上述的问题和解决方法。 2. 模型评估的方法 2.1 泛化能力 泛化能力 :指模型对 未知的、新鲜的数据的预测能力 ,通常是根据 测试误差 来衡量模型的泛化能力,测试误差越小,模型能力越强; 统计理论表明:如果训练集和测试集中的样本都是独立同分布产生的,则有 模型的训练误差的期望等于模型的测试误差的期望 。 机器学习的“没有免费的午餐定理”表明:在所有可能的数据生成分布上,没有一个机器学习算法总是比其他的要好。 该结论仅在考虑所有可能的数据分布时才成立。 现实中特定任务的数据分布往往满足某类假设,从而可以设计在这类分布上效果更好的学习算法。

Spark2.0机器学习系列之1:基于Pipeline、交叉验证、ParamMap的模型选择和超参数调优

删除回忆录丶 提交于 2019-12-03 17:30:44
ML Tuning: model selection and hyperparameter tuning 参考: http://spark.apache.org/docs/latest/ml-tuning.html Spark中的CrossValidation Spark中采用是k折交叉验证 (k-fold cross validation)。举个例子,例如10折交叉验证(10-fold cross validation),将数据集分成10份,轮流将其中9份做训练1份做验证,10次的结果的均值作为对算法精度的估计。 10折交叉检验最常见,是因为通过利用大量数据集、使用不同学习技术进行的大量试验,表明10折是获得最好误差估计的恰当选择,而且也有一些理论根据可以证明这一点。但这并非最终结论,争议仍然存在。而且似乎5折或者20折与10折所得出的结果也相差无几。 交叉检验常用于分析模型的泛化能力,提高模型的稳定。相对于手工探索式的参数调试,交叉验证更具备统计学上的意义。 在Spark中,Cross Validation和ParamMap(“参数组合”的Map)结合使用。具体做法是,针对某有特定的Param组合,CrossValidator计算K (K 折交叉验证)个评估分数的平均值。然后和其它“参数组合”CrossValidator计算结果比较,完成所有的比较后,将最优的“参数组合

网格搜索和随机搜索调优超参数&&嵌套交叉验证选择机器学习算法

佐手、 提交于 2019-12-03 17:29:27
网格搜索调优超参数 通过对不同超参数列表进行暴力穷举搜索,并计算评估每个组合对模型性能的影响,以获得参数的最优组合。 对SVM模型调优超参数: import matplotlib.pyplot as plt from sklearn.model_selection import GridSearchCV from sklearn.svm import SVC from sklearn.linear_model import LogisticRegression from sklearn.preprocessing import StandardScaler from sklearn.pipeline import Pipeline import pandas as pd import numpy as np from sklearn.preprocessing import LabelEncoder from sklearn.model_selection import train_test_split ''' 读取乳腺癌数据集 数据集前两列存储样本ID和诊断结果(M代表恶性,B代表良性) 3~32列包含了30个特征 ''' df = pd.read_csv( 'https://archive.ics.uci.edu/ml/machine-learning-databases' +