面试题

1.python交换数字a,b

python交换两个值得方法非常简单,即a,b=b,a
Python的变量并不直接存储值,而只是引用一个内存地址,交换变量时,只是交换了引用的地址。

2.python对一个列表删除所有为0的数字

def repr_int(s):
    try: 
        int(s)
        return True
    except ValueError:
        return False

original_list = [u'123', u'hello', u'zara', u'45.3', u'pluto']

list_with_removed_ints = [elem for elem in original_list if not repr_int(elem)]

3.python怎么定义一个类的成员变量

python 的类中,主要会使用的两种变量:类变量与成员变量。类变量是类所有实例化对象共有的,而成员变量是每个实例化对象自身特有的

class A(object):
    def __init__(self):
        #aa为成员变量
        self.aa = 10

    @staticmethod
    def test(self):
        self.aa += -1
if __name__ == '__main__':
    x = A()
    y = A()
    #调用x
    x.test(x)
    print x.aa #输出9
    y.test(y)
    print x.aa #输出9
    print y.aa #输出9
class A(object):
    #aa为类变量
    aa = 10

    @staticmethod
    def test(self):
        A.aa += -1

if __name__ == '__main__':
    x = A()
    y = A()
    x.test(x)
    print x.aa #输出9
    y.test(y)
    print x.aa #输出8
    print y.aa #输出8

4.怎么解决过拟合问题

决策树剪枝、svm松弛变量、L1,L2正则化,dropout 面试官补充了一个 Early Stopping。
先谈谈过拟合,所谓过拟合,指的是模型在训练集上表现的很好,但是在交叉验证集合测试集上表现一般,也就是说模型对未知样本的预测表现一般,泛化(generalization)能力较差。

L1和L2的比较:
(1)鲁棒性(Robustness):

概括起来就是L1对异常点不太敏感,而L2则会对异常点存在放大效果。
最小绝对值偏差的方法应用领域很广(L1-norm),相比最小均方的方法,它的鲁棒性更好,LAD能对数据中的异常点有很好的抗干扰能力,异常点可以安全的和高效的忽略,这对研究帮助很大。如果异常值对研究很重要,最小均方误差则是更好的选择。
对于L2-norm,由于是均方误差,如果误差>1的话,那么平方后,相比L-norm而言,误差就会被放大很多。因此模型会对样例更敏感。如果样例是一个异常值,模型会调整最小化异常值的情况,以牺牲其它更一般样例为代价,因为相比单个异常样例,那些一般的样例会得到更小的损失误差。

(2)稳定性:

概括起来就是对于新数据的调整,L1的变动很大,而L2的则整体变动不大。
在这里插入图片描述
LAD方法的不稳定属性意思是,对于一个书评调整的数据集,回归线可能会跳跃很大。这个方法对一些数据配置有连续的解决方法;可是通过把数据集变小,LAD可以跳过一个有多个求解拓展区域的布局,再通过这个解决方案的区域后,LAD线有一个斜坡,可能和之前的线完全不同。相比较之下,最小均方解决方法是稳定的,对于任何晓得数据点的调整,回归线仅仅只稍微移动一下,回归参数就是数据的连续函数(continuousfunctions of the data)。
在这里插入图片描述

上图的上面代表的是L1-norm,底部代表的是L2-norm。第一列代表一个回归线怎样适应这三个点的。假设我们把绿色的点视屏享有移动一点,L2-norm维持了和原回归线一样的形状,但是形成了更陡的抛物线(steeper parabolic curve)。可是在L1-norm的样例中,回归线的斜率更陡了,并且影响到了其它点的预测值,因此,与L2-norm相比,所有的未来的预测都会都会受到影响。假设我们把绿色的点水平向右移动得更远,L2-norm变化了一点,但是L1-norm变化更大了,l1-norm的斜率完全改变了。这种变化会使得所有以前的结果都不再合法(invalidate all previous results)。数据点的稍稍调整,回归线就会变化很多,这就是L1-norm的不稳定性的表现之处。

(3)解决方案唯一性:

在这里插入图片描述

绿色的点(L2-norm)是唯一的最短路径。而红色,绿色,黄色(L1-norm)的线都是长度相同的路径。我们把它泛化到n维中,结果跟这里的二维一样。

(4)内置的特征选择(Built-in feature selection):

这是L1-norm经常被提及的一个优点,而L2-norm没有。这实际上是L1-norm的一个结果,L1-norm往往会使系数变得稀疏(sparse coefficients)。假设模型有100个系数,但是有10个非零的系数,这就是说,其它90个预测器在预测目标值上是没有用的。L2-norm往往会有非稀疏的系数(non-sparse coefficients),没有这个特点。

(5)稀疏性(Sparsity):

这主要是一个向量或矩阵中只有很少的非零(non-zero)条目(entries)。L1-norm有能产生许多零值或非常小的值的系数的属性,很少有大的系数。

(6)计算效率(Computational efficiency):

L1-norm没有一个解析解(analytical solution),但是L2-nom有,这使得L2-norm可以被高效的计算。可是,L1-norm的解有稀疏的属性,它可以和稀疏算法一起用,这可以是计算更加高效。

L1相较于L2易获得稀疏解的解释

其中较为容易理解的是从梯度角度的理解方法;

图像角度的分析也很直观:

假设费用函数 L 与某个参数 x 的关系如图所示:
在这里插入图片描述

则最优的 x 在绿点处,x 非零。
现在施加 L2 regularization,新的费用函数(L+Cx2)如图中蓝线所示:
在这里插入图片描述

最优的 x 在黄点处,x 的绝对值减小了,但依然非零。
而如果施加 L1 regularization,则新的费用函数(L+C|x|)如图中粉线所示:
在这里插入图片描述

最优的 x 就变成了 0。这里利用的就是绝对值函数的尖峰。

两种 regularization 能不能把最优的 x 变成 0,取决于原先的费用函数在 0 点处的导数。
如果本来导数不为 0,那么施加 L2 regularization 后导数依然不为 0,最优的 x 也不会变成 0。
而施加 L1 regularization 时,只要 regularization 项的系数 C 大于原先费用函数在 0 点处的导数的绝对值,x = 0 就会变成一个极小值点。
上面只分析了一个参数 x。事实上 L1 regularization 会使得许多参数的最优值变成 0,这样模型就稀疏了。
在这里插入图片描述

5.RNN梯度消失和爆炸的解决方法
梯度消失

1)采使用ReLu激活函数
2)使用长短记忆网络LSTM
3)使用BatchNorm

梯度爆炸

1)梯度截断
2)比例放缩

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值