首先是笔试,通过后才能面试。
笔试题目需要在1.5小时内做完,一共6道题目。两道简答题,一道计算题(机器学习的),一道numpy编程题,一道机器学习调参题,最后一道算法leetcode hard题,只需要写出思路,不需要code。
题目如下:
1.(简答题):防止overfit的方法,说三个,用英语
dropout
data augmentation(for images data(such as rotating,cut the images))
L1/L2 regularization
2.(简答题):relu的作用
步骤:relu可以防止过拟合,让一些神经元的输出为0,同时增加了神经网络的非线性关系
3. (计算题:二选一):
我选的第一个题目做
题目一:朴素贝叶斯分类器,给出了条件概率,求分类的结果(分类的结果就是求出y等于多少)
解题步骤:直接写出贝叶斯公式,带入概率值,最后发现带入的概率值是一个关于y的多项式方程,对其求导=0,得到最大似然估计的概率最大值时y的取值
本题得解
题目二:手算反向传播
4. numpy还原矩阵
将原始m*n的矩阵交换行的顺序,为matrix1,然后交换原始矩阵的列的顺序,为matrix2.
通过matrix1和matrix2得到原始矩阵。拿到的是numpy数组,也需要返回numpy数组
这题我numpy当时忘记了,只写了一半
5.机器学习调参题:
给了train data set,train lebel,和test data set,让分类器的模型使得test data set的prediction acc达到90%以上。一共有5个数据集的prediction acc达到90%,就可以拿到满分。
题目要求只能使用tensorflow,pytorch和sklearn。我寻思这个给的是结构化数据,深度神经网络不太适合处理这样的数据,因此肯定选GBDT,GBDT在sklearn当中也是最强的算法之一了,而且也不能用xgboost,catboost,gbdt或者svm就成了最优的选择。
我首先用knn试了试grid search,但是考试平台不能用grid search这个包,因为看不到grid search输出的结果。于是我就改用我用的sklearn当中GBDT手动调试的参数。只能手动调参,
最后我的最高acc为92%,4个上了90,有一个test case没上90% acc,为89%。
6.算法题:
至少为k的连续子序列,leetcode hard难度,类似于
leetcode 862. 和至少为 K 的最短子数组
但是稍有改动,我稍微想了下就想出来了,用快排和哈希表轻松得解。
总结:最后没有通过笔试,没有拿到面试的资格,6个题目,我自认为还做得不错,除了第四题都做出来了,依然没有通过笔试,挺奇怪的,一个小start up的门槛居然这么高?这都不给面试机会?