热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

机器学习算法常见面试题目总结

机器学习算法常见面试题目总结,Go语言社区,Golang程序员人脉社
  • 决策树的ID3,C4.5,CART等,决策树的split原理和剪枝策略
  • 给出逻辑回归的模型、原理
  • 假设限制有一些数据点,我们利用一条直线对这些点进行拟合(该线称为最佳拟合直线),这个拟合过程就成为回归。logistic回归进行分类的思想是:根据现有数据对分类边界线建立回归公式,以此进行分类。训练分类器时的做法就是寻找最佳拟合参数,使用的是最优化算法。
  • z=w_{0}x_{0}+w_{1}x_{1}+w_{2}x_{2}+cdots +w_{n}x_{n}
  • Logistic回归分类器,我们在每一个特征上都乘以一个回归系数,然后把所有的结果值相加,将这个总和代入Sigmoid函数中,进而得到一个范围在0~1之间的数值。任何大于0.5的数据都被分入1类,小于0.5的即被归入0类。所以,logistic回归也可以被看成是一种概率估计。
  • 随机梯度下降算法的原理和具体迭代函数
  • w:=w-alpha bigtriangledown _{w}f(w)
  • 随机梯度上升算法的伪代码:
  • 所有回归系数初始化为1
  • 对数据集中的每个样本
  •               计算该样本的梯度
  •               使用alpha x gradient更新回归系数
  • 返回回归系数值
  •  
  • GBDT模型的损失函数、建模原理,以及如何调参?
  • GB和牛顿法的区别,它们和泰勒公式的关系
  • 为什么用最小二乘而不是最小四乘
  • 过拟合怎么解决,L1和L2正则化有什么区别
  • 剪枝处理:是决策树学习算法对付“过拟合”的主要手段

  • 卷积神经网络中,使用dropout策略来缓解过拟合。

  • BP算法表示能力强,但易过拟合,两种常用来缓解过拟合的策略:“早停”和“正则化”

  • “早停”:将数据分为训练集和验证集,训练集用来计算梯度、更新连接权和阈值,验证集用来估计误差,若训练集误差降低但验证集误差升高,则停止训练,同时返回具有最小验证集误差的连接权和阈值。

    “正则化”:基本思想是在误差目标函数中增加一个用于描述网络复杂度的部分,例如连接权与阈值的平方和。

  • 对于线性回归模型,使用L1正则化的模型建叫做Lasso回归,使用L2正则化的模型叫做Ridge回归(岭回归)。

  • L1正则化是指权值向量ww中各个元素的绝对值之和,通常表示为||w||1||w||1 L2正则化是指权值向量ww中各个元素的平方和然后再求平方根(可以看到Ridge回归的L2正则化项有平方符号),通常表示为||w||2 。

  • L1正则化可以产生稀疏权值矩阵,即产生一个稀疏模型,可以用于特征选择 L2正则化可以防止模型过拟合(overfitting);一定程度上,L1也可以防止过拟合。

  • 怎么理解损失函数,SVM的损失函数是什么,写出公式
  • 损失函数是用来测度模型输出值和真实的因变量值之间差异的函数,模型输出值p和和真实值y之间的差异一般称为残差或者误差,但是这个值并不能直接用来衡量模型的质量,当一个模型完美的时候,其误差为0,而当一个模型不够完美时,其误差不论是负值还是正值,都偏离0,因此衡量模型质量的误差偏离0的相对值,即误差函数的值越接近于0,模型的性能越好,反之模型的性能越差。常用的损失函数如下:
  • 均方差(MSE)误差函数:   frac{1}{N}sum _{i}(y_{i}-p_{i})^{2}这种损失函数常用在实数值域连续变量的回归问题上,并且对于残差较大的情况给与更多的权重。
  • 平均绝对差(MAE):frac{1}{N}sum _{i}|y_{i}-p_{i}|这种损失函数也常用在实数值域连续变量的回归问题上,在时间序列预测问题中也常用。在这个误差函数中每个误差点对总体误差的贡献与其误差绝对值成线性比例关系,而上面的MSE没有此特性。
  • 交叉熵损失函数(Cross-Entropy):这种损失函数也叫对数损失函数,是针对分类模型的性能比较设计的,按照分类模型是二分类还是多分类的区别,可以分为二分类交叉熵和多分类交叉熵两种,交叉熵的数学表达式如下:
  • J(theta )=-[sum_{i=1}^{N}sum_{k=1}^{K}1(y^{(i)}=k)logP(y^{i}=k|x^{(i)};theta )]
  • 因此交叉熵可以解释为映射到最可能类别的概率的对数。因此,当预测值的分布和实际因变量的分布尽可能一致时,交叉熵最小。
  • SVM的损失函数:常用的是径向基函数(RBF):k(x,y) =exp(frac{-left | x-y right |^{2}}{2sigma ^{2}})
  • 偏差和方差是什么,高偏差和高方差说明了什么

    1.数据欠拟合会出现高偏差问题。

    2.数据过度拟合会出现高方差问题。

    3.怎么处理高偏差和高方差问题:

    高偏差:训练误差很大,训练误差与测试误差差距小,随着样本数据增多,训练误差增大。

  • 解决方法:寻找更具代表性的特征、.用更多的特征(增大输入向量的维度)

    高方差:训练误差小,训练误差与测试误差差距大,可以通过增大样本集合来减小差距。随着样本数据增多,测试误差会减小。

  • 解决方案:增大数据集合(使用更多的数据)、减少数据特征(减小数据维度)

    一般采取判断某函数是高方差还是高偏差,简单的判断是看训练误差与测试误差的差距,差距大说明是高方差的,差距小说明是高偏差的。
  • 聚类过程
  • Bagging 和 Boosting的区别
  • 朴素贝叶斯的公式
  • SVM的原理及公式推导

     

  • 神经网络如何工作
  • 激活函数:大多数神经元都将一维向量的网络输入变量通过一个函数映射到另外一个一维向量的数值,这个函数被称为激活函数。
  • 如果输入变化很小,导致输出结构发生截然不同的结果,这种情况是我们不希望看到的,为了模拟更细微的变化,输入和输出数值不只是0到1,可以是0和1之间的任何数,激活函数是用来加入非线性因素的,因为线性模型的表达力不够 。
  • 这句话字面的意思很容易理解,但是在具体处理图像的时候是什么情况呢?我们知道在神经网络中,对于图像,我们主要采用了卷积的方式来处理,也就是对每个像素点赋予一个权值,这个操作显然就是线性的。但是对于我们样本来说,不一定是线性可分的,为了解决这个问题,我们可以进行线性变化,或者我们引入非线性因素,解决线性模型所不能解决的问题。

    这里插一句,来比较一下上面的那些激活函数,因为神经网络的数学基础是处处可微的,所以选取的激活函数要能保证数据输入与输出也是可微的,运算特征是不断进行循环计算,所以在每代循环过程中,每个神经元的值也是在不断变化的。

    这就导致了tanh特征相差明显时的效果会很好,在循环过程中会不断扩大特征效果显示出来,但有是,在特征相差比较复杂或是相差不是特别大时,需要更细微的分类判断的时候,sigmoid效果就好了。

    还有一个东西要注意,sigmoid 和 tanh作为激活函数的话,一定要注意一定要对 input 进行归一话,否则激活后的值都会进入平坦区,使隐层的输出全部趋同,但是 ReLU 并不需要输入归一化来防止它们达到饱和。

    构建稀疏矩阵,也就是稀疏性,这个特性可以去除数据中的冗余,最大可能保留数据的特征,也就是大多数为0的稀疏矩阵来表示。其实这个特性主要是对于Relu,它就是取的max(0,x),因为神经网络是不断反复计算,实际上变成了它在尝试不断试探如何用一个大多数为0的矩阵来尝试表达数据特征,结果因为稀疏特性的存在,反而这种方法变得运算得又快效果又好了。所以我们可以看到目前大部分的卷积神经网络中,基本上都是采用了ReLU 函数

    常用的激活函数

    激活函数应该具有的性质:

    (1)非线性。线性激活层对于深层神经网络没有作用,因为其作用以后仍然是输入的各种线性变换。。

    (2)连续可微。梯度下降法的要求。

    (3)范围最好不饱和,当有饱和的区间段时,若系统优化进入到该段,梯度近似为0,网络的学习就会停止。

    (4)单调性,当激活函数是单调时,单层神经网络的误差函数是凸的,好优化。

    (5)在原点处近似线性,这样当权值初始化为接近0的随机值时,网络可以学习的较快,不用可以调节网络的初始值。

    目前常用的激活函数都只拥有上述性质的部分,没有一个拥有全部的~~

    Sigmoid函数 

    目前已被淘汰

    缺点

    饱和时梯度值非常小。由于BP算法反向传播的时候后层的梯度是以乘性方式传递到前层,因此当层数比较多的时候,传到前层的梯度就会非常小,网络权值得不到有效的更新,即梯度耗散。如果该层的权值初始化使得f(x) 处于饱和状态时,网络基本上权值无法更新。

    ∙ 输出值不是以0为中心值。

    Tanh双曲正切函数

    其中σ(x) 为sigmoid函数,仍然具有饱和的问题。

    ReLU函数 

    Alex在2012年提出的一种新的激活函数。该函数的提出很大程度的解决了BP算法在优化深层神经网络时的梯度耗散问题

    优点

    ∙ x>0 时,梯度恒为1,无梯度耗散问题,收敛快;

    ∙ 增大了网络的稀疏性。当x<0 时,该层的输出为0,训练完成后为0的神经元越多,稀疏性越大,提取出来的特征就约具有代表性,泛化能力越强。即得到同样的效果,真正起作用的神经元越少,网络的泛化性能越好

    ∙ 运算量很小; 

    缺点

    如果后层的某一个梯度特别大,导致W更新以后变得特别大,导致该层的输入<0,输出为0,这时该层就会‘die’,没有更新。当学习率比较大时可能会有40%的神经元都会在训练开始就‘die’,因此需要对学习率进行一个好的设置。

    优缺点可知max(0,x) 函数为一个双刃剑,既可以形成网络的稀疏性,也可能造成有很多永远处于‘die’的神经元,需要tradeoff。

    Leaky ReLU函数

    改善了ReLU的死亡特性,但是也同时损失了一部分稀疏性,且增加了一个超参数,目前来说其好处不太明确

    Maxout函数

    泛化了ReLU和Leaky ReLU,改善了死亡特性,但是同样损失了部分稀疏性,每个非线性函数增加了两倍的参数

    真实使用的时候最常用的还是ReLU函数,注意学习率的设置以及死亡节点所占的比例即可

  • 对于输出层,应当尽量选择适合因变量分布的激活函数:

  • 对于只有0,1取值的双值因变量,logistic函数是一个比较好的选择。

  • 对于有多个取值的离散因变量,比如0到9数字识别,softmax激活函数是logistic激活函数的自然衍生。

  • 对于有限值域的连续因变量logistic或者tanh激活函数都可以用,但是需要将因变量的值域伸缩到logistic或tanh对应的值域中。

  • 如果因变量取值为正,但是没有上限,那么指数函数是一个较好的选择。

  • 如果因变量没有有限值域,或者虽然有限值域但是边界未知,那么最好采用线性函数作为激活函数。

    训练集(train set) 验证集(validation set) 测试集(test set)

          一般需要将样本分成独立的三部分训练集(train set),验证集(validation set)和测试集(test set)。其中训练集用来估计模型,验证集用来确定网络结构或者控制模型复杂程度的参数,而测试集则检验最终选择最优的模型的性能如何。一个典型的划分是训练集占总样本的50%,而其它各占25%,三部分都是从样本中随机抽取。 
         样本少的时候,上面的划分就不合适了。常用的是留少部分做测试集。然后对其余N个样本采用K折交叉验证法。就是将样本打乱,然后均匀分成K份,轮流选择其中K-1份训练,剩余的一份做验证,计算预测误差平方和,最后把K次的预测误差平方和再做平均作为选择最优模型结构的依据。特别的K取N,就是留一法(leave one out)。

         training set是用来训练模型或确定模型参数的,如ANN中权值等; validation set是用来做模型选择(model selection),即做模型的最终优化及确定的,如ANN的结构;而 test set则纯粹是为了测试已经训练好的模型的推广能力。当然,test set这并不能保证模型的正确性,他只是说相似的数据用此模型会得出相似的结果。但实际应用中,一般只将数据集分成两类,即training set 和test set,大多数文章并不涉及validation set。


