正则化

cs231N_课程笔记 (转)

本秂侑毒 提交于 2019-11-28 00:03:14
本文转载自:https://zhuanlan.zhihu.com/p/21560667?refer=intelligentunit 译者注:本文智能单元首发,译自斯坦福CS231n课程笔记Neural Nets notes 2,课程教师Andrej Karpathy授权翻译。本篇教程由杜客翻译完成,堃堃进行校对修改。译文含公式和代码,建议PC端阅读。 原文如下 内容列表: 设置数据和模型 数据预处理 权重初始化 批量归一化(Batch Normalization) 正则化(L2/L1/Maxnorm/Dropout) 损失函数 小结 设置数据和模型 在上一节中介绍了神经元的模型,它在计算内积后进行非线性激活函数计算,神经网络将这些神经元组织成各个层。这些做法共同定义了评分函数(score function)的新形式,该形式是从前面线性分类章节中的简单线性映射发展而来的。具体来说,神经网络就是进行了一系列的线性映射与非线性激活函数交织的运算。本节将讨论更多的算法设计选项,比如数据预处理,权重初始化和损失函数。 数据预处理 关于数据预处理我们有3个常用的符号,数据矩阵X,假设其尺寸是[N x D](N是数据样本的数量,D是数据的维度)。 均值减法(Mean subtraction)是预处理最常用的形式。它对数据中每个独立特征减去平均值

Tensorflow学习之MNIST数据集

ぐ巨炮叔叔 提交于 2019-11-27 22:06:43
前言: 最近有段时间没学习了,主要是MNIST数据集这一节的代码很多错误,比较难调试,而且每次报的错误还不一样,在网上百度又尝试了好多种解决办法最后才解决,挺烦的。还有就是自己本来选的人工智能方向,但是导师在这个方向貌似资源比较少,估计开学了就准备换个硬件方向了,一直都在怀疑自己还应不应该继续学Tensflow。最后就是,自己这段时间超级想买个Ipad Pro,也不知道是怎么会使,感觉跟有毒一样,本来钱就少但是就是想买,就天天在看能不能等到便宜的Ipad Pro。总是有很多事情影响学习啊!!! 言归正传 本节学习的内容:搭建神经网络,在 minist 数据集上训练模型,输出手写数字识别准确率。 mnist 数据集 包含7万张黑底白字手写数字图片,其中55000张为训练集,5000张为验证集,10000张为测试集。每张图片大小为 28x28 像素,图片中纯黑色的像素值为0,纯白色像素值为1。数据集的标签是长度为10的一维数组,数组中每个元素索引号表示对应数字出现的概率。我们将 mnist 数据集中的数据喂入神经网络之前,把数据集中的每张图像的像素用长度是 784 的一维数组来代替,这样再将这个数组作为神经网络的输入特征喂入神经网络。 使用 input_data 模块中的 read_data_sets() 函数加载 minist 数据集: from tensorflow

什么是正则化

二次信任 提交于 2019-11-27 19:41:59
转自: https://charlesliuyx.github.io/2017/10/03/%E3%80%90%E7%9B%B4%E8%A7%82%E8%AF%A6%E8%A7%A3%E3%80%91%E4%BB%80%E4%B9%88%E6%98%AF%E6%AD%A3%E5%88%99%E5%8C%96/ 【内容简介】主要解决什么是正则化,为什么使用正则化,如何实现正则化,外加一些对范数的直观理解并进行知识整理以供查阅 Why & What 正则化 我们总会在各种地方遇到正则化这个看起来很难理解的名词,其实它并没有那么高冷,是很好理解的 首先,从使用正则化解决了一个什么问题的角度来看:正则化是为了防止过拟合, 进而增强泛化能力。用白话文转义,泛化误差(generalization error)= 测试误差(test error),其实就是使用训练数据训练的模型在测试集上的表现(或说性能 performance)好不好 如上图,红色这条“想象力”过于丰富上下横跳的曲线就是过拟合情形。结合上图和正则化的英文 Regularizaiton-Regular-Regularize,直译应该是:规则化(加个“化”字变动词,自豪一下中文还是强)。什么是规则?你妈喊你6点前回家吃饭,这就是规则,一个限制。同理,在这里,规则化就是说给需要训练的目标函数加上一些规则(限制),让他们不要自我膨胀

5、特征选择

