机器学习笔试面试题——day3

选择题

1、下列方法中,不可以用于特征降维的方法包括
A 主成分分析PCA
B 线性判别分析LDA
C 深度学习SparseAutoEncoder
D 矩阵奇异值分解SVD

特征降维方法主要有:PCA,SVD,LDA,LLE,Isomap
AutoEncoder:AutoEncoder的结构与神经网络的隐含层相同,由输入L1,输出 L2组成,中间则是权重连接。L2可以尽可能的保存L1的信息,通常大多数情况下升维。

2、下列哪些不特别适合用来对高维数据进行降维
A LASSO
B 主成分分析法
C 聚类分析
D 小波分析法
E 线性判别法
F 拉普拉斯特征映射

lasso通过参数缩减达到降维的目的;
LDA通过找到一个空间使得类内距离最小类间距离最大所以可以看做是降维;
小波分析有一些变换的操作降低其他干扰可以看做是降维


3、下列属于无监督学习的是
A k-means
B SVM
C 最大熵
D CRF

4、下列哪个不属于CRF(条件随机场)模型对于HMM和MEMM模型的优势( )
A 特征灵活
B 速度快
C 可容纳较多上下文信息
D 全局最优

CRF(序列标注)是在给定待标记的观察序列的条件下,使用维特比算法,计算整个标记序列的联合概率分布。
CRF优点:
1)特征设计灵活
2)没有HMM那样严格的独立性假设条件,,因而可以容纳更多的上下文信息
3) CRF计算全局最优输出节点的条件概率,客服了最大熵马尔可夫模型标记偏置的缺点
CRF缺点
速度慢


5、以下哪个是常见的时间序列算法模型
A RSI
B MACD
C ARMA
D KDJ

RSI:相对强弱指数,通过比较一段时期内的平均收盘涨数和平均收盘跌数来分析市场买沽盘的意向和实力 , 从而作出未来市场的走势 
MACD:移动平均聚散指标,是根据均线的构造原理 , 对股票价格的收盘价进行平滑处理 , 求出算术平均值以后再进行计算 , 是一种趋向类指标 
KDJ:随机指标,是根据统计学的原理 , 通过一个特定的周期 ( 常为 9 日 ,9 周等 ) 内出现过的最高价 , 最低价及最后一个计算周期的收盘价及这三者之间的比例关系 , 来计算最后一个计算周期的未成熟随机值 RSV, 然后根据平滑移动平均线的方法来计算 K 值 , D 值与 J 值 , 并绘成曲线图来研判股票走势 .


6、下列不是SVM核函数的是
A 多项式核函数
B logistic核函数
C 径向基核函数
D Sigmoid核函数

SVM核函数:线性核、多项式核、径向基核、高斯核、幂指数核、拉普拉斯核、sigmod核(用sigmod核时,SVM是实现的是一种多层感知器神经网路,能求得全局最优值且对于未知样本的良好泛化能力)
核函数的选择方法:
1)利用专家的先验知识
2)采用交叉验证法,分别使用不同的核函数,归纳误差最小的
3)混合核函数,是目前的主流方法


7、解决隐马模型中预测问题的算法是
A 前向算法
B 后向算法
C Baum-Welch算法
D 维特比算法

解决预测问题:维特比算法
解决概率计算问题:前向后向算法
解决参数估计问题:Baum-Welch算法


8、一般,k-NN最近邻方法在()的情况下效果较好
A 样本较多但典型性不好
B 样本较少但典型性好
C 样本呈团状分布
D 样本呈链状分布

KNN主要依靠的是周围的点,如果样本过多,那么难以区分
整体样本应该具有典型性好


9、在一个n维的空间中, 最好的检测outlier(离群点)的方法是()
A 作正态分布概率图
B 作盒形图
C 马氏距离
D 作散点图
 

10、对数几率回归(logistics regression)和一般回归分析有什么区别?
A 对数几率回归是设计用来预测事件可能性的
B 对数几率回归可以用来度量模型拟合程度
C 对数几率回归可以用来估计回归系数
D 以上所有

LR回归是用来解决分类问题的,可以检验模型对数据的拟合度
模型建立好后,就可以根据独立的特征,估计相关的回归系数

 

11、bootstrap数据是什么意思?(提示:考“bootstrap”和“boosting”区别)
A 有放回地从总共M个特征中抽样m个特征
B 无放回地从总共M个特征中抽样m个特征
C 有放回地从总共N个样本中抽样n个样本
D 无放回地从总共N个样本中抽样n个样本

