2020年校招科大国创软件股份有限公司大数据算法岗笔试真题

最近(2019.9.30日)参加了科大国创软件公司的算法工程师笔试,做的试卷内容主要偏大数据挖掘,试题内容如下,现在给出一些参考答案,如有错误和疑问,可以在后面给出评论。


1 选择题

1.1 下列有关k-mean算法说法正确的是()

A:能自动识别类的个数,随机挑选初始点为中心点计算

B:数据数量不多时,输入的数据的顺序不同会导致结果不同

C:不能自动识别类的个数,不是随机挑选初始点为中心点计算

D:初始聚类中心的选择对聚类结果的影响很大

答案:D

解析:

参考链接:https://www.nowcoder.com/questionTerminal/827a43485c4842a1a1485c2f23999468?toCommentId=120916

                  Kmeans聚类算法详解

对于A选项(错误),k-means算法无法自动识别聚类类别个数,需要给定k值和k个初始化类簇中心,其中类簇中心是随机挑选的。

对于B选项(错误),优化目标函数的过程中,都遍历所有的点,输入数据的顺序对结果没有影响。

对于C选项(错误),解释同A,k-means算法不能自动识别类的个数,但是需要随机挑选初始点为中心点(类簇中心)。

对于D选项(正确),初始聚类(类簇)中心的选择对聚类结果的影响很大。

1.2 Nave Bayes是一种特殊的Bayes分类器,特征变量是X,类别标签是C,它的一个假定是()

A:各类别的先验概率P(C)是相等的

B:以0为均值,sqr(2)/2为标准差的正态分布

C:特征变量X的各个维度是类别条件独立随机变量

D:P(X|C)是高斯分布

答案:C

解析:

参考链接:https://www.nowcoder.com/questionTerminal/a70b214b42194248a1bdf73c1daf1c3a?pos=26&orderByHotValue=1&difficulty=00010

朴素贝叶斯成立的条件就是每个变量相互独立,故C正确。

1.3 以下几种模型方法属于判别式模型(Discriminative Model)的有()

1)混合高斯模型      2)条件随机场模型      3)区分度模型      4)隐马尔科夫模型

A:2,3

B:3,4

C:1,4

D:1,2

答案:A

解析:

参考链接:机器学习:生成式模型和判别式模型

这个题目还是很重要且基础的,看下图

1.4 已知列表a=[1,2,3,5,6], 当执行a.insert(4,9)命令后,a的值为()

A:[1,2,3,5,6,4,9]

B:[1,2,3,4,5,6,9]

C:[1,2,3,5,9,6]

D:[1,2,3,9,5,6]

答案:C

解析:

这个题目考察python中对列表的常规操作,需要注意的是列表的insert()方法直接对列表进行改变,并不会创建副本,并返回相应修改过后的副本,insert(a,b)相当于在列表的第a个索引位置插入一个值为b的元素,对应于a.insert(4,9)则相当于在第4个位置插入一个值为9的元素,则现在a的值变为[1,2,3,5,9,6]

1.5 已知字符串x='hello world',那么执行语句x.replace('hello','hi')后x的结果是()

A:‘hello world’

B:'hillo world'

C:'hi world'

D:'world'

答案:A

解析:

首先需要明白,python中调用一个对象的一个方法后,对象的变化情况无外乎两种情况。一种是函数无返回值,通过对象调用方法则直接对对象进行操作,操作后对象的值发生变化;另一种是通过对象调用方法,首先创建一个对象副本,然后对该副本执行方法的操作,操作后返回已经改变了的副本,这个时候其实对象本身没有变化。上题中insert()方法相当于第一种情形,而本题中属于第二种类型,当x = 'hello,world',当执行x.replace('hello','hi')时,首先创建一个x的副本,然后对该副本执行'hello' -> 'hi'替换操作,之后返回替换后的副本,也就是x.replace('hello','hi')的值为返回值。也就是'hi world',但是x的值本身并没有变化,故仍然为'hello world',选择A

1.6 下面哪种函数定义的方式不合法()

A:def fun(**args)

B:def fun(arg=1)

C:def fun(*args,a=1)

D:def fun(a=1,*args)

答案:C

解析:牛客网试题

