没事就刷刷的牛客网2——算法笔试题2

没事就刷刷的牛客网2——算法笔试题2

  • 学习前言
  • 题目

学习前言

还差的远~
没事就刷刷的牛客网2——算法笔试题2_第1张图片

题目

  1. 常见判别式模型有:线性回归,决策树,SVM,k近邻,神经网络
    常见生成式模型有:HMM,朴素贝叶斯,GMM,LDA
    判别式模型:给定x,可通过直接建模P(c|x)来预测c,这样得到的是判别式模型
    生成式模型:先对联合概率分布P(x,c)建模,然后再由此获得P(C|x),是生成式模型
  2. 堆排序是利用这种数据结构而设计的一种排序算法,堆排序是一种选择排序,它的最坏,最好,平均时间复杂度均为O(nlogn),它也是不稳定排序。
    没事就刷刷的牛客网2——算法笔试题2_第2张图片
  3. 索引字段值不唯一,应该选择的索引类型为普通索引
    表的索引:主索引,候选索引,普通索引,唯一索引
    索引类型分类:
    ①主索引:主索引是一种只能在数据库表中建立不能在自由表中建立的索引。在指定的字段或表达式中,主索引的关键字绝对不允许有重复值。
    ②候选索引:和主索引类似,它的值也不允许在指定的字段或表达式中重复。一个表中可以有多个候选索引。
    ③唯一索引:唯一索引允许关键字取重复的值。当有重复值出现时,索引文件只保存重复值的第1次出现。提供唯一索引主要是为了兼容早期的版本。
    ④普通索引:普通索引允许关键字段有相同值。在一对多关系的多方,可以使用普通索引。
  4. Alice和Bob玩抛硬币游戏,游戏规则如下:
    (1)、不断抛掷硬币,直到某一方获胜,游戏终止
    (2)、Alice获胜的条件为:第i轮结果为正面朝上,第i+1轮结果为反面朝上
    (3)、Bob获胜的条件为:第i轮结果为反面朝上,第i+1轮结果也为反面朝上
    问Alice获胜的概率是多少?
    解答:
    step1:两种情况 1.正 2.反
    step2: 四种情况 1.正正 2.正反(Alice赢游戏结束) 3.反正 4.反反 (Bob赢游戏结束)
    由step2可知: 正正和反正的情况才能继续step3,所以无论如何第i步肯定是正,所以剩余的1/2情况下只有Alice才有获胜的可能。
  5. 现有一个包含m个节点的三叉树,即每个节点都有3个指向孩子节点的指针,请问:在这3m个指针中有()个空指针。
    step1,m个节点共有3m个指针;
    step2,共有m-1个指针指向节点,注意根节点无指针指向;
    3m-(m-1)=2m+1。
  6. 目标变量在训练集上的7个实际值为[1,1,1,1,0,0,0],目标变量的熵近似值是()
    (log3/7=-0.847,log4/7=-0.560)
    -(3/7 * log(3/7) + 4/7 * log(4/7)) = 0.683
  7. 一个算法所需时间由下述递归方程表示, n = 1时 T(n) = 1 , n > 1时 T(n) = 2T(n/2) + n 该算法的时间复杂度是()
    没事就刷刷的牛客网2——算法笔试题2_第3张图片
    没事就刷刷的牛客网2——算法笔试题2_第4张图片
  8. 以下JAVA程序代码的输出是()
    public static void main(String args[]) {
    System.out.println(17^5);
    }
    位异运算符号。
    运算规则是:两个数转为二进制,然后从高位开始比较,如果相同则为0,不相同则为1。
    17:0001 0001
    5: 0000 0101
    结果:0001 0100 转10进制:20
  9. 假如你用logistic Regression 算法去预测用户在网上的购买项目,然而,当你在新的用户集上验证你的假设时,你发现预测值有很大的偏差。并且你的假设在训练集上表现也很差,下面那些步骤你应该采纳,选择出正确的选项()
    尝试着减小正则项 λ
    尝试增加交叉特征
    符合欠拟合的情况
    降低“欠拟合”凤险的方法:
    (1)添加新特征。当特征不足或者现奇特征与样本标签的相关性不强时3模型容易出现欠拟合。通过挖掘“上下文特征”“ID类特征”“组合特征”等新的特征,往往能够取得更好的效果。在深度学习潮流中,有很多模型可以帮助完成特征工程,如因子分解机、梯度提升决策树、Deep-crossing等都可以成为丰富特征的方法。
    (2)增加模型复杂度。简单模型的学习能力较差,通过增加模型的复杂度可以便模型拥高更强的拟合能力。例如,在统性模型中添加高次I页,在神经网络模型中增加网络层数或神经元个数等。
    (3)减小正则化系数。正则化是用来防止过拟台的,但当模型出现欠拟合现象时,则需要高针对性地减小正则化系数。
  10. 影响基本K-均值算法的主要因素有:样本输入顺序、模式相似性测度、初始类中心的选取
  11. 深度学习中,以下哪些方法可以降低模型过拟合?
    增加更多的样本
    Dropout
    增加参数惩罚
  12. 深度学习中的激活函数需要具有哪些属性?
    (1)非线性:
    即导数不是常数。这个条件是多层神经网络的基础,保证多层网络不退化成单层线性网络。这也是激活函数的意义所在。
    (2)几乎处处可微:
    可微性保证了在优化中梯度的可计算性。传统的激活函数如sigmoid等满足处处可微。对于分段线性函数比如ReLU,只满足几乎处处可微(即仅在有限个点处不可微)。对于SGD算法来说,由于几乎不可能收敛到梯度接近零的位置,有限的不可微点对于优化结果不会有很大影响。
    (3)计算简单:
    非线性函数有很多。极端的说,一个多层神经网络也可以作为一个非线性函数,类似于Network In Network中把它当做卷积操作的做法。但激活函数在神经网络前向的计算次数与神经元的个数成正比,因此简单的非线性函数自然更适合用作激活函数。这也是ReLU之流比其它使用Exp等操作的激活函数更受欢迎的其中一个原因。
    (4)非饱和性(saturation):
    饱和指的是在某些区间梯度接近于零(即梯度消失),使得参数无法继续更新的问题。最经典的例子是Sigmoid,它的导数在x为比较大的正值和比较小的负值时都会接近于0。更极端的例子是阶跃函数,由于它在几乎所有位置的梯度都为0,因此处处饱和,无法作为激活函数。ReLU在x>0时导数恒为1,因此对于再大的正值也不会饱和。但同时对于x<0,其梯度恒为0,这时候它也会出现饱和的现象(在这种情况下通常称为dying ReLU)。Leaky ReLU和PReLU的提出正是为了解决这一问题。
    (5)单调性(monotonic):
    即导数符号不变。这个性质大部分激活函数都有,除了诸如sin、cos等。个人理解,单调性使得在激活函数处的梯度方向不会经常改变,从而让训练更容易收敛。
    (6)输出范围有限:
    有限的输出范围使得网络对于一些比较大的输入也会比较稳定,这也是为什么早期的激活函数都以此类函数为主,如Sigmoid、TanH。但这导致了前面提到的梯度消失问题,而且强行让每一层的输出限制到固定范围会限制其表达能力。因此现在这类函数仅用于某些需要特定输出范围的场合,比如概率输出(此时loss函数中的log操作能够抵消其梯度消失的影响)、LSTM里的gate函数。
    (7)接近恒等变换(identity):
    即约等于x。这样的好处是使得输出的幅值不会随着深度的增加而发生显著的增加,从而使网络更为稳定,同时梯度也能够更容易地回传。这个与非线性是有点矛盾的,因此激活函数基本只是部分满足这个条件,比如TanH只在原点附近有线性区(在原点为0且在原点的导数为1),而ReLU只在x>0时为线性。这个性质也让初始化参数范围的推导更为简单。这种恒等变换的性质也被其他一些网络结构设计所借鉴,比如CNN中的ResNet和RNN中的LSTM。
    (8)参数少:
    大部分激活函数都是没有参数的。像PReLU带单个参数会略微增加网络的大小。还有一个例外是Maxout,尽管本身没有参数,但在同样输出通道数下k路Maxout需要的输入通道数是其它函数的k倍,这意味着神经元数目也需要变为k倍;但如果不考虑维持输出通道数的情况下,该激活函数又能将参数个数减少为原来的k倍。
    (9)归一化(normalization):
    这个是最近才出来的概念,对应的激活函数是SELU,主要思想是使样本分布自动归一化到零均值、单位方差的分布,从而稳定训练。在这之前,这种归一化的思想也被用于网络结构的设计,比如Batch Normalization。
  13. 在机器学习中,如果一味的去提高训练数据的预测能力,所选模型的复杂度往往会很高,这种现象称为过拟合。所表现的就是模型训练时候的误差很小,但在测试的时候误差很大,对于产生这种现象以下说法正确的是:
    样本数量太少
    模型太复杂
    样本数量太少,或者模型过分复杂, 都会使得训练出来的模型“完全记住”给出的训练样本之间的关系(相当于只是背下来了试卷,但是等到高考的时候遇到新的题还是不会做) 而缺乏泛化能力 使得模型过拟合。
  14. 关于线程和进程的说法:
    (1)进程间相互独立,同一进程的各线程间共享。某进程内的线程在其它进程不可见。
    (2)线程间可以直接读写进程数据段(如全局变量)来进行通信。
    (3)线程上下文切换比进程上下文切换要快得多。
    (4)线程被创建后先进入就绪状态

你可能感兴趣的:(没事就刷刷的牛客网)