boosting的训练集是整个样本集合
bagging的训练集有放回的从N样本选取n个样本
boostrap其实就是bagging


12、“过拟合”只在监督学习中出现,在非监督学习中,没有“过拟合”,这是()
A 对的
B 错的

13、对于k折交叉验证, 以下对k的说法正确的是()
A k越大, 不一定越好, 选择大的k会加大评估时间
B 选择更大的k, 就会有更小的bias (因为训练集更加接近总数据集)
C 在选择k时, 要最小化数据集之间的方差
D 以上所有

Bias:度量了学习算法的期望输出与真实结果的偏离程度, 刻画了算法的拟合能力
     Bias 偏高表示预测函数与真实结果差异很大。
Variance:则代表“同样大小的不同的训练数据集训练出的模型”与“这些模型的期望输出值”之间的差异。
     训练集变化导致性能变化, Variance 偏高表示模型很不稳定。
Noise:刻画了当前任务任何算法所能达到的期望泛化误差的下界,
      刻画了问题本身的难度。

k越大, bias越小, 训练时间越长. 在训练时, 也要考虑数据集间方差差别不大的原则. 
比如, 对于二类分类问题, 使用2-折交叉验证, 如果测试集里的数据都是A类的, 而训练集中数据都是B类的, 显然, 测试效果会很差.


14、回归模型中存在多重共线性, 你如何解决这个问题?
1 去除这两个共线性变量
2 我们可以先去除一个共线性变量
3 计算VIF(方差膨胀因子), 采取相应措施
4 为了避免损失信息, 我们可以使用一些正则化方法, 比如, 岭回归和lasso回归
A 1
B 2
C 2和3
D 2, 3和4

解决多重公线性:
1)用相关矩阵去除相关性过高的变量
2)VIF法, 如果VIF值<=4说明相关性不是很高, VIF值>=10说明相关性较高
3)用岭回归核lasso回归的带有惩罚正则项的方法
4)加上一些随机噪声,使变量不同,但是要小心使用


15、模型的高bias是什么意思, 我们如何降低它 ?
A 在特征空间中减少特征
B 在特征空间中增加特征
C 增加数据点
D B和C
E 以上所有

17、对于信息增益, 决策树分裂节点, 下面说法正确的是()
1 纯度高的节点需要更多的信息去区分
2 信息增益可以用”1比特-熵”获得
3 如果选择一个属性具有许多归类值, 那么这个信息增益是有偏差的
A 1
B 2
C 2和3
D 所有以上

纯度越高,表示不确定越少,更少的信息就可以区分


19、假设我们要解决一个二分类问题, 我们已经建立好了模型, 输出是0或1, 初始时设阈值为0.5, 超过0.5概率估计, 就判别为1, 否则就判别为0 ; 如果我们现在用另一个大于0.5的阈值, 那么现在关于模型说法, 正确的是 :
1 模型分类的召回率会降低或不变
2 模型分类的召回率会升高
3 模型分类准确率会升高或不变
4 模型分类准确率会降低
A 1
B 2
C 1和3
D 2和4
E 以上都不是

  预测正 预测负
实际正 TP FN
实际负 FP TN
Precision= TP/(TP+FP)表示预测实际为正的样本在所有预测为正的样本的百分比
Recall = TP/(TP+FN)表示预测实际为正的样本在所有实际为正的样本的百分比
Accuracy = TP+TN/所有样本 表示预测正确的样本在所有样本的比例



20、“点击率问题”是这样一个预测问题, 99%的人是不会点击的, 而1%的人是会点击进去的, 所以这是一个非常不平衡的数据集. 假设, 现在我们已经建了一个模型来分类, 而且有了99%的预测准确率, 我们可以下的结论是
A 模型预测准确率已经很高了, 我们不需要做什么了
B 模型预测准确率不高, 我们需要做点什么改进模型
C 无法下结论
D 以上都不对


22、数据科学家可能会同时使用多个算法(模型)进行预测, 并且最后把这些算法的结果集成起来进行最后的预测(集成学习),以下对集成学习说法正确的是
A 单个模型之间有高相关性
B 单个模型之间有低相关性
C 在集成学习中使用“平均权重”而不是“投票”会比较好
D 单个模型都是用的一个算法
 

23、在有监督学习中, 我们如何使用聚类方法?

