目录
- 概念&原理
- 模型简介
- 模型比较
- 项目相关
- 业务
- 开放性问题
- 数学
- 大数据相关
- 深度学习
- 语言
- 数据结构与算法
- 算法要从以下几个方面来掌握
- 产生背景
- 适用场合(数据规模,特征维度,是否有 Online 算法,离散/连续特征处理等角度);
- 原理推导(最大间隔,软间隔,对偶);
- 求解方法(随机梯度下降、拟牛顿法等优化算法);
- 优缺点,相关改进;
- 和其他基本方法的对比;
-
感知机是什么?PLA算法和POCKET算法是什么?
-
LDA的原理和推导;SVD、LDA
- 多分类怎么处理?(参见《机器学习》P64,通常切分为多个二分类,最后再集成)
- OVO
- OVR
- MVM–>ECOC(纠错输出码)
- 什么情况下一定会发生过拟合?
- 训练集和测试集分布不一致的时候
- 采用EM算法求解的模型有哪些,为什么不用牛顿法或梯度下降法?
- 有哪些聚类方法?
- K-均值聚类算法、K-中心点聚类算法、CLARANS、 BIRCH、CLIQUE、DBSCAN等
- 聚类算法中的距离度量有哪些?
- 如何进行实体识别?
- 聚类和分类有什么区别?分类是事先知道类标的,而聚类事先不知道类标。
- k-means与knn的区别
- 两种算法之间有多种差异,如下:
- KNN为分类(也可做回归),K-means为聚类;
- KNN为监督学习,K-means为无监督学习;
- KNN的输入样本为带label的,K-means的输入样本不带label;
- KNN没有训练过程,K-means有训练过程;
- K的含义不同,KNN中表示选取距离最近的k的样本,而K-Means则表示设置K个聚类中心
- 两种算法之间有一点相似:都是计算近邻,一般都用欧氏距离。
- http://nohup.cc/article/167/
- 两种算法之间有多种差异,如下:
- ROC-AUC
- 链接
- 为什么roc曲线不随正负样例比变化而变化,而类似的precision-recall曲线却会变化?
- 可画出混淆矩阵根据不同值的定义(横纵坐标),分别对比将负例扩大到K倍或者将正例减小到M倍前后参数是否发生变化推算出来(N=TN+FP,P=TP+FN)
- 什么是模糊聚类,还有划分聚类,层次聚类等
- 线性分类器与非线性分类器的区别及优劣;
- 特征比数据量还大时,选择什么样的分类器?
- 对于维度很高的特征,你是选择线性还是非线性分类器?
- 对于维度极低的特征,你是选择线性还是非线性分类器?
- L1和L2正则的区别,如何选择L1和L2正则?
- 线性回归的梯度下降和牛顿法求解公式的推导
- 如何处理类别不平衡问题?(参见《机器学习》P66)
- 欠采样–>EasyEnsemble
- 过采样–>SMOTRE
- 阈值移动/代价敏感学习–>原始数据嵌入“负正比”,具体的比如在xgboost中可以调整scale_pos_weight参数为数据集的负正比
- 常见的最优化方法
- 牛顿法的原理
- L1正则化的优化
- 0/1损失函数的常用替代损失函数(《机器学习》P130)
- hinge损失(合页损失)–> SVM
- 指数损失 –> AdaBoost
- 对率损失 –> LR、最大熵
- 降维的方法有哪些
- 常见基于核的机器学习算法有哪些?
基于核的算法把输入数据映射到一个高阶的向量空间, 在这些高阶向量空间里, 有些分类或者回归问题能够更容易的解决。- SVM-支持向量机
- LDA-线性判别分析
- RBF-径向基函数
来源
- 深度学习的深有何意义?为什么倾向于更深层的网络而不是更胖的网络?
模型简介
- 原理、推导、特性、优缺点、调参
- 统计学习的核心步骤:模型、策略、算法,你应当对logistic、SVM、决策树、KNN及各种聚类方法有深刻的理解。能够随手写出这些算法的核心递归步的伪代码以及他们优化的函数表达式和对偶问题形式。
- SVM的原理、推导、特性,SVM里面的核,SVM非线性分类,核函数的作用;SVM详细过程,支持向量,几何间隔概念,拉格朗日函数如何求取超平面,非线性分类;写写SVM的优化形式,用拉格朗日公式推导SVM kernel变换;SVM:中文分词;RBF核与高斯核的区别(没区别,高斯核就是rbf核);SVM的支持向量的数学表示
- SVM中为什么要选取最大间隔分类器,从数学的角度说明:
- 几何间隔与样本的误分次数间存在关系误分次数≤(2Rσ)2误分次数≤(2Rσ)2,其中σσ为样本集合到分类面的间隔,RR为所有样本中向量长度最长的值(代表样本分布有多广),所以上式也就表明误分次数的上界由几何间隔决定
- http://www.blogjava.net/zhenandaci/archive/2009/02/13/254519.html
- LR 的推导,特性?;为什么可以使用logistic回归;logistic regression为什么使用sigmoid函数?;linear regression 如何处理离散值的情况,如特征为:男1,女0
- 用EM算法推导解释 Kmeans;K-means起始点;K-means的具体流程;如何优化K-means
- 解释密度聚类算法
- 解释贝叶斯公式和朴素贝叶斯分类;贝叶斯分类器的优化和特殊情况的处理
- 朴素贝叶斯核心思想利用先验概率得到后验概率,并且最终由期望风险最小化得出后验概率最大化,从而输出让后验概率最大化的值(具体概率与先验概率由加入拉普拉斯平滑的极大似然估计而成的贝叶斯估计得到),特征必须相互独立。
- 神经网络,plsi的推导
- 关联分析、apriori
- em算法推导
- 谱聚类处理同心圆的情况如何处理
- spectral clustering的实现
- 推导softmax regression模型
模型比较
- naive bayes和logistic regression的区别
- SVM、LR、决策树的对比?
- LR vs. SVM(源于《机器学习》P132)
- 同:优化目标相近,通常情形下性能也相当
- 异:
- LR的优势在于其输出具有自然的概率意义,给出预测标记的同时也给出了概率,而SVM要想得到概率输出需特殊处理
- LR能直接用于多分类任务,而SVM则需要进行推广
- SVM的解具有稀疏性(仅依赖于支持向量),LR对应的对率损失则是光滑的单调递减函数,因此LR的解依赖于更多的训练样本,其预测开销更大
- LR vs. SVM(源于《机器学习》P132)
- 改变随机森林的训练样本数据量,是否会影响到随机森林学习到的模型的复杂度
- lr的正则化,与SVM的区别
- LR与最大熵的关系
- LR与最大熵模型都属于对数线性模型,形式类似
- 两个模型的学习一般采用极大似然估计,或正则化的极大似然估计,可以形式化为无约束最优化问题(意思然函数为目标函数的最优化问题,此时的目标函数是光滑的凸函数,可以保证找到全局最优解),求解该最优化问题的算法有改进的迭代尺度法、梯度下降法、拟牛顿法等
项目相关
用了什么算法?为什么用?有什么优缺点?
* [实际比赛中为什么tree-ensemble的机器学习方法更好](https://www.zhihu.com/question/51818176/answer/127637712) * 理论(VC维):模型可控性更好,不易过拟合(用一些弱模型去提升) * 数据:一般基于树的算法的抗噪能力更强 * 树模型中易对缺失值处理 * 树模型对类别特征更友好 * 特征的多样性导致很少使用svm,因为因为 svm 本质上是属于一个几何模型,这个模型需要去定义 instance 之间的 kernel 或者 similarity(线性svm中的内积),而我们无法预先设定一个很好的similarity。这样的数学模型使得 svm 更适合去处理 “同性质”的特征 * 系统实现:——xgboost * 正确高效,C++实现 * 灵活(深度定制不同的分类器、选择不同的损失函数、支持各种语言)、可扩展性好,可以推及到大数据、分布式训练(跨平台) * 简单易用(early_stop,自带cv) * 自适应非线性:随着决策树的生长,能够产生高度非线性的模型,而SVM等线性模型的非线形化需要基于核函数等方法,要求在学习之前就要定好核函数,然而确定合适的核函数并非易事。 * 多分类器隐含正则:高度非线性的模型容易过拟合,因此几乎没有人会用单颗决策树。boosting和random forest等集成学习的方法都要训练多个有差异的学习器,近来有工作表明,这些有差异的学习器的组合,能够起到正则化的作用,从而使得总体复杂度降低,提高泛化能力。尤其对于random forest这样的“并行”集成方法,即使每一颗树都过拟合,直观的来讲,由于过拟合到不同的地方,总体投票或平均后并不会过拟合。
- 你在研究/项目/实习经历中主要用过哪些机器学习/数据挖掘的算法?
- 最好是在项目/实习的大数据场景里用过,比如推荐里用过 CF、LR,分类里用过 SVM、GBDT;
- 一般用法是什么,是不是自己实现的,有什么比较知名的实现,使用过程中踩过哪些坑;
- 优缺点分析。
- 如何进行特征选择?
- 用过哪些聚类算法?
- 各类算法优缺点、模型调优细节
- 特征提取的方法(无关键词也是一个特征)
- 自己实现过什么机器学习算法?
- 从项目中在哪一方面体会最深
- 自己项目中有哪些可以迁移到其他领域的东西
- 项目相比别人有什么优劣
业务
- 做广告点击率预测,用哪些数据什么算法
- 推荐系统的算法中最近邻和矩阵分解各自适用场景
- 今日头条的个性化推荐是如何实现的?
- 推荐算法(基于用户的协同过滤,基于内容的协同过滤)
- 如何做一个新闻推荐
- NLP
- Q1:给定一个1T的单词文件,文件中每一行为一个单词,单词无序且有重复,当前有5台计算机。请问如何高效地利用5台计算机完成文件词频统计工作?
- Ans(有问题的):将1T文件切分为5份,分配给5台计算机。每台计算机进行词频统计工作,输出一个结果为{单词:频数}的字典结果文件。将5台计算机生成的5个结果文件合并。
- Q2:每台计算机需要计算200G左右的文件,内存无法存放200G内容,那么如何统计这些文件的词频?
- Ans(不是最优):首先将文件排序,然后遍历利用list存储结果即可。(不能用字典,因为200G统计出来的结果会很大,没有那么大的内存存放字典。由于经过排序操作,遍历存储并不会使结果丢失,所以用list存储结果即可,每当一个list即将占满内存,则将其写入文件,然后清空list继续存储结果。)
- Q3:如何将1T的文件均匀地分配给5台机器,且每台机器统计完词频生成的文件只需要拼接起来即可(即每台机器统计的单词不出现在其他机器中)
- Ans1(不是很好):对1T文件中的单词进行抽样,获得其概率分布,遍历文件,然后根据首字母的概率均匀分配至5台计算机,如a到e的概率均为0.04, 0.04*5=0.2,则将所有以a-e的单词放入第1台计算机,若z的概率为0.2,则把所有以z开头的单词放入第5台计算机。缺点:不具有可扩展性,如果有100台计算机,那么可能就需要2个字母计算了,则程序就要改变。还有可能出现2台机器中有相同的单词。
- Ans2(不是最优):遍历文件,对于每一个单词,获得单词中各字母的ASCII码值,然后将ASCII值之和取余。则每台机器中的单词必定是不一样。
- Q1:给定一个1T的单词文件,文件中每一行为一个单词,单词无序且有重复,当前有5台计算机。请问如何高效地利用5台计算机完成文件词频统计工作?
开放性问题
- 先不要考虑完善性或可实现性,调动你的一切知识储备和经验储备去设计,有多少说多少,想到什么说什么,方案都是在你和面试官讨论的过程里逐步完善的,不过面试官有两种风格:引导你思考考虑不周之处 or 指责你没有考虑到某些情况,遇到后者的话还请注意灵活调整答题策略;
- 和同学朋友开展讨论
- 用户流失率预测怎么做(游戏公司的数据挖掘都喜欢问这个)(涉及数据不平衡问题和时间序列分析)
- 一个游戏的设计过程中该收集什么数据
- 如何从登陆日志中挖掘尽可能多的信息
- 给你公司内部群组的聊天记录,怎样区分出主管和员工?
- 如何评估网站内容的真实性(针对代刷、作弊类)?
- 深度学习在推荐系统上可能有怎样的发挥?
- 路段平均车速反映了路况,在道路上布控采集车辆速度,如何对路况做出合理估计?采集数据中的异常值如何处理?
- 如何根据语料计算两个词词义的相似度?
- 在百度贴吧里发布 APP 广告,问推荐策略?
- 如何判断自己实现的 LR、Kmeans 算法是否正确?
- 100亿数字,怎么统计前100大的?
- 每个实体有不同属性,现在有很多实体的各种属性数据,如何判断两个实体是否是同一种东西
- 重写equals方法,对类里面的对象进行属性比较
- 学校食堂如何应用数据挖掘的知识
- 有用户的搜索历史数据,如何判断用户此时的各种状态(准备买车、已经买车等)
- 给定年龄、性别、学历等信息,对用户的信用进行评估
数学
- 如何判断函数凸或非凸?
- 凸函数定义:对区间[a,b][a,b]上定义的函数ff,若他对区间中任意两点x1,x2x1,x2均有f(x1+x22)≤f(x1)+f(x2)2f(x1+x22)≤f(x1)+f(x2)2,则称ff为区间[a,b][a,b]上的凸函数。
- U形曲线的函数通常是凸函数
- 对实数集上的函数通常可以通过求二阶导数来判别,而二阶导数在区间上非负则称为凸函数,若二阶导数在区间上恒大于0则称严格凸函数
- 解释对偶的概念
- 一个概率题目: 6个LED灯管,找整体旋转180’后仍然是一个正常输入的情况(考虑全即可)
- 一个袋子里有很多种颜色的球,其中抽红球的概率为1/4,现在有放回地抽10个球,其中7个球为红球的概率是多少?(伯努利试验)
- 给定一个分类器p,它有0.5的概率输出1,0.5的概率输出0。
- Q1:如何生成一个分类器使该分类器输出1的概率为0.25,输出0的概率为0.75?
- Ans:连续进行两次分类,两次结果均为1则输出1,其余情况(10,01,00)均输出0。
- Q2:如何生成一个分类器使该分类器输出1的概率为0.3,输出0的概率为0.7? Tip:小明正在做一道选择题,问题只有A、B和C三个选项,通过抛一个硬币来使选择3个选项的概率相同。小明只需抛连续抛两次硬币,结果正正为A,正负为B,负正为C,负负则重新抛硬币。
- Ans:连续进行4次分类(2^4=16 > 10),结果前3种情况则输出1,结果接下来7种情况则输出0,其余情况重新进行分类。
- Q1:如何生成一个分类器使该分类器输出1的概率为0.25,输出0的概率为0.75?
- 概率题:一个游戏,升一级的概率为p1,等级保持不变的概率为p2,等级下降一级的概率为p3。一个用户经过n个回合,等级为m的概率
大数据相关
- 如何用hadoop实现k-means?
- spark工作原理
- spark运行原理
- map-reduce
- mapreduce常用的接口
- mapreduce的工作流程
- MR优化方式
- 什么样的情况下不能用mapreduce
- mapreduce怎么实现join连接
- 如何解决mapreduce的数据倾斜
- mapreduce怎么实现把移动数据到移动计算的
- 10亿个整数,1G内存,O(n)算法,统计只出现一次的数。
- 方案一:分拆然后分布式,方案二:对应每个数有三个状态,01代表出现一次,统计10亿以内数据,然后看最终哪些是01状态
- 海量数据排序;
- bit位操作
- 海量数据中求取出现次数最大的100个数
- 链接
- 分而治之/hash映射 + hash统计 + 堆/快速/归并排序;
- 双层桶划分
- Bloom filter/Bitmap;
- Trie树/数据库/倒排索引;
- 外排序;
- 分布式处理之Hadoop/Mapreduce。
- 实现一个分布式的矩阵向量乘的算法
- 实现一个分布式的topN算法
深度学习
- 介绍卷积神经网络,和DBN有什么区别?
- Deep CNN, Deep RNN, RBM的典型应用与局限,看Hinton讲义和Paper去吧
语言
- 数组与链表的区别是什么?
- 垃圾回收机制
- 遍历HashMap的并且把某一个值删除
- 线程 进程
- 如何实现序列化
- 反序列化是什么?
- 序列化是将(内存中的)结构化的数据数据,序列化成2进制
- python读取文件,写代码
- python计算一个文件中有N行,每行一列的数的平均值,方差,写代码
- Python
- list有哪几种添加元素的方法,能否从表头插入元素?(append, extend和insert, insert能从表头插入元素, 但是时间复杂度为O(n).)
- 如何提高Python的运行效率
- 写一个简单的正则匹配表达式(将文本中的123.4匹配出来)(Python)
- a = [1, 2, 3, 4], b = a, b[0] = 100, 请问print(a)结果是什么
- list是怎样实现的
- 常用的数据结构及应用场景(list,dict,tuple)
- Python装饰器、yield等
- 给定一个文件,包含了data, city, count等信息,写代码实现给定city和date1-date2日期内,count最高的日期
数据结构与算法
- 算法的时间复杂度和空间复杂度是什么?
- 时间复杂度:在进行算法分析时,语句总的执行次数T(n)是关于问题规模n的函数,进而分析T(n)随n的变化情况并确定T(n)的数量级。算法的时间复杂度记作T(n)=O(f(n))。
- 空间复杂度:算法的空间复杂度通过计算算法所需的存储空间实现,算法空间复杂度的计算公式记作:S(n)=O(f(n)),其中n为问题的规模,n为问题的规模,f(n)为语句关于n所占存储空间的函数
- 两个数组,求差集
- 写程序实现二分查找算法,给出递归和非递归实现,并分析算法的时间复杂度。
- 实现单链表的反转
- 求两个一维数组的余弦相似度,写代码
- 字符串翻转
- 快排
- 非递归的二叉前/中/后序遍历
- 手写二叉树前/中/后序递归遍历算法(千万不要忘记异常处理!)
- 两个字符串的复制(除了字符串地址重叠的情况,也要注意判断字符串本身的空间足够不足够,对于异常情况要考虑全面)
- 一个数组,如果存在两个数之和等于第三个数,找出满足这一条件的最大的第三个数(设为x+y =c)
- 怎样将二叉排序树变成双向链表,且效率最高
- 从栈里找最小的元素,且时间复杂度为常数级
- float转string
- 判断一棵树是否是另一棵的子树
- 在一个n*n的矩阵中填数的问题,那种转圈填数
- 链表存在环问题,环的第一个节点在哪里?
- 几个排序算法,时间复杂度&空间复杂度
- 数据结构当中的树,都有哪些?
- 二叉查找树(二叉排序树)、平衡二叉树(AVL树)、红黑树、B-树、B+树、字典树(trie树)、后缀树、广义后缀树
- 链接
- 输出一个循环矩阵
- 翻转字符串(《剑指offer》原题)
- N个数找K大数那个题,堆解释了一遍,比较满意,问还能怎么优化O(Nlogk)的方法,并行方面想
- 一个班60个人怎么保证有两个人生日相同,听完后有点奇怪,①为什么是60个人?②为什么是保证?,反正没管这么多就是概率嘛,算就完了.
- 1减去50个人生日不同的概率≈100%
- 问一个字符串怎么判断是邮箱比如:vzcxn@sdf.gre.有限状态自动机,然后要我画状态转移图.
- 给10^10个64位数,100M内存的空间排序,一个求中位数的方法.用文件操作来做了,像快排一样,二分选个数统计大于那个数的数量和小于那个数的数量,如果能用100M的空间排序就把那些数排了,如果不能继续.直到能排为止.
- kmp算法
- 求最大字段和,用动态规划和分治法两个方法,时间复杂度怎么算
- 统计字符串中出现的字符个数,忽略大小写,其中可能有其他字符。
- 寻找二叉树的公共父节点
- b+ b-树、红黑树
- 判断两条链表是否交叉(360有问)
最简单的方法是遍历到两个链表的尾节点然后判断两个尾节点是否相同即可 - 树的广度、深度遍历
- 稳定与不稳定排序
- 并行计算、压缩算法
- 最长上升子序列,两个大小相同的有序数组找公共中位数
- 介绍大顶堆和小顶堆
- 反转链表
- 单链表转二叉树,二叉树转单链表(要求原地)
- 手写sqrt(),不调用其它任何函数
http://liuqing-2010-07.iteye.com/blog/1396859
参考