谁说胖子不能爱 提交于 2019-11-27 15:48:38
当数据预处理完成后,我们需要选择有意义的特征输入机器学习的算法和模型进行训练。通常来说,从两个方面考虑来选择特征: 特征是否发散:如果一个特征不发散,例如方差接近于0,也就是说样本在这个特征上基本上没有差异,这个特征对于样本的区分并没有什么用。 特征与目标的相关性:这点比较显见,与目标相关性高的特征,应当优选选择。除方差法外,本文介绍的其他方法均从相关性考虑。 根据特征选择的形式又可以将特征选择方法分为3种: Filter:过滤法,按照发散性或者相关性对各个特征进行评分,设定阈值或者待选择阈值的个数,选择特征。 Wrapper:包装法,根据目标函数(通常是预测效果评分),每次选择若干特征,或者排除若干特征。 Embedded:嵌入法,先使用某些机器学习的算法和模型进行训练,得到各个特征的权值系数,根据系数从大到小选择特征。类似于Filter方法,但是是通过训练来确定特征的优劣。 一、过滤法(filter) 根据特征的相关性进行评分,设定一个评分阈值来选择。 1、方差筛选 方差越大的特征,那么我们可以认为它是比较有用的。如果方差较小,比如小于1,那么这个特征可能对我们的算法作用没有那么大。最极端的,如果某个特征方差为0,即所有的样本该特征的取值都是一样的,那么它对我们的模型训练没有任何作用,可以直接舍弃。 2、相关系数 主要用于输出连续值的监督学习算法中

SVM数学原理推导

落爺英雄遲暮 提交于 2019-11-27 15:19:54
//2019.08.17 #支撑向量机SVM(Support Vector Machine) 1、 支撑向量机SVM是一种非常重要和广泛的机器学习算法,它的算法出发点是尽可能找到最优的决策边界 ,使得模型的泛化能力尽可能地好,因此SVM对未来数据的预测也是更加准确的。 2、支撑向量机SVM有两种: Hard Margin SVM和Soft Margin SVM ,对于第一种严格的支撑向量机算法主要解决的是 线性可分的数据问题,而第二种SVM是在第一种的基础上改进而来,可以解决普遍的数据问题 ,对于问题的线性可分性没有特殊的要求。 3、支持向量机线性可分算法 数学原理最终推导的结果是求解有条件情况下的最优化问题 ,这种问题解决起来相对复杂,可以用拉普拉斯算子来进行解决。 4、在sklearn中调用SVM算法时和KNN算法使用类似,需要 先对数据进行标准化处理StandardScaler ,因为它的数学原理也涉及到了距离,因此高维数据里面不同维度的数据尺度应该相当,相差太大会使得算法结果准确度降低。 5、对于SVM算法, 需要进行正则化,正则化的方式也有L1和L2正则化两种方式,引入了超参数C,使得模型有了一定的容错空间,这样使得模型的泛化能力得到了增强。C越小,其容错能力越高,如果C趋于无穷,则转换为了严格线性SVC。 因此在调入SVM算法时需要定义三大参数: C(正则化系数

逻辑回归2-scikit-learn参数介绍

冷暖自知 提交于 2019-11-27 12:30:47
1.1 scikit-learn参数介绍 1.1.1 导入 from sklearn.linear_model import LogisticRegression 1.1.2 版本 scikit-learn==0.21.3 1.1.3 参数 1.1.3.1 penalty l1 、l2 、elasticnet 、none ,默认l2 l1: l1正则,邻回归 l2: l2正则,套索回归 elasticnet: 弹性网络,是邻回归和套索回归的正则项的混合 none: 什么都不加 在调参时如果我们主要的目的只是为了解决过拟合,一般penalty选择L2正则化就够了。但是如果选择L2正则化发现还是过拟合,即预测效果差的时候,就可以考虑弹性网络和L1正则化,弹性网络优于L1正则,因为当特征数量超过训练实例数量,又或者是几个特征强相关时,L1正则的表现可能非常不稳定。另外,如果模型的特征非常多,我们希望一些不重要的特征系数归零,从而让模型系数稀疏化的话,也可以使用L1正则化。 penalty参数的选择会影响损失函数优化算法的选择,即参数solver的选择。 若是L2正则,有4种可选的算法:“newton-cg”,“lbfgs”,“liblinear”,“sag”, 若是L1 正则,有1 种可选的算法:“liblinear ”,L1 正则化的损失函数不是连续可导的。 若是elasticnet

机器学习的模型泛化