我们可以先创建聚类类别, 然后在每个类别上用监督学习分别进行学习
我们可以使用聚类“类别id”作为一个新的特征项, 然后再用监督学习分别进行学习
在进行监督学习之前, 我们不能新建聚类类别
我们不可以使用聚类“类别id”作为一个新的特征项, 然后再用监督学习分别进行学习
A 2 和 4
B 1 和 2
C 3 和 4
D 1 和 3

24、以下说法正确的是

一个机器学习模型,如果有较高准确率,总是说明这个分类器是好的
如果增加模型复杂度, 那么模型的测试错误率总是会降低
如果增加模型复杂度, 那么模型的训练错误率总是会降低
我们不可以使用聚类“类别id”作为一个新的特征项, 然后再用监督学习分别进行学习
A1
B2
C3
D2和3
E都错

25、对应GradientBoosting tree算法, 以下说法正确的是:

当增加最小样本分裂个数,我们可以抵制过拟合
当增加最小样本分裂个数,会导致过拟合
当我们减少训练单个学习器的样本个数,我们可以降低variance
当我们减少训练单个学习器的样本个数,我们可以降低bias
A2 和 4
B2 和 3
C1 和 3
D1 和 4
 

26、如果一个训练好的模型在测试集上有100%的准确率, 这是不是意味着在一个新的数据集上,也会有同样好的表现?
A是的,这说明这个模型的范化能力已经足以支持新的数据集合了
B不对,依然后其他因素模型没有考虑到,比如噪音数据

27、下面的交叉验证方法
i. 有放回的Bootstrap方法
ii. 留一个测试样本的交叉验证
iii. 5折交叉验证
iv. 重复两次的5折交叉验证
当样本是1000时,下面执行时间长短的顺序,正确的是
Ai > ii > iii > iv
Bii > iv > iii > i
Civ > i > ii > iii
Dii > iii > iv > i

Boostrap方法是传统地随机抽样,验证一次的验证方法,只需要训练1次模型,所以时间最少。
留一个测试样本的交叉验证,需要n次训练过程(n是样本个数),这里,要训练1000个模型。
5折交叉验证需要训练5个模型。
重复2次的5折交叉验证,需要训练10个模型。


28、变量选择是用来选择最好的判别器子集, 如果要考虑模型效率,我们应该做哪些变量选择的考虑?

多个变量其实有相同的用处
变量对于模型的解释有多大作用
特征携带的信息
交叉验证
A1 和 4
B1, 2 和 3
C1,3 和 4
D以上所有

考虑模型效率,所有不需要考虑模型的解释性


29、对于线性回归模型,包括附加变量在内,以下的可能正确的是 :

R-Squared 和 Adjusted R-squared都是递增的
R-Squared 是常量的,Adjusted R-squared是递增的
R-Squared 是递减的, Adjusted R-squared 也是递减的
R-Squared 是递减的, Adjusted R-squared是递增的
A1 和 2
B1 和 3
C2 和 4
D以上都不是

R方的定义是衡量模型拟合度的一个量,被解释为方差/总方差
用R方的时候,不断添加变量能让效果提升,但是这种提升是虚假的
利用调整R方能对添加的非显著变量给出惩罚,即随意添加一个变量不一定能让模型拟合度上升

手撕代码

1 找到1-n中的重复数字

public class FindNumber{
	//哈希:时间复杂度O(n),空间复杂度O(n),不用移动原数组,不用改动原数组
	public int soultion1(int[] nums){
		Hashset set = new HashSet();
		List result = new ArrayList();
		for(int i=0;ileft&&nums[i]<=mid)
					count++;
			}
			if(left+count>mid+1)
				right = mid;
			else
				left = mid+1;
		}
		return left;	
	}
}

2 求1-n之间的素数的个数

