机器学习问题总结(02)

文章目录

    • 1.stacking模型以及做模型融合的知识
      • 1.1 从提交结果中融合
      • 1.2 stacking
      • 1.3 blending
    • 2. 怎样去优化SVM算法模型的?
      • 2.1 SMO优化算法
      • 2.2 libsvm 和 Liblinear
    • 3.现有底层是tensorflow的keras框架,如果现在有一个tensorflow训练好的模型,keras怎么读取?
      • 3.1 tf模型的保存与导入
        • 模型保存:
        • 导入预训练好的模型
    • 4.卷积层为什么能抽取特征? Pool层的作用
      • 4.1 激活函数的种类和特点?
      • 4.2 卷积层为什么能抽取特征?
      • 4.3 **Pool层的作用**
    • 5.LR模型
    • 6.LR模型为什么采用似然估计损失函数
    • 7.了解深度学习吗?能否讲下CNN的特点?
    • 8.说说RBM编码器
    • 9.进程和线程的区别

1.stacking模型以及做模型融合的知识

模型融合常常是在使用机器学习方法解决问题过程中比较重要的一步,常常是在做完模型优化后面。顾名思义,模型融合就是综合考虑不同模型的情况,并将它们的结果融合在一起,从而提高模型的性能。

模型融合可以分为:从提交结果文件中融合,stacking和blending

1.1 从提交结果中融合

最简单的方法就是将不同模型预测的结果直接进行融合,因为这样做并不需要重新训练模型,只需要把不同模型的测试结果弄出来,然后采取某种措施得出一个最终结果就ok。
投票机制(voting)是集成学习里面针对分类问题的一种结合策略。基本思想是选择所有机器学习算法当中输出最多的那个类。机器学习分类算法的输出有两种类型:一种是直接输出类标签,另外一种是输出类概率,使用前者进行投票叫做硬投票(Majority/Hard voting),使用后者进行分类叫做软投票(Soft voting)。
1).硬投票方法
当多个不同模型直接输出的是类别的标签的时候,使用硬投票,直接选择投票数最多的那个类作为最终的分类结果。
2).软投票(加权表决融合)
当多个不同模型输出的是属于某个类别的概率的时候,就使用软投票的方法,对相同的类别概率进行叠加,最终选出概率值最大的那个类别为分类的结果。
3). 对结果取平均
当我们面对的问题是回归问题的时候,我们就通过对不同模型的预测结果求平均当做融合模型的结果。

1.2 stacking

Stacking的基本思想是用一些基分类器进行分类,然后使用另一个分类器对结果进行整合。
例子:2-fold stacking
1.将训练集分成两个不相交的集合
2.使用第一个集合训练基分类器
3.在训练好的基分类器上对第二个集合做预测
4.将第三步得到的预测结果作为高层(融合分类器)分类器的输入,正确的标签作为输出,训练高层的分类器。

Stacking的模型可以在特征空间上获取更加多的信息,因为第二阶段模型是以第一阶段模型的预测值会作为特征。
这里写图片描述

这里写图片描述

相比于bagging和boosting方法,stacking方法的区别

  • bagging主要用于减少方差
  • boosting方法主要用于减少方差
  • stacking方法既可以减少方差也可以减少偏差

1.3 blending

Blending与Stacking大致相同,只是Blending的主要区别在于训练集不是通过K-Fold的CV策略来获得预测值从而生成第二阶段模型的特征,

而是建立一个Holdout集,例如说10%的训练数据,第二阶段的stacker模型就基于第一阶段模型对这10%训练数据的预测值进行拟合。说白了,就是把Stacking流程中的K-Fold CV(相当于把样本全过了一遍) 改成 HoldOut CV(一开始就直接分好)。

优点

  • 比stacking简单(因为不用进行k次的交叉验证来获得stacker feature)
  • 避开了一个信息泄露问题:generlizers和stacker使用了不一样的数据集
  • 在团队建模过程中,不需要给队友分享自己的随机种子
    缺点
  • 使用了很少的数据(第二阶段的blender只使用training set10%的量)
  • blender可能会过拟合(其实大概率是第一点导致的)
  • stacking使用多次的CV会比较稳健