纵然是瞬间 提交于 2019-11-27 04:57:29
机器学习的模型泛化 1、机器学习的 模型误差主要含有三个方面的误差:模型偏差、模型方差以及不可避免的误差。 2、对于机器学习训练模型的 偏差主要因为对于问题本身的假设不对 ,比如非线性误差假设为线性误差进行训练和预测,算法层面上 欠拟合是产生较大偏差的主要原因 。另外主要来自于特征参量与最终结果的相关性,如果相关性很低或者高度不相关的话也会导致较大的偏差。 3、对于机器学习模型的 方差主要是来自于数据的扰动以及模型的过于复杂,在算法层面上过拟合是引起模型方差较大的主要原因 ,因为过拟合会导致整体模型的复杂度太高,从而引起方差很大。 4、对于不同的算法其存在误差种类是不同的,有些算法是天生的高方差算法,比如KNN算法, 非参数算法一般都是高方差算法 ,因为它不对问题的前提进行假设。有些算法天生是高偏差的算法,比如线性回归算法, 参数学习算法一般都属于高偏差算法 , 因为它对数据具有极强的假设。 5、大多数算法都可以通过调节其中的超参数调整模型的方差和偏差,并且 一般情况下模型的方差和偏差是矛盾的 ,降低偏差,会增大方差,降低方差,也会增大偏差。 6、机器学习的主要挑战主要来自于方差,当然这样的结论主要局限于算法层面, 解决机器学习算法模型的方差 的主要方式有以下几个方面: (1)降低模型的复杂度; (2)减小数据的维度:PCA算法进行降维和降噪; (3)增加数据的样本数; (4

虚拟变量陷阱(Dummy Variable Trap)

北战南征 提交于 2019-11-26 20:01:43
在《 定量变量和定性变量的转换(Transform of Quantitative & Qualitative Variables) 》一文中,我们可以看到虚拟变量(Dummy Variable)与独热编码( One Hot Encoding)非常相似,其不同之处在于:在 虚拟编码 方案中,当特征具有 m 个不同类别标签时,我们将得到 m-1 个二进制特征,作为基准的特征被完全忽略;而在 独热编码 方案中,我们将得到 m 个二进制特征。 可以看到,独热编码( One Hot Encoding)比虚拟变量(Dummy Variable)多生成了一个变量,这对模型有什么区别呢?之前在《 虚拟变量陷阱(Dummy Variable Trap) 》一文中,我们阐述了使用独热编码会导致共线性问题,也就是自变量之间存在高度相关关系,从而使模型参数估计不准确。(另外,独热编码的截距表示均值,回归系数是与均值之间的差距;而虚拟变量的截距是参照类的值,回归系数表示与参照类的差距。)因此,如果线性模型有截距项,那么请使用虚拟变量;如果线性模型无截距项,那么使用独热编码。此外,如果线性模型有截距项,但在加了正则化之后,也可以使用独热编码,因为这相当于约束了 w 的解的空间。 除此之外,虚拟变量(Dummy Variable)与独热编码( One Hot Encoding)之间还有什么区别呢?1

Task2-逻辑回归算法梳理

穿精又带淫゛_ 提交于 2019-11-26 16:11:33
Task2 主要整理逻辑回归相关算法。 逻辑回归与线性回归的联系与区别 联系 逻辑回归本质上还是线性回归, 只是在特征到结果的映射中加入了一层函数映射, 即先把特征线性求和, 然后使用函数 g(z) 将连续结果值映射到 (0, 1) 之间, 我们将线性回归模型的表达式代入到 Logistic(Sigmoid) 函数之中, 就得到了逻辑回归的表达式: 区别 最本质区别: 逻辑回归处理的是分类问题, 线性回归处理的是回归问题. 在逻辑回归中, 因变量的取值是一个 二元分布(不是二项分布). 而线性回归中实际上求解的是对真实函数关系的一个近似拟合。 逻辑回归的原理 逻辑回归就是这样的一个过程:面对一个回归或者分类问题,建立代价函数,然后通过优化方法迭代求解出最优的模型参数,然后测试验证我们这个求解的模型的好坏。 Logistic回归虽然名字里带“回归”,但是它实际上是一种分类方法,主要用于两分类问题(即输出只有两种,分别代表两个类别) 回归模型中,y是一个定性变量,比如y=0或1,logistic方法主要应用于研究某些事件发生的概率 逻辑回归损失函数推导及优化 Cost函数和J函数如下,它们是基于最大似然估计推导得到的。 推导过程: 1.求代价函数 概率综合起来写成: 取似然函数为: 对数似然函数为: 最大似然估计就是求使l(θ)取最大值时的θ,其实这里可以使用梯度上升法求解

线性回归算法解析

穿精又带淫゛_ 提交于 2019-11-26 15:33:58
线性回归算法解析 概念 模型函数 损失函数 求取损失函数最小化的算法 线性回归的推广:多项式回归 线性回归的推广:广义线性回归 线性回归的正则化 Sklearn中工具包使用场景 概念 模型函数 损失函数 求取损失函数最小化的算法 线性回归的推广:多项式回归 线性回归的推广:广义线性回归 线性回归的正则化 Sklearn中工具包使用场景 LinearRegression 一般来说,只要我们觉得数据有线性关系,LinearRegression类是我们的首先。如果发现拟合或者预测的不好,再考虑用其他的线性回归库。如果是学习线性回归,推荐先从这个类开始第一步的研究。 Ridge 一般来说,只要我们觉得数据有线性关系,用LinearRegression类拟合的不是特别好,需要正则化,可以考虑用Ridge类。但是这个类最大的缺点是每次我们要自己指定一个超参数α,然后自己评估α的好坏,比较麻烦,一般我都用下一节讲到的RidgeCV类来跑Ridge回归,不推荐直接用这个Ridge类,除非你只是为了学习Ridge回归。 RidgeCV 一般来说,只要我们觉得数据有线性关系,用LinearRegression类拟合的不是特别好,需要正则化,可以考虑用RidgeCV类。不是为了学习的话就不用Ridge类。为什么这里只是考虑用RidgeCV类呢?因为线性回归正则化有很多的变种,Ridge只是其中的一种