public int soultion(int[] nums){
		//标记位标记是否为质数
		boolean index;
		for(int i=1;i

3 给一个字典和一个长字符串,判断字符串能不能拆成字典的组合 /

//对字典进行遍历,每次遍历都用当前字典元素和源字符串截取等长的字符串进行比较;当相等的时候就让开始截取的位置向前移动前一个已匹配的元素的长度,如此递归遍历,直到将所有字典遍历完毕
public class dict{
	public static boolean wordSpilt(String s,Set dict,int start){
		if(start == s.length())
			return true;
		for(String a :dict){
			int len = a.length();
			int end = start + len;
			if(end

4 找到一串自然数的缺失值

//1到n的自然数,其中减少了x个数,顺序也被打乱,放在一个n-x的数组里,请找出丢失的数字。  
//声明一个新的长度是n+1的数组arr,然后遍历被打乱顺序且缺失数字的数组src,比如src中遍历到的数据a,让 arr[a]=1;由于,数组元素存在则格式化为 1 缺失则默认赋值为 0 ,那么只需找到数组元素为0的下标值

public class FindMissingNumber{
    public static String getMissingNumber(int[] src, int n) {
        StringBuffer result = new StringBuffer();
        int[] arr = new int[n + 1];
        arr[0] = 1;
        for (int i = 0; i < src.length; i++) {
            int num = src[i];
            arr[num] = 1;
           }
        for (int i = 0; i < arr.length; i++) {
            int num = arr[i];
            if (num != 1) {
            result.append(i + ",");
           }
        }
        if (result.length() > 0) {
            result.deleteCharAt(result.length() - 1);
        }
        return result.toString();
        }
} 

机器学习算法

1 决策树算法

1 决策的结果是一个西瓜是否为好瓜,判断的特征属性有:颜色、响声、瓜蒂。。。
决策树的关键在于选择最优的划分属性,选择方法可以有:
1)信息增益ID3算法
    信息增益表示已知特征x,在x的条件下数据集Y不确定性减少的程度
2)信息增益率C4.5算法
    改善ID3算法易于偏向取值多的特征的缺点
3)基尼指数CART算法

2 为了防止过拟合,决策树采用剪枝策略,主动去除一些分支
1)预剪枝
    对根据某一个属性划分前后的分支的泛化性能进行估计,如果划分后的验证集的精度 > 划分前的,那么划分
    优点:使很多分支都不用展开减少过拟合风险,还减少了训练时间和测试开销。
    缺点:基于”贪心“的本质,很多分支没展开可能导致欠拟合
2)后剪枝
    先生成一颗完整的树,通过最后一个分支来决定要不要剪掉
    优点:保留更多的分子,欠拟合风险小,泛化能力往往优于预剪枝;
    缺点:训练时间开销大
3 连续值和缺失值处理
1)遇到连续属性值
    C4.5算法采用二分法来对连续值进行处理。比如西瓜的密度,先把密度从小到大排序,然后找到候选划分点,把每个候选划分点的信息增益算出来,取max的值作为密度的信息增益。
2)缺失值处理
    如果遇到17个属性只有14个有值的情况:14个属性计算Gain,然后Gain*14/17,当作17个样本的信息增益,进行后续计算;
    如果遇到某一个样本y在属性x(值有1,2,3)上缺失,那么这个样本在1,2,3的三个分支里都会出现,知识样本权重不是1,而是这三个分支中除y外各个样本的比例。

2 各类梯度下降方法

梯度下降的过程类似于在下山的过程中找到最陡峭的地方(梯度),
在这个地方沿着高度下降的方向(梯度相反的反向)走,
每走一段路程(步长,学习率)就需要测量以下是否是最陡峭的。
J是一个可微分的损失函数,目标就是要找到J的最小值,当前在0点,下一步1点:

\theta_1 = \theta_0 - \alpha \delta J(\theta)

梯度下降方法 优点 缺点
全量梯度下降BGD 每次学习用整个数据集,收敛于全局极点 学习时间太长
随机梯度下降SGD 一轮迭代只用一条随机选取的数据,学习很快 损失函数波动剧烈收敛时浮动,不稳定
小批量梯度下降 综合了BGD和SGD的优点 弱化了他们的缺点
Momentum梯度下降法 避免了BGD,SGD的震荡(震荡是由于之前频繁更改方向),加入了冲量  

对于Momentum梯度下降方法加入了冲量之后:

1)当本次梯度下降方向与上次更新量的方向相同时,上次的更新量能够对本次的搜索起到一个正向加速的作用。

2)当本次梯度下降方向与上次更新量的方向相反时,上次的更新量能够对本次的搜索起到一个减速的作用

3 三类HMM算法和EM算法

已知参数,根据可见状态链得到隐藏状态链 预测问题,解码问题 维特比算法
已知参数,根据可见状态链得到某条隐藏状态链的概率 模型评价问题 后向算法
部分参数未知,根据可见状态链进行参数估计 参数估计问题 Baum-Welch算法

Baum-Welch是期望最大化算法(EM)在HMM里的具体体现:

你可能感兴趣的:(找工作,算法秋招)