公司:SHEIN
数据挖掘工程师
1 选择题(10个)
题库来自牛客网–数据挖掘工程师题目
(1)Naive Bayes
(2)XGBoost 和LightGBM原理及对比分析
(3)逻辑回归
。。。忘了
2 问答题(2个)
(1)逻辑回归为什么要对特征进行离散化
- 非线性,逻辑回归属于广义线性模型,表达能力有限,单变量离散化为N个后,每个变量有单独的权重,相当于为模型引入了非线性,,能够提高模型表达力,加大拟合, 离散特征的增加和减少都很容易,易于模型的快速迭代;
- 速度快,稀疏向量内积乘法运算速度快,计算结果方便存储,容易扩展;
- 鲁棒性,离散化后的特征对异常数据有很强的鲁棒性:比如一个特征是年龄>30是1,否则0。如果特征没有离散化,一个异常数据“年龄300岁”会给模型造成很大的干扰;
- 方便交叉与特征组合:离散化后可以进行特征交叉,由M+N个变量变为M*N个变量,进一步引入非线性,提升表达能力;
- 稳定性:特征离散化后,模型会更稳定,比如如果对用户年龄离散化,20-30作为一个区间,不会因为一个用户年龄长了一岁就变成一个完全不同的人。当然处于区间相邻处的样本会刚好相反,所以怎么划分区间是门学问;
- 简化模型:特征离散化以后,起到了简化了逻辑回归模型的作用,降低了模型过拟合的风险。
(2)机器学习中常见的几种最优化方法
- 梯度下降法(Gradient Descent)
- 牛顿法和拟牛顿法(Newton’s method & Quasi-Newton Methods)
- 共轭梯度法(Conjugate Gradient)
- 启发式优化方法
- 解决约束优化问题——拉格朗日乘数法
3 编程题(2个)
(1)111.二叉树的最小深度
def minDepth(self,root)
if root is None:
return 0
if root.left is None and root.right is None:
return 1
elif root.left is None:
return 1 + self.minDepth(root.right)
elif root.right is None:
return 1 + self.minDepth(root.left)
else:
return 1 + min([self.minDepth(root.left), self.minDepth(root.right)])
(2)面试题 08.11. 硬币
给定数量不限的硬币,币值为25分、10分、5分和1分,编写代码计算n分有几种表示法。(结果可能会很大,你需要将结果模上1000000007)
示例1:
输入: n = 5
输出:2
解释: 有两种方式可以凑成总金额:
5=5
5=1+1+1+1+1
示例2:
输入: n = 10
输出:4
解释: 有四种方式可以凑成总金额:
10=10
10=5+5
10=5+1+1+1+1+1
10=1+1+1+1+1+1+1+1+1+1
解题思路同518:使用动态规划
def waysToChange(self, n: int) -> int:
dp = [1] + [0] * n
coins = [1, 5, 10, 25]
for coin in coins:
for i in range(coin, n + 1):
dp[i] = dp[i] + dp[i - coin]
return dp[-1] % 1000000007