对于实践中的结果而言,stacking和blending的效果是差不多的,所以使用哪种方法都没什么所谓,完全取决于个人爱好。

2. 怎样去优化SVM算法模型的?

2.1 SMO优化算法

SMO算法是支持向量机的快速算法,不断的将原二次规划问题分解为只有两个变量的二次规划子问题求解,直到所有变量满足KTT条件,这样通过启发式的方法得到原二次规划问题的最优解。

2.2 libsvm 和 Liblinear

LIBSVM是台湾大学林智仁(Lin Chih-Jen)教授等开发设计的一个简单、易于使用和快速有效的SVM模式识别与回归的软件包,他不但提供了编译好的可在Windows系列系统的执行文件,还提供了源代码,方便改进、修改以及在其它操作系统上应用;该软件对SVM所涉及的参数调节相对比较少,提供了很多的默认参数,利用这些默认参数可以解决很多问题;并提供了交互检验(Cross Validation)的功能。该软件可以解决C-SVM、ν-SVM、ε-SVR和ν-SVR等问题,包括基于一对一算法的多类模式识别问题。

Libsvm和Liblinear都是国立台湾大学的Chih-Jen Lin博士开发的,Libsvm主要是用来进行非线性svm 分类器的生成,提出有一段时间了,而Liblinear则是去年才创建的,主要是应对large-scale的data classification,因为linear分类器的训练比非线性分类器的训练计算复杂度要低很多,时间也少很多,而且在large scale data上的性能和非线性的分类器性能相当,所以Liblinear是针对大数据而生的。

有关Liblinear和Libsvm各自的优势可以归纳如下:

1.libsvm用来就解决通用典型的分类问题

2.liblinear主要为大规模数据的线性模型设计

