模型评估指标

分类模型评估指标

常见的分类模型评估指标有:准确率/召回率/精准率/F值
1)准确率(Accuracy) = 预测正确的样本数/总样本数
2)召回率(Recall) = 预测正确的正例样本数/样本中的全部正例样本数
3)精准率(Precision) = 预测正确的正例样本数/预测为正例的样本数
4)F值 = PrecisionRecall2 / (Precision+Recall) (即F值为正确率和召回率的调和平均值)

激活函数

什么是激活函数,为什么要用非线性激活函数

如下图,在神经元中,输入的 inputs 通过加权,求和后,还被作用了一个函数,这个函数就是激活函数 Activation Function。

不用激活函数或使用线性激活函数,和直接使用 Logistic 回归没有区别,因为无论神经网络有多少层,输出都是输入的线性组合,与没有隐藏层效果相当,就成了最原始的感知器了。

非线性激活函数给神经元引入了非线性因素,使得神经网络可以任意逼近任何非线性函数,这样神经网络就可以应用到众多的非线性模型中。非线性激励函数最早的想法是sigmoid函数或者tanh函数,输出有界,很容易充当下一层输入。

梯度消失与梯度爆炸

什么是梯度消失和梯度爆炸,分别会引发什么问题

我们知道神经网络在训练过程中会利用梯度对网络的权重进行更新迭代。
当梯度出现指数级递减或指数递增时,称为梯度消失或者梯度爆炸。

假定激活函数 $g(z) = z$, 令 $b^{[l]} = 0$,对于目标输出有:
$\hat{y} = W^{[L]}W^{[L-1]}…W^{[2]}W^{[1]}X$
1)对于 W[l]的值小于 1 的情况,激活函数的值将以指数级递减
2)对于 W[l]的值大于 1 的情况,激活函数的值将以指数级递增
同理的情况会出现在反向求导。

梯度消失时,权重更新缓慢,训练难度大大增加。梯度消失相对梯度爆炸更常见。
梯度爆炸时,权重大幅更新,网络变得不稳定。较好的情况是网络无法利用训练数据学习,最差的情况是权值增大溢出,变成网络无法更新的 NaN 值。

特征工程

特征工程是什么

数据和特征决定机器学习上限,而模型和算法只是逼近这个上限
特征工程目的:最大限度地从原始数据中提取特征以供算法和模型使用


数据清洗

数据清洗的结果直接关系到模型效果以及最终的结论。在实际的工作中,数据清洗通常占开发过程的 50%-80% 的时间。

在数据预处理过程主要考虑两个方面,如下:

  • 选择数据处理工具:关系型数据库戒者Python
  • 查看数据的元数据以及数据特征:一是查看元数据,包括字段解释、数据来源等一切可以描述数据的信息;另外是抽取一部分数据,通过人工查看的方式,对数据本身做一个比较直观的了解,并且初步发现一些问题,为之后的数据处理做准备。

缺省值清洗

缺省值是数据中最常见的一个问题,处理缺省值有很多方式,主要包括以下四个步骤进行缺省值处理:

  • 确定缺省值范围
  • 去除不需要的字段
  • 填充缺省值内容
  • 重新获取数据

注意:最重要的是 缺省值内容填充。

特征选择

待整理,需要合并指”特征工程文档中”。。。

机器学习中,有哪些特征选择的工程方法

数据和特征决定了机器学习的上限,而模型和算法只是逼近这个上限而已

  • 计算每一个特征与响应变量的相关性
    工程上常用的手段有计算皮尔逊系数互信息系数皮尔逊系数只能衡量线性相关性,而**互信息系数能够很好地度量各种相关性,但是计算相对复杂一些,好在很多toolkit里边都包含了这个工具(如sklearn的MINE),得到相关性之后就可以排序选择特征了;

  • 构建单个特征的模型,通过模型的准确性为特征排序,借此来选择特征;

  • 通过L1正则项来选择特征
    L1正则方法具有稀疏解的特性,因此天然具备特征选择的特性,但是要注意,L1没有选到的特征不代表不重要,原因是两个具有高相关性的特征可能只保留了一个,如果要确定哪个特征重要应再通过L2正则方法交叉检验;

  • 训练能够对特征打分的预选模型
    RandomForest和Logistic Regression等都能对模型的特征打分,通过打分获得相关性后再训练最终模型;

  • 通过特征组合后再来选择特征
    如对用户id和用户特征最组合来获得较大的特征集再来选择特征,这种做法在推荐系统和广告系统中比较常见,这也是所谓亿级甚至十亿级特征的主要来源,原因是用户数据比较稀疏,组合特征能够同时兼顾全局模型和个性化模型。

  • 通过深度学习来进行特征选择
    目前这种手段正在随着深度学习的流行而成为一种手段,尤其是在计算机视觉领域,原因是深度学习具有自动学习特征的能力,这也是深度学习又叫unsupervised feature learning的原因。从深度学习模型中选择某一神经层的特征后就可以用来进行最终目标模型的训练了。

