一:深入理解SVM
二:哪些模型不需要归一化或者标准化
解析:
在实际应用中,需要归一化的模型:
1.基于距离计算的模型:KNN。
2.通过梯度下降法求解的模型:线性回归、逻辑回归、支持向量机、神经网络。
但树形模型不需要归一化,因为它们不关心变量的值,而是关心变量的分布和变量之间的条件概率,如决策树、随机森林(Random Forest)。
其他如管博士所说,我归一化和标准化主要是为了使计算更方便 比如两个变量的量纲不同 可能一个的数值远大于另一个那么他们同时作为变量的时候 可能会造成数值计算的问题,比如说求矩阵的逆可能很不精确 或者梯度下降法的收敛比较困难,还有如果需要计算欧式距离的话可能 量纲也需要调整 所以我估计lr 和 knn 标准化一下应该有好处。 至于其他的算法 我也觉得如果变量量纲差距很大的话 先标准化一下会有好处。
树形结构为啥不需要归一化
解析:
因为数值缩放不影响分裂点位置,对树模型的结构不造成影响。
按照特征值进行排序的,排序的顺序不变,那么所属的分支以及分裂点就不会有不同。而且,树模型是不能进行梯度下降的,因为构建树模型(回归树)寻找最优点时是通过寻找最优分裂点完成的,因此树模型是阶跃的,阶跃点是不可导的,并且求导没意义,也就不需要归一化。
既然树形结构(如决策树、RF)不需要归一化,那为何非树形结构比如Adaboost、SVM、LR、Knn、KMeans之类则需要归一化呢?
对于线性模型,特征值差别很大时,比如说LR,我有两个特征,一个是(0,1)的,一个是(0,10000)的,运用梯度下降的时候,损失等高线是椭圆形,需要进行多次迭代才能到达最优点。
但是如果进行了归一化,那么等高线就是圆形的,促使SGD往原点迭代,从而导致需要的迭代次数较少。
三:曼哈顿距离和欧氏距离
解析:
欧氏距离,最常见的两点之间或多点之间的距离表示法,又称之为欧几里得度量,它定义于欧几里得空间中,如点 x = (x1,…,xn) 和 y = (y1,…,yn) 之间的距离为:
欧氏距离虽然很有用,但也有明显的缺点。它将样本的不同属性(即各指标或各变量量纲)之间的差别等同看待,这一点有时不能满足实际要求。例如,在教育研究中,经常遇到对人的分析和判别,个体的不同属性对于区分个体有着不同的重要性。因此,欧氏距离适用于向量各分量的度量标准统一的情况。 曼哈顿距离,我们可以定义曼哈顿距离的正式意义为L1-距离或城市区块距离,也就是在欧几里得空间的固定直角坐标系上两点所形成的线段对轴产生的投影的距离总和。例如在平面上,坐标(x1, y1)的点P1与坐标(x2, y2)的点P2的曼哈顿距离为:
,要注意的是,曼哈顿距离依赖座标系统的转度,而非系统在坐标轴上的平移或映射。当坐标轴变动时,点间的距离就会不同。 通俗来讲,想象你在曼哈顿要从一个十字路口开车到另外一个十字路口,驾驶距离是两点间的直线距离吗?显然不是,除非你能穿越大楼。而实际驾驶距离就是这个“曼哈顿距离”,而直线距离就是欧氏距离,所以说欧氏距离将样本的每一个特征都无差别对待。这也是曼哈顿距离名称的来源, 同时,曼哈顿距离也称为城市街区距离(City Block distance)。 曼哈顿距离和欧式距离一般用途不同,无相互替代性。
四:机器学习完整项目
解析:
1 抽象成数学问题
明确问题是进行机器学习的第一步。机器学习的训练过程通常都是一件非常耗时的事情,胡乱尝试时间成本是非常高的。
这里的抽象成数学问题,指的我们明确我们可以获得什么样的数据,目标是一个分类还是回归或者是聚类的问题,如果都不是的话,如果划归为其中的某类问题。
2 获取数据
数据决定了机器学习结果的上限,而算法只是尽可能逼近这个上限。
数据要有代表性,否则必然会过拟合。
而且对于分类问题,数据偏斜不能过于严重,不同类别的数据数量不要有数个数量级的差距。
而且还要对数据的量级有一个评估,多少个样本,多少个特征,可以估算出其对内存的消耗程度,判断训练过程中内存是否能够放得下。如果放不下就得考虑改进算法或者使用一些降维的技巧了。如果数据量实在太大,那就要考虑分布式了。
3 特征预处理与特征选择
良好的数据要能够提取出良好的特征才能真正发挥效力。
特征预处理、数据清洗是很关键的步骤,往往能够使得算法的效果和性能得到显著提高。归一化、离散化、因子化、缺失值处理、去除共线性等,数据挖掘过程中很多时间就花在它们上面。这些工作简单可复制,收益稳定可预期,是机器学习的基础必备步骤。
筛选出显著特征、摒弃非显著特征,需要机器学习工程师反复理解业务。这对很多结果有决定性的影响。特征选择好了,非常简单的算法也能得出良好、稳定的结果。这需要运用特征有效性分析的相关技术,如相关系数、卡方检验、平均互信息、条件熵、后验概率、逻辑回归权重等方法。
4 训练模型与调优
直到这一步才用到我们上面说的算法进行训练。现在很多算法都能够封装成黑盒供人使用。但是真正考验水平的是调整这些算法的(超)参数,使得结果变得更加优良。这需要我们对算法的原理有深入的理解。理解越深入,就越能发现问题的症结,提出良好的调优方案。
5 模型诊断
如何确定模型调优的方向与思路呢?这就需要对模型进行诊断的技术。
过拟合、欠拟合 判断是模型诊断中至关重要的一步。常见的方法如交叉验证,绘制学习曲线等。过拟合的基本调优思路是增加数据量,降低模型复杂度。欠拟合的基本调优思路是提高特征数量和质量,增加模型复杂度。
误差分析 也是机器学习至关重要的步骤。通过观察误差样本,全面分析误差产生误差的原因:是参数的问题还是算法选择的问题,是特征的问题还是数据本身的问题……
诊断后的模型需要进行调优,调优后的新模型需要重新进行诊断,这是一个反复迭代不断逼近的过程,需要不断地尝试, 进而达到最优状态。
6 模型融合
一般来说,模型融合后都能使得效果有一定提升。而且效果很好。
工程上,主要提升算法准确度的方法是分别在模型的前端(特征清洗和预处理,不同的采样模式)与后端(模型融合)上下功夫。因为他们比较标准可复制,效果比较稳定。而直接调参的工作不会很多,毕竟大量数据训练起来太慢了,而且效果难以保证。
7 上线运行
这一部分内容主要跟工程实现的相关性比较大。工程上是结果导向,模型在线上运行的效果直接决定模型的成败。 不单纯包括其准确程度、误差等情况,还包括其运行的速度(时间复杂度)、资源消耗程度(空间复杂度)、稳定性是否可接受。
这些工作流程主要是工程实践上总结出的一些经验。并不是每个项目都包含完整的一个流程。这里的部分只是一个指导性的说明,只有大家自己多实践,多积累项目经验,才会有自己更深刻的认识。
五:LR为什么要进行特征离散化
① 非线性!非线性!非线性!逻辑回归属于广义线性模型,表达能力受限;单变量离散化为N个后,每个变量有单独的权重,相当于为模型引入了非线性,能够提升模型表达能力,加大拟合; 离散特征的增加和减少都很容易,易于模型的快速迭代;
② 速度快!速度快!速度快!稀疏向量内积乘法运算速度快,计算结果方便存储,容易扩展;
③ 鲁棒性!鲁棒性!鲁棒性!离散化后的特征对异常数据有很强的鲁棒性:比如一个特征是年龄>30是1,否则0。如果特征没有离散化,一个异常数据“年龄300岁”会给模型造成很大的干扰;
④ 方便交叉与特征组合:离散化后可以进行特征交叉,由M+N个变量变为MN个变量,进一步*引入非线性,提升表达能力;
特征交叉一般使用笛卡尔积,比如说 年龄 和 工资分组之后,年龄有 M 个取值,工资有 N 个取值,那么生成的的、新数据集变量就有 M*N个取值
⑤ 稳定性:特征离散化后,模型会更稳定,比如如果对用户年龄离散化,20-30作为一个区间,不会因为一个用户年龄长了一岁就变成一个完全不同的人。当然处于区间相邻处的样本会刚好相反,所以怎么划分区间是门学问;
⑥ 简化模型:特征离散化以后,起到了简化了逻辑回归模型的作用,降低了模型过拟合的风险。
六: LR
https://blog.csdn.net/cyh_24/article/details/50359055
- 线性回归是 对
进行回归,但是呢,逻辑回归是对 对数几率
进行回归。
- 那么,对逻辑回归而言, Y=1Y=1的 对数几率就是:
七:生成模型判别模型
八:神经网络初始化权重全为零会导致什么
当我们在训练一个神经网络的时候,参数的随机初始化是非常重要的,对于逻辑回归来说,把参数初始化为0是很ok的。但是对于一个神经网络,如果我们将权重或者是所有参数初始化为0,梯度下降算法将不会起到任何作用。
1.为什么逻辑回归参数初始化为0是ok的?
下图所示,是logistic回归的图解:
假设我们用梯度下降法来更新我们的模型参数。
logistic回归模型的前向传播:
logistic回归模型的反向传播:
参数更新公式:
假设在logistic回归模型中,当我们把 初始化为0的时候,
会因为输入
的不同,导致
不同,且不为0,模型的权重能够得到更新。当b初始化也为0的时候,
的值为0.5,
不为0,参数b也可以得到更新。
2.为什么神经网络的权重或所有参数初始化为0,梯度下降不再work?
为了说明这个问题,我们以一个简单的神经网络为例,该神经网络只有1层隐藏层,包含2个神经元,其具体的神经网络的结构图如下图所示:
神经网络的前向传播
神经网络的反向传播所能用到的导数公式:
根据上述的详细公式,我们分析一下3种情况:
- 模型所有权重w初始化为0,所有偏置b初始化为0
- 模型所有权重w初始化为0,所有偏置b随机初始化
- 模型所有的权重w随机初始化,所有偏置b初始化为0
2.1 模型所有权重w初始化为0,所有偏置b初始化为0
在此情况下,前向传播计算过程中, , 在反向传播进行参数更新的时候,会发现由于
和
均相等,会导致
和
相等,更新时
和
相等,出现权重的对称性。
由于所有权重初始化为0,这样在第一个batch反向传播的时候会导致 和
相等且为0,这样导致的结果是什么呢?第一个batch反向传播除了
和
以及 能够得到更新,其余权重均得不到更新。
当第二个batch传给神经网络之后,由于 和
相等但不为0,会导致
和
相等,这样会导致
和
相等,
和
相等。
依次类推,无论训练多少次,无论我们隐藏层神经元有多少个,由于权重的对称性,我们的隐层的神经单元输出始终不变,出现隐藏神经元的对称性。我们希望不同神经元能够有不同的输出,这样的神经网络才有意义。
简单来说,就会出现同一隐藏层所有神经元的输出都一致,对于后期不同的batch,每一隐藏层的权重都能得到更新,但是存在每一隐藏层的隐藏神经元权重都是一致的,多个隐藏神经元的作用就如同1个神经元。
2.2 模型所有权重w初始化为0,所有偏置b随机初始化
在此情况下,第一个batch前向传播: ,在反向传播的过程中,由于
与
均为0,导致
均为0,则
得不到更新,为0,模型参数能够得到更新的只有
.
同理,在第二个batch在反向传播的过程中,由于 和
不为0,导致所有的参数都能够得到更新。这种方式存在更新较慢、梯度消失、梯度爆炸等问题,在实践中,通常不会选择此方式。
2.3 模型所有的权重w随机初始化,所有偏置b初始化为0
在此情况下,在前向传播计算过程中, 在反向传播的过程中所有权重的导数都不相同,所以权重和偏置b都能得到更新。
结论:在训练神经网络的时候,权重初始化要谨慎,不能初始化为0
九. KL散度和交叉熵
信息熵
信息熵很好李拦截,信息熵首先是个熵,表示一个混乱程度,在信息论中表示信息的随机性和不确定性。所以只需要在给我们提供的信息前面增加一个条件,就可以表示我们拿到的信息的不确定性。
条件熵
我们已经知道了自然条件下的Y的熵,但实际预测时,我们并非是根据已经知道的Y的分布去瞎猜结果,而是知道样本X,X可以对预测Y提供一定的信息,因此就可以得到条件熵。对于一个特征X,其每个取值x下Y的信息熵乘以x所占的样本比例,既可得特征X的条件熵。
信息增益
直观的说,有了X作为预测y 的辅助,可以增加一些信息量,反过来讲,也就是降低了信息的不确定性,即降低了熵值。因此,可以得到信息增益的概念
互信息
如果不把X看做预测Y的特征,而是把X,Y看做成地位相等事件,可以看到信息增益的概念和互信息是一致的:
交叉熵