3.现有底层是tensorflow的keras框架,如果现在有一个tensorflow训练好的模型,keras怎么读取?

  • 直接通过API读取tensflow的模型文件
  • keras.models.load_model(‘my_model.h5’
  • 不同深度学习框架模型的转换可以使用微软的MMdnn。

3.1 tf模型的保存与导入

模型保存:

saver = tf.train.Saver()
saver.save(sess, 'my_test_model')

主要有2个文件

  • meta graph(.meta结尾)
    这是一个 protocol buffer,保存了完整的 Tensorflow 图,即所有变量、操作和集合等。拥有一个.meta的扩展名。

  • checkpoint file(.ckpt结尾)
    这是一个二进制文件包含了所有权重、偏置、梯度和其他变量的值。这个文件有一个.ckpt的扩展名。在0.11版本以前只有一个文件,现在有两个。

导入预训练好的模型

如果你想用别人预训练好的模型进行fine-tuning,有两件事情需要做。

  • 创造网络
    你可以通过python写好和原来模型一样的每一层代码来创造网络,可是,仔细一想,我们已经通过.metaa把网络存储起来,我们可以用来再创造网络使用tf.train.import()语句。
saver = tf.train.import_meta_graph('my_test_model-1000.meta')
  • 加载参数
    我们可以恢复网络的参数,通过使用saver,它是tf.train.Saver()类的一个实例。
with tf.Session() as sess:new_saver = tf.train.import_meta_graph('my_test_model-1000.meta')new_saver.restore(sess, tf.train.latest_checkpoint('./'))

4.卷积层为什么能抽取特征? Pool层的作用

4.1 激活函数的种类和特点?

  • sigmoid 、反正切tanh 都有梯度消失问题

  • relu 快,问题:负值0梯度
    1.sigmoid

  • Sigmoid(也叫逻辑激活函数) 非线性激活函数的形式是,其图形如上图左所示。之前我们说过,sigmoid函数输入一个实值的数,然后将其压缩到0~1的范围内。特别地,大的负数被映射成0,大的正数被映射成1。sigmoid function在历史上流行过一段时间因为它能够很好的表达“激活”的意思,未激活就是0,完全饱和的激活则是1。而现在sigmoid已经不怎么常用了,主要是因为它有两个缺点:

  • Sigmoids saturate and kill gradients. Sigmoid容易饱和,并且当输入非常大或者非常小的时候,神经元的梯度就接近于0了,从图中可以看出梯度的趋势。这就使得我们在反向传播算法中反向传播接近于0的梯度,导致最终权重基本没什么更新,我们就无法递归地学习到输入数据了。另外,你需要尤其注意参数的初始值来尽量避免saturation的情况。如果你的初始值很大的话,大部分神经元可能都会处在saturation的状态而把gradient kill掉,这会导致网络变的很难学习。

  • Sigmoid outputs are not zero-centered. Sigmoid 的输出不是0均值的,这是我们不希望的,因为这会导致后层的神经元的输入是非0均值的信号,这会对梯度产生影响:假设后层神经元的输入都为正(e.g. x>0 elementwise in ),那么对w求局部梯度则都为正,这样在反向传播的过程中w要么都往正方向更新,要么都往负方向更新,导致有一种捆绑的效果,使得收敛缓慢。 当然了,如果你是按batch去训练,那么每个batch可能得到不同的符号(正或负),那么相加一下这个问题还是可以缓解。因此,非0均值这个问题虽然会产生一些不好的影响,不过跟上面提到的 kill gradients 问题相比还是要好很多的。

2.tanh


Tanh和Sigmoid是有异曲同工之妙的,它的图形如上图右所示,不同的是它把实值得输入压缩到-1~1的范围,因此它基本是0均值的,也就解决了上述Sigmoid缺点中的第二个,所以实际中tanh会比sigmoid更常用。但是它还是存在梯度饱和的问题。Tanh是sigmoid的变形.

3.relu: f(x)=max(0,x)
这里写图片描述

近年来,ReLU 变的越来越受欢迎。它的数学表达式是: f(x)=max(0,x)。很显然,从上图左可以看出,输入信号
<0时,输出为0,>0时,输出等于输入。ReLU的优缺点如下:

  • 优点1:Krizhevsky et al. 发现使用 ReLU 得到的SGD的收敛速度会比 sigmoid/tanh 快很多(如上图右)。有人说这是因为它是linear,而且梯度不会饱和
  • 优点2:相比于 sigmoid/tanh需要计算指数等,计算复杂度高,ReLU 只需要一个阈值就可以得到激活值。
  • 缺点1: ReLU在训练的时候很”脆弱”,一不小心有可能导致神经元”坏死”。举个例子:由于ReLU在x<0时梯度为0,这样就导致负的梯度在这个ReLU被置零,而且这个神经元有可能再也不会被任何数据激活。如果这个情况发生了,那么这个神经元之后的梯度就永远是0了,也就是ReLU神经元坏死了,不再对任何数据有所响应。实际操作中,如果你的learning rate 很大,那么很有可能你网络中的40%的神经元都坏死了。 当然,如果你设置了一个合适的较小的learning rate,这个问题发生的情况其实也不会太频繁。
  1. Leaky ReLU
    这里写图片描述
    Leaky ReLUs 就是用来解决ReLU坏死的问题的。和ReLU不同,当x<0时,它的值不再是0,而是一个较小斜率(如0.01等)的函数。也就是说f(x)=1(x<0)(ax)+1(x>=0)(x),其中a是一个很小的常数。这样,既修正了数据分布,又保留了一些负轴的值,使得负轴信息不会全部丢失。关于Leaky ReLU 的效果,众说纷纭,没有清晰的定论。有些人做了实验发现 Leaky ReLU 表现的很好;有些实验则证明并不是这样。

激活函数的作用:非线性。

4.2 卷积层为什么能抽取特征?

  • 卷积层负责提取特征,采样层负责特征选择,全连接层负责分类
  • 卷积神经网络的特点就是权重共享,利用不同的卷积核对输入的图像进行卷积,可以得到一张张特征图
    多种滤波器和对应的滤镜效果,比如边缘检测、锐化、均值模糊、高斯模糊
    这里写图片描述

4.3 Pool层的作用

  • pooling确实起到了整合特征的作用
  • pooling的结果是使得特征减少,参数减少,但pooling的目的并不仅在于此
  • pooling目的是为了保持某种不变性(旋转、平移、伸缩等),常用的有mean-pooling,max-pooling和Stochastic-pooling(随机池化)三种

5.LR模型

  • 在线性回归的基础上加了sigmoid函数,所以变成了分类模型,输出可以表示概率。

  • 采用似然估计构造目标函数,目标是优化最大似然估计,公式H(x)=-(ylogf(x)+(1-y)log(1-f(x)),一般优化方法采用的是梯度下降法

6.LR模型为什么采用似然估计损失函数

  • 最小二乘法反映的是线性空间上的线性投影的最短距离,在非线性空间上表现不如MLE。(MLE可以看作一种特殊情况下的Bayesian 估计)
  • 如果采用均方差损失函数的时候,梯度下降求偏导时会有一项导数项,这样会导致梯度在一定阶段会收敛的特别慢,而对数损失函数log正好能和sigmoid的exp抵消掉,会加快收敛速度。
  • 最小二乘法是高斯分布下最大似然估计的一般结果,LR是伯努利分布下最大似然估计的一般结果(交叉熵损失),所以两者本质上都是最大似然估计。

7.了解深度学习吗?能否讲下CNN的特点?

CNN,特点是局部感受和权值共享
通过卷积核扫描原始数据能够学习到不同的局部的特征,接着通过池化进一步提取特征,这些做的能够让参数数目有量级的减少,同时权值共享是同一层隐含层共享权值,这样也是减少了隐含层的参数,很多卷积核学习的到特征最后传递到下一层网络,到最后一层采用分类器分类

深度学习解决了以往神经网络深度网络很多问题,
梯度消失爆炸问题,几个方面:

  • 是激活函数不光是只用sigmoid函数,还有 ReLU函数
  • 是在参数并不是初始化的时候并不是随机选择的,而是在前面有自编码器做了预训练,这样避免了梯度下降法求解陷入局部最优解;
  • 深度学习一些手段,权值共享,卷积核,pooling等都能抑制梯度消失问题
  • 二次代价函数换成交叉熵损失函数或者选用softmax+对数似然代价函数的组合

8.说说RBM编码器

RBM包括隐层,可见层和偏置层。可见层和隐含层可以双向传播。标准的RBM,隐含层和可见层都是二进制表示,既激活函数的激活值服从二项分布。每一层的节点没有链接,如果假设所有的节点都只能取0或者1,同时全概率分布p(v,h)满足伯努利分布。

参数:

  • 可视层和隐含层之间的权重矩阵
  • 可视节点的偏移量
  • 隐含层的偏移量
    应用
  • 降维,类似稀疏自编码器
  • 用RBM训练得到的权重举证和偏移量作为BP神经网路的初始值,避免陷入局部极小值
  • 可以估计联合分布P(v,h),进而求出p(h|v)。生成式模型
  • 直接计算p(h|v)进行分类。判别式模型

9.进程和线程的区别

有一个是进程的开销比线程大,通信麻烦一些,但更安全,所以很多时候我们用多线程加速,但有时候线程用不了,只能用进程

python:为了加速尝试过很多方法,比如GPU加速、C++动态库调用、还有就是多进程。

为什么要用多进程加速。

  • 因为python这个语言是解释型语言,本来用来进行cpu密集型计算就不适合,
  • 还有就是python没有类型,因为全是用哈希表实现的动态内存分配方式,比如你定义a = 2 ,其实底层的实现是先分配一个内存块,在用一个指针指向这个内存块,最后返回的是这个指针
  • 最重要的一点是当初在设计python的时候,为了图简单,加了一个全局锁,也就是一个时刻只能使用一个线程,多核完全浪费了

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/445200.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C/C++常见面试题(四)

C/C面试题集合四 目录 1、什么是C中的类&#xff1f;如何定义和实例化一个类&#xff1f; 2、请解释C中的继承和多态性。 3、什么是虚函数&#xff1f;为什么在基类中使用虚函数&#xff1f; 4、解释封装、继承和多态的概念&#xff0c;并提供相应的代码示例 5、如何处理内…

机器学习问题总结(03)

文章目录1.struct和class区别&#xff0c;你更倾向用哪个2.kNN&#xff0c;朴素贝叶斯&#xff0c;SVM的优缺点&#xff0c;各种算法优缺点2.1 KNN算法2.2 朴素贝叶斯2.3SVM算法2.4 ANN算法2.5 DT算法3. 10亿个整数&#xff0c;1G内存&#xff0c;O(n)算法&#xff0c;统计只出…

redis——新版复制

sync虽然解决了数据同步问题&#xff0c;但是在数据量比较大情况下&#xff0c;从库断线从来依然采用全量复制机制&#xff0c;无论是从数据恢复、宽带占用来说&#xff0c;sync所带来的问题还是很多的。于是redis从2.8开始&#xff0c;引入新的命令psync。 psync有两种模式&a…

Python(23)-面向对象2-继承,多态

面向对象基本概念2--继承、多态1.继承基本概念2.子类重写父类方法2.1完全重写2.2扩展父类方法--super()3.多继承4.新式类和旧式类5.多态基本概念6.类属性、类方法-classmethod6.1类属性6.2类方法classmethod7.静态方法staticmethod8.案例分析本系列博文来自学习《Python基础视频…

机器学习问题总结(04)

文章目录1、MLP的BP过程2、maxpool层BP怎么做的2.1 **mean pooling**2.2 max pooling3、opencv遍历像素的方式&#xff0c;讲两种&#xff1f;4、传统图像处理有了解过吗&#xff0c;比如去噪 特征提取5、问在linux下写过代码吗&#xff1f; 问用了什么软件工具6、LDA&#xff…

持续更新的Zookeeper知识总结

简介 Zookeeper为分布式应用 提供了高效且可靠的分布式协调服务&#xff0c;提供了诸如统一命名服务、发布订阅、负载均衡、配置管理和分布式锁等分布式的基础服务。 设计目标是将那些复杂且容易出错的分布式一致性服务封装起来&#xff0c;构成一个高效可靠的原语集&#xf…

机器学习问题总结(05)

文章目录1. Hadoop、Spark1.1 hadoop1.2 spark1.3 MapReduce1.3.1 概念1.3.1 MapReduce执行流程2、机器学习场景3、推荐系统&#xff08;预测电影等级&#xff09;4、CTR&#xff08;点击通过率 -> 广告&#xff09;5、SVM5.1 svm的原理5.2 SVM的核技巧6、K-means6.1 K-mean…

基于Socket的UDP和TCP编程介绍

一、概述 TCP(传输控制协议)和UDP(用户数据报协议是网络体系结构TCP/IP模型中传输层一层中的两个不同的通信协议。 TCP:传输控制协议,一种面向连接的协议,给用户进程提供可靠的全双工的字节流,TCP套接口是字节流套接口(streamsocket)的一种。 UDP:用户数据报协议。U…

Java多线程——基本概念

线程和多线程 程序&#xff1a;是一段静态的代码&#xff0c;是应用软件执行的蓝本 进程&#xff1a;是程序的一次动态执行过程&#xff0c;它对应了从代码加载、执行至执行完毕的一个完整过程&#xff0c;这个过程也是进程本身从产生、发展至消亡的过程 线程&#xff1a;是比…

textCNN初探

文章目录目录1.什么是textCNN1.1 textCNN 提出的背景1.2 textCNN 合理性分析2.textCNN相比于传统图像领域的CNN有什么特点&#xff1f;3.textCNN例子讲解3.1 参数和超参数3.2 textCNN的数据3.3 textCNN的网络结构定义3.4 代码目录 1.什么是textCNN 1.1 textCNN 提出的背景 我…

词嵌入初探

文章目录目录1.词嵌入产生的背景1.1 NLP关键&#xff1a;语言的表示1.2 NLP词的表示方法类型1.2.1 独热表示one-hot1.2.2 词的分布式表示distributed representation1.3 NLP中的语言模型1.4 词的分布表示1.4.1 基于矩阵的分布表示1.4.2 基于聚类的分布表示1.4.3 基于神经网络的…

VIM使用系列之一——配置VIM下编程和代码阅读环境

作者&#xff1a;gnuhpc from http://blog.csdn.net/gnuhpc http://gnuhpc.wordpress.com/ 本文环境&#xff1a;ubuntu 10.10/vim7.2 前言&#xff1a;一年前写过一篇关于VIM的C/C编程环境的文字&#xff0c;一年中又接触了很多东西&#xff0c;深入使用中发现其实还是需要有…

fastText初探

目录&#xff1a;1、应用场景2、优缺点3、FastText的原理4、FastText词向量与word2vec对比 目录&#xff1a; 1、应用场景 fastText是一种Facebook AI Research在16年开源的一个文本分类器。 其特点就是fast。相对于其它文本分类模型&#xff0c;如SVM&#xff0c;Logistic …

python中使用“if __name__ == '__main__'”语句的作用

首先用最简洁的语言来说明一下 if __name__ __main__: 的作用&#xff1a;防止在被其他文件导入时显示多余的程序主体部分。 先举个例子&#xff0c;如果不用if __name__ __main__: 会发生什么事&#xff1a; 首先在yy.py中调用cs.py #yy.pyimport csprint(引用cs)cs.cs()p…

redis——sentinel

什么是哨兵机制 Redis的哨兵(sentinel) 系统用于管理/多个 Redis 服务器,该系统执行以下三个任务: 监控: 哨兵(sentinel) 会不断地检查你的Master和Slave是否运作正常。 提醒:当被监控的某个 Redis出现问题时, 哨兵(sentinel) 可以通过 API 向管理员或者其他…

FM,FFM及其实现

在推荐系统和计算广告业务中&#xff0c;点击率CTR&#xff08;click-through rate&#xff09;和转化率CVR&#xff08;conversion rate&#xff09;是衡量流量转化的两个关键指标。准确的估计CTR、CVR对于提高流量的价值&#xff0c;增加广告及电商收入有重要的指导作用。业界…

linux-在cenos上安装大全(nginx/JRE/maven/Tomcat/MYSQL/redis/kafka/es...)

云服务器 阿里云 腾讯云 七牛云 百度云 天翼云 华为云 西部数码 自己购买一个&#xff0c;学生和企业用户都有优惠的。 putty 自己下载一个putty&#xff0c;用来操作云服务器。 putty.org 一路下一步就ok。 点击putty.exe,输入你的ip或域名 最好改成20&#xff1…

KKT条件初步理解

最近学习的时候用到了最优化理论&#xff0c;但是我没有多少这方面的理论基础。于是翻了很多大神的博客把容易理解的内容记载到这篇博客中。因此这是篇汇总博客&#xff0c;不算是全部原创&#xff0c;但是基础理论&#xff0c;应该也都差不多吧。因才疏学浅&#xff0c;有纰漏…

redis——实战点赞

点赞功能随处可见&#xff0c;我们都知道点赞是一个非常高频的操作&#xff0c;redis就非常适合做这种工作。 实现效果&#xff1a; 分析&#xff1a;三种类型&#xff1a;给帖子点赞&#xff0c;给评论点赞&#xff0c;给回复点赞 我们只实现查看点赞数量的话&#xff0c;只…

大数据学习(10)--流计算

文章目录目录1.流计算的概述1.1 什么是流数据&#xff1f;1.2 批量计算和实时计算1.3 流计算的概念1.4 流计算和Hadoop1.5 流计算框架2.流计算的处理流程2.1 流计算处理基本概念2.2 数数据的实时获取2.3 数据的实时计算2.4 实时查询任务3.流计算的应用和开源框架Strom3.1 流计算…