推荐阅读
  • 圣诞节到了,智能菌想送你一份礼物
    关注网易智能,聚焦AI大事件,读懂下一个大时代!(机器学习算法地图见文末)圣诞节的赠书活动来了! ... [详细]
  • 《本文同步发布于“脑之说”微信公众号,欢迎搜索关注~~》**摘要:**虽然大多数生物系统的功能受到其结构的严格限制,但目前的证据表明,大脑网络的结构和功能之间的耦合是相对温和的。我 ... [详细]
  • 分隔超平面:将数据集分割开来的直线叫做分隔超平面。超平面:如果数据集是N维的,那么就需要N-1维的某对象来对数据进行分割。该对象叫做超平面,也就是分类的决策边界。间隔:一个点 ... [详细]
  •   作为一种编程语言,Python比C#,Java,C和C++更具吸引力。它被称为“胶水语言”,它也被喜欢它的程序员誉为“美丽”的编程语言。从云计算,客户端到物联网终端,Pytho ... [详细]
  • sklearn数据集库中的常用数据集类型介绍
    本文介绍了sklearn数据集库中常用的数据集类型,包括玩具数据集和样本生成器。其中详细介绍了波士顿房价数据集,包含了波士顿506处房屋的13种不同特征以及房屋价格,适用于回归任务。 ... [详细]
  • 浏览器中的异常检测算法及其在深度学习中的应用
    本文介绍了在浏览器中进行异常检测的算法,包括统计学方法和机器学习方法,并探讨了异常检测在深度学习中的应用。异常检测在金融领域的信用卡欺诈、企业安全领域的非法入侵、IT运维中的设备维护时间点预测等方面具有广泛的应用。通过使用TensorFlow.js进行异常检测,可以实现对单变量和多变量异常的检测。统计学方法通过估计数据的分布概率来计算数据点的异常概率,而机器学习方法则通过训练数据来建立异常检测模型。 ... [详细]
  • cs231n Lecture 3 线性分类笔记(一)
    内容列表线性分类器简介线性评分函数阐明线性分类器损失函数多类SVMSoftmax分类器SVM和Softmax的比较基于Web的可交互线性分类器原型小结注:中文翻译 ... [详细]
  • Opencv提供了几种分类器,例程里通过字符识别来进行说明的1、支持向量机(SVM):给定训练样本,支持向量机建立一个超平面作为决策平面,使得正例和反例之间的隔离边缘被最大化。函数原型:训练原型cv ... [详细]
  • “编程能力差!90%输在了这点上!”谷歌开发:其实你们都是瞎努力
    这是一个很难让人心平气和的年代。通过CSDN的帖子发现,很多人都想学人工智能,但总担心自己编程能力差,学不会,学不懂 ... [详细]
  • 高清图解:神经网络、机器学习、数据科学一网打尽
    |导|读BY:AI-Beetle完全图解人工智能、NLP、机器学习、深度学习、大数据!这份备忘单涵盖了上述领域几乎全部的知识点,并使用信息图、脑图等多种可视化方式呈现,设计精美,实 ... [详细]
  • 概述SVM(支持向量机)是一个二分类的模型,它的主要思想就是间隔最大化,那么问题来了,什么是间隔最大化&#x ... [详细]
  • 机器学习总结(一) Adaboost,GBDT和XGboost算法
    一:提升方法概述提升方法是一种常用的统计学习方法,其实就是将多个弱学习器提升(boost)为一个强学习器的算法。其工作机制是通过一个弱学习算法,从初始训练集中训练出一个弱学习器,再根据弱学习器的 ... [详细]
  • 不懂性能优化,再强的计算机也白玩
    不懂性能优化,再强的计算机也白玩-Python的优秀有目共睹,不过说的性能,还真比不了Java、C、Go,有没有提升性能的技巧或方法呢?今天我们一起学习下提升Python性能的方式 ... [详细]
  • 机器学习如何看世界 对抗机器学习诠释人工智能和人类思维的不同
    接近,计算,极限,看,世界,对抗,机器,学习,诠释,人工智能,和, ... [详细]
  • 2022年Python面试题一.Python基础二.企业面试题结束语🥇🥇🥇✅作者简介:大家好我是编程IDὌ ... [详细]
author-avatar
小丽丽很可爱
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有