十、Dropout
为什么出现dropout
在机器学习的模型中,如果模型的参数太多,而训练样本又太少,训练出来的模型很容易产生过拟合的现象。在训练神经网络的时候经常会遇到过拟合的问题,过拟合具体表现在:模型在训练数据上损失函数较小,预测准确率较高;但是在测试数据上损失函数比较大,预测准确率较低。
过拟合是很多机器学习的通病。如果模型过拟合,那么得到的模型几乎不能用。为了解决过拟合问题,一般会采用模型集成的方法,即训练多个模型进行组合。此时,训练模型费时就成为一个很大的问题,不仅训练多个模型费时,测试多个模型也是很费时。
综上所述,训练深度神经网络的时候,总是会遇到两大缺点:
(1)容易过拟合
(2)费时
Dropout可以比较有效的缓解过拟合的发生,在一定程度上达到正则化的效果。
过程
(1)首先随机(临时)删掉网络中一半的隐藏神经元,输入输出神经元保持不变(图3中虚线为部分临时被删除的神经元)
(2) 然后把输入x通过修改后的网络前向传播,然后把得到的损失结果通过修改的网络反向传播。一小批训练样本执行完这个过程后,在没有被删除的神经元上按照随机梯度下降法更新对应的参数(w,b)。
(3)然后继续重复这一过程:
- 恢复被删掉的神经元(此时被删除的神经元保持原样,而没有被删除的神经元已经有所更新)
- 从隐藏层神经元中随机选择一个一半大小的子集临时删除掉(备份被删除神经元的参数)。
- 对一小批训练样本,先前向传播然后反向传播损失并根据随机梯度下降法更新参数(w,b) (没有被删除的那一部分参数得到更新,删除的神经元参数保持被删除前的结果)。
为什么说Dropout可以解决过拟合?
(1)取平均的作用: 先回到标准的模型即没有dropout,我们用相同的训练数据去训练5个不同的神经网络,一般会得到5个不同的结果,此时我们可以采用 “5个结果取均值”或者“多数取胜的投票策略”去决定最终结果。例如3个网络判断结果为数字9,那么很有可能真正的结果就是数字9,其它两个网络给出了错误结果。这种“综合起来取平均”的策略通常可以有效防止过拟合问题。因为不同的网络可能产生不同的过拟合,取平均则有可能让一些“相反的”拟合互相抵消。dropout掉不同的隐藏神经元就类似在训练不同的网络,随机删掉一半隐藏神经元导致网络结构已经不同,整个dropout过程就相当于对很多个不同的神经网络取平均。而不同的网络产生不同的过拟合,一些互为“反向”的拟合相互抵消就可以达到整体上减少过拟合。
(2)减少神经元之间复杂的共适应关系: 因为dropout程序导致两个神经元不一定每次都在一个dropout网络中出现。这样权值的更新不再依赖于有固定关系的隐含节点的共同作用,阻止了某些特征仅仅在其它特定特征下才有效果的情况 。迫使网络去学习更加鲁棒的特征 ,这些特征在其它的神经元的随机子集中也存在。换句话说假如我们的神经网络是在做出某种预测,它不应该对一些特定的线索片段太过敏感,即使丢失特定的线索,它也应该可以从众多其它线索中学习一些共同的特征。从这个角度看dropout就有点像L1,L2正则,减少权重使得网络对丢失特定神经元连接的鲁棒性提高。
总结:
当前Dropout被大量利用于全连接网络,而且一般认为设置为0.5或者0.3,而在卷积网络隐藏层中由于卷积自身的稀疏化以及稀疏化的ReLu函数的大量使用等原因,Dropout策略在卷积网络隐藏层中使用较少。总体而言,Dropout是一个超参,需要根据具体的网络、具体的应用领域进行尝试。
十一、1x1卷积作用
十二、为什么不使用多路划分,而是使用二叉树划分
十三、为什么resnet可避免梯度消失