卷积层、池化层和全连接层详解

为什么使用卷积

相比标准神经网络,对于大量的输入数据,卷积过程有效地减少了 CNN 的参数数量,原因有以下两点:

  • 参数共享(Parameter sharing):特征检测如果适用于图片的某个区域,那么它也可能适用于图片的其他区域。即在卷积过程中,不管输入有多大,一个特征探测器(滤波器)就能对整个输入的某一特征进行探测。

  • 稀疏连接(Sparsity of connections):在每一层中,由于滤波器的尺寸限制,输入和输出之间的连接是稀疏的,每个输出值只取决于输入在局部的一小部分值。
    池化过程则在卷积后很好地聚合了特征,通过降维来减少运算量。

由于 CNN 参数数量较小,所需的训练样本就相对较少,因此在一定程度上不容易发生过拟合现象。并且 CNN 比较擅长捕捉区域位置偏移。即进行物体检测时,不太受物体在图片中位置的影响,增加检测的准确性和系统的健壮性。

然后这篇文章, 从感受视野的角度出发,解释了参数共享、稀疏连接、平移不变性等

然后卷积层可以看做全连接的一种简化形式:不全连接+不参数共享。所以全连接层的参数才如此之多。

过拟合与欠拟合

什么是过拟合和欠拟合

欠拟合:算法不太符合样本的数据特征
过拟合:算法太符合样本的数据特征,对实际生产中的数据特征却无法拟合

过拟合(overfitting)具体现象体现为,随着训练过程的进行,模型复杂度增加,在训练集上的错误率渐渐减小,但是在验证集上的错误率却渐渐增大。

特征过多,特征数量级过大,训练数据过少,都可能导致过度拟合。过拟合会让模型泛化能力变差。

归一化

一、数值类型特征常用归一化方法

1、线性函数归一化(Min-Max Scaling)

它对原始数据进行线性变换,使结果映射到[0, 1]的范围,实现对原始数据的等比缩放。
归一化公式如下,其中X为原始数据,X max 、X min 分别为数据最大值和最小值。

优点:通过利用变量取值的最大值和最小值将原始数据转换为界于某一特定范围的数据,从 而消除量纲和数量级的影响
缺点:由于极值化方法在对变量无量纲化过程中仅仅与该变量的最大值和最小值这两个极端 值有关,而与其他取值无关,这使得该方法在改变各变量权重时过分依赖两个极端取值。实际使用中可以用经验常量值来替代max和min。

2、零均值归一化(Z-Score Normalization)

它会将原始数据映射到均值为0、标准差为1的分布上。具体来说,假设原始特征的均值为μ、标准差为σ,那么
归一化公式定义为

优点:去量纲化。我的理解就是通过某种方法能去掉实际过程中的单位,从而简化计算。
缺点:这种归一化方式要求原始数据的分布可以近似为高斯分布,否则归一化的效果会变得很糟糕。

机器学习开发策略

ML策略

假设你构建了一个喵咪分类器,训练之后准确率达到90%,但在测试集上还不够好。此时你可以想到的优化方法有哪些呢?总结后大致如下:

  • 收集更多的数据
  • 收集更多的多样化训练集,比如不同姿势的猫咪图片等
  • 用梯度下降法训练更长时间
  • 尝试Adam算法
  • 尝试更大的网路
  • 尝试小一点的网络
  • 尝试dropout随机失活算法
  • 加上L2正则项
  • 改善网络结构,如变更激活函数,变更隐藏层节点数量

优化的方法虽然很多,但如果方向错误,可能白费几个月时间。
那通过哪些策略可以减少错误发生的几率呢?怎么判断哪些方法可以尝试,哪些方法可以丢弃呢?