1 在Python2中,C选项是错误的。因为a=1被当做了默认参数,而默认参数只能在可变参数之前。

Python参数顺序:必选参数、默认参数、可变参数和关键字参数。

2 在python3中,C选项是对的,因为a=1被当做了命名关键字参数,而命名关键字参数需要在可变参数之后

Python3参数顺序:必选参数、默认参数、可变参数、命名关键字参数和关键字参数。

 

1.7 一段代码执行如下:

def funa(a):
    def funb(b):
        Return a ** b
    Return funb

则下列正确的描述是:

A:funa(2)(3)=8

B:funa(2)(3)=6

C:funa(2,3)=8

D:funa(2,3)=6

答案:A

解析:

1.8 下列代码执行的结果是()

a = map(lambda x: x ** 3,[1,2,3])

A:[3,6,9]

B:[1,2,3]

C:[1,8,27]

D:[3,8,29]

答案:C

解析:

1 在python2中,map()直接返回一个列表,答案为C

2 在python3中,map()直接返回一个迭代器,需要通过list()函数转化一下才行

1.9 以下哪种不是Python元组的定义方式()

A:(1)

B:(1,)

C:(1,2)

D:(1,2,(3,4))

答案:A

解析:

考察元组的基础知识

元组的元素相当于一个常量,程序只能使用它的值,却不能对它重新赋值。

但是,要定义一个只有1个元素的tuple,不能这样定义:t = (1)

因为定义的不是tuple,是1这个数!这是因为括号()既可以表示tuple,又可以表示数学公式中的小括号,这就产生了歧义,因此,Python规定,这种情况下,按小括号进行计算,计算结果自然是1

python中规定定义一个只有一个元素的元组时候,这样定义:t = (1,)

1.10 下面的代码运行后,a,b,c,d四个变量的值运行错误的是()

import copy
a = [1,2,3,4,['a','b']]
b = a
c = copy.copy(a)
d = copy.deepcopy(a)
a.append(5)
a[4].append('c')

A:a=[1,2,3,4,['a','b','c'],5]

B:b = [1,2,3,4,['a','b','c'],5]

C:c = [1,2,3,4,['a','b']]

D:d = [1,2,3,4,['a','b']]

答案:C

解析:牛客网试题

               Python的传值和传址与copy和deepcopy

首先说下Python里面的传值和传址。下面列出Python中传值和传址操作相对应的数据类型。

传值:数字(整型,浮点型,bool型等),字符串,元组

传址:列表,字典

首先本题的a为列表,则对应传址。传值与传值最大的区别在于--如果函数里面(函数外面的引用)对传入的参数重新赋值,函数外的全局变量是否相应改变,用传值传入的参数是不会改变的,用传址传入就会。

本题b=a,则当a改变时,b会相应的改变,当a=[1,2,3,4,['a','b','c'],5],b也变为[1,2,3,4,['a','b','c'],5],故选项A和选项B正确。

对于copy()和deepcopy()的用法,主要在于想新建一个与a的值相等的b变量,同时b的值与a的值没有关联

但是当列表或字典参数里面的值是列表或字典时,copy并不会复制参数里面的列表或字典,这时就要用到deepcopy了

所以C错误,D(不变)正确

详细的解法请看这篇:Python中copy()和deepcopy()的区别


2 简答题

2.1 在机器学习中,出现过拟合怎么解决?

答案:可以通过

L1和L2正则化

添加dropout层

使用早停策略

增大训练数据样本

适当减小网络的复杂结构

使用keras、tf框架中的checkpointer,实时监控最好的模型

2.2 简述Python中的List、Set、Dict的主要特点以及他们的应用场景


3 数学题

3.1 某高中三年级统考数学、物理、化学三门课程,成绩统计结果是,至少有一门课得满分的有130人,其中数学满分的62人,物理满分的53人,化学满分的67人,数学、物理都得满分得19人,物理、化学都得满分的20人,数学、化学都得满分的22人。问:有且只有两门课程得满分的有多少人

3.2 线性回归参数推导过程-最小二乘法


发布了96 篇原创文章 · 获赞 96 · 访问量 22万+

猜你喜欢

转载自blog.csdn.net/qq_33221533/article/details/101851084
今日推荐