2021年7月19日,百度 算法 面试题5道

366 阅读4分钟

#**这是我参与8月更文挑战的第17天,活动详情查看:[8月更文挑战]

1、过拟合 怎么解决

  • 过拟合:是指训练误差和测试误差之间的差距太大。换句换说,就是模型复杂度高于实际问题,模型在训练集上表现很好,但在测试集上却表现很差。
  • 欠拟合:模型不能在训练集上获得足够低的误差。换句换说,就是模型复杂度低,模型在训练集上就表现很差,没法学习到数据背后的规律。
  • 如何解决欠拟合?

欠拟合基本上都会发生在训练刚开始的时候,经过不断训练之后欠拟合应该不怎么考虑了。但是如果真的还是存在的话,可以通过增加网络复杂度或者在模型中增加特征,这些都是很好解决欠拟合的方法。

  • 如何防止过拟合?

获取和使用更多的数据(数据集增强)、降低模型复杂度、L1\L2\Dropout正则化、Early stopping(提前终止)

**[[AI提升季,正价课免费学,VIP会员、机械键盘、纸质书、硬盘等包邮送!--七月在线]

2、朴素贝叶斯 为啥朴素

之所以被称为“朴素”, 是因为它假定所有的特征在数据集中的作用是同样重要和独立的,正如我们所知,这个假设在现实世界中是很不真实的,因此,说是很“朴素的”。

3、python装饰器

装饰器本质上是一个Python函数,它可以让其他函数在不需要做任何代码变动的前提下增加额外功能,装饰器的返回值也是一个函数对象。它经常用于有切面需求的场景,比如:插入日志、性能测试、事务处理、缓存、权限校验等场景。

如:使用python装饰器获取某个函数的运行时间

import datetime


def count_time(func):
    def int_time(*args, **kwargs):
        start_time = datetime.datetime.now()  # 程序开始时间
        func()
        over_time = datetime.datetime.now()   # 程序结束时间
        total_time = (over_time-start_time).total_seconds()
        print('程序共计%s秒' % total_time)
    return int_time


@count_time
def main():
    print('>>>>开始计算函数运行时间')
    for i in range(1, 1000):      # 可以是任意函数  , 这里故意模拟函数的运行时间
        for j in range(i):
            print(j)


if __name__ == '__main__':
    main()

4、python生成器

介绍python生成器需要先介绍可迭代对象和迭代器。

可迭代对象(Iterable Object),简单的来理解就是可以使用 for 来循环遍历的对象。比如常见的 list、set和dict。

可迭代对象具有__iter__ 方法,用于返回一个迭代器,或者定义了 getitem 方法,可以按 index 索引的对象(并且能够在没有值时抛出一个 IndexError 异常),因此,可迭代对象就是能够通过它得到一个迭代器的对象。所以,可迭代对象都可以通过调用内建的 iter() 方法返回一个迭代器。

生成器其实是一种特殊的迭代器,不过这种迭代器更加优雅。它不需要再像上面的类一样写__iter__()和__next__()方法了,只需要一个yiled关键字。

5、L1正则化与L2正则化的区别

参考答案:

L1范数(L1 norm)是指向量中各个元素绝对值之和,也有个美称叫“稀疏规则算子”(Lasso regularization)。

比如 向量A=[1,-1,3], 那么A的L1范数为 |1|+|-1|+|3|.

简单总结一下就是:

L1范数: 为x向量各个元素绝对值之和。

L2范数: 为x向量各个元素平方和的1/2次方,L2范数又称Euclidean范数或者Frobenius范数

Lp范数: 为x向量各个元素绝对值p次方和的1/p次方.

在支持向量机学习过程中,L1范数实际是一种对于成本函数求解最优的过程,因此,L1范数正则化通过向成本函数中添加L1范数,使得学习得到的结果满足稀疏化,从而方便人类提取特征,即L1范数可以使权值稀疏,方便特征提取。

L2范数可以防止过拟合,提升模型的泛化能力。

L1和L2的差别,为什么一个让绝对值最小,一个让平方最小,会有那么大的差别呢?看导数一个是1一个是w便知, 在靠进零附近, L1以匀速下降到零, 而L2则完全停下来了. 这说明L1是将不重要的特征(或者说, 重要性不在一个数量级上)尽快剔除, L2则是把特征贡献尽量压缩最小但不至于为零. 两者一起作用, 就是把重要性在一个数量级(重要性最高的)的那些特征一起平等共事(简言之, 不养闲人也不要超人)。

\