机器学习面试题

本文来自七月实验室,无意间发现的一个公众号,感觉挺有用的,就摘录一下。

(tips:一个在线的公式编辑工具:http://latex.codecogs.com/eqneditor/editor.php)

问题目录

        • 1,哪些机器学习算法不需要做归一化处理?
        • 2,如何理解模型的过拟合与欠拟合,以及如何解决?
        • 3,机器学习特征工程操作,以及它的意义
        • 4,逻辑斯特回归为什么要对特征进行离散化?

1,哪些机器学习算法不需要做归一化处理?

解析:在实际应用中,通过梯度下降法求解的模型一般都是需要归一化的,比如线性回归,logistic回归,KNN,SVM,神经网络等模型。
但是树形模型不需要做归一化,因为它们之间不关心变量的值,而是关心变量的分布和变量之间的条件概率,如决策树,随机森林。
归一化和标准化的目的是为了计算更方便,比如两变量的量纲可能不同,可能一个的值远大于另一个,那么他们同时作为变量的时候,可能会造成数值计算问题,比如说求矩阵的逆可能很不精确,或者梯度下降的收敛比较困难,还有如果需要计算欧氏距离的话,可能量纲也需要调整,所以 lr 和 knn 的标准化一下应该有好处。其他的算法,也同理。
那么什么是标准化呢?
标准化:特征均值为0,方差为1。
公式:
x − n p . m e a n ( x ) n p . s t d ( x ) \frac{x-np.mean(x)}{np.std(x)} np.std(x)xnp.mean(x)
归一化:把每个特征向量的值都缩放到相同的数值范围,如[0,1],[-1,1]。
最常用的归一化形式就是将特征向量调整为L1范数,使特征向量的数值之和为1。而L2范数就是欧几里得之和。
公式:
x − m i n ( x ) m a x ( x ) − m i n ( x ) \frac{x-min(x)}{max(x)-min(x)} max(x)min(x)xmin(x)
这个方法经常用于确保数据点没有因为特征的基本性质而产生较大的差异,即确保数据处于同一数量级(同一量纲),提高不同特征数据之间的可比性。

2,如何理解模型的过拟合与欠拟合,以及如何解决?

欠拟合:训练误差和验证误差都很大,这种情况称为欠拟合。
原因:
是模型尚未学习到数据的真实结构。因此,模拟在训练集和验证集上的性能都很差。
解决方法:
1,做特征工程,添加更多的特征项。如果欠拟合是由于特征项不够,没有足够的信息支持模型做判断。
2,增加模型的复杂度。如果模型太简单,不能够应付复杂的任务。可以使用更复杂的模型,减小正则化系数,具体来说可以使用核函数,集成学习方法。

过拟合:模型在训练集上表现很好,但是在验证集上却不能保持准确,也就是模型泛化能力很差。这种情况很可能是模型过拟合。
原因:
1,训练数据集样本单一,样本不足。
2,训练数据中噪声干扰过大。
3,模型过于复杂。
解决方法:
1,在训练和建立模型的时候,从相对简单的模型开始,不要一开始就把特征做的非常多,模型参数调的特别复杂。
2,增加样本,要覆盖全部的数据类型。数据经过清洗后在训练模型,防止噪声数据干扰模型。
3,正则化。在模型算法中添加正则惩罚函数来防止过拟合。常见的有L1,L2正则化。
4,集成学习方法能有效的防止过拟合。
5,减少特征个数。(注意:降维不能解决过拟合,降维只是减少了特征的维度,并没有减小特征的所有信息。)

3,机器学习特征工程操作,以及它的意义

特征工程包括数据与特征处理,特征选择,降维三部分。
数据与特征处理包括
1,数据选择,清洗,采样。
数据格式化
数据清洗,填充缺失值,去掉脏数据,将不可信的样本丢掉,缺省值极多的数据考虑不用
采样,针对正负样本不平衡的情况,当样本远大于负样本时,且量都很大时,采用下采样,量不大时,可以采集更多的数据或oversampling或修改损失函数。采样过程中可利用分层抽样保持不同类别的比例。
2,不同类型数据的特征处理
数值型:幅度调整/归一化,log等变化,统计值(例如max,min,mean,std),离散化,分桶等。
类别型:one-hot编码等。
时间型:提取出连续值的持续时间和间隔时间,提取出离散值的 ‘年’,‘月’,‘日’,‘一年中哪个星期/季度’,‘一周中的星期几’,‘工作日/周末’等信息
文本型:使用 if-idf 特征
统计型:加减平均,分位线,次序,比例
意义:对数据进行预处理,可提高数据质量,提高挖掘质量。对数据进行清洗可填充缺失值,光滑噪声数据,识别和删除离群点数据,保证数据的一致性。
使用正确的采样方法可解决因数据不平衡带来的预测偏差。
对不同的数据类型进行不同的特征处理有助于提高特征的可用性,例如对数值型数据进行归一化可将数据转化到同一量纲;对类别型数据,可用 one-hot 编码方法将类别数据数字化,数字化特征之后可以用来计算距离,相似性等;可从时间型数据当中提取更多的时间特征,例如:年,月,日等。这些特征对于业务场景以及模型的预测往往有很大的帮助。统计型特征处理有助于从业务场景中挖掘更丰富的信息。

特征选择包括
1,Filter
使用方差,Pearson相关系数,互信息等方法过滤特征,评估单个特征和结果值之间的相关程度,留下Top相关的特征部分。
2,Wrapper
可利用 ’递归特征删除法‘ ,把特征选择看做一个特征子集搜索问题,筛选各中特征子集,用模型评估效果。
3,Embedded
可利用正则化方式选择特征,使用带惩罚项的基模型,除了选择出特征外,同时也进行了降维。
意义:
剔除对结果影响不大的特征,减小冗余,选择有意义的特征输入模型,提高计算性能。

降维
方法:主成分分析(PCA)和线性判别分析(LDA)
意义:通过 PCA 或者 LDA 方法,将较高维度样本空间映射到较低维度的样本空间,从而达到降维的目的,减少模型的训练时间,提高模型的计算性能。

4,逻辑斯特回归为什么要对特征进行离散化?

解析 一:
1,非线性。逻辑回归属于广义线性模型,表达能力受限;单变量离散化为N个后,每个变量有独特的权重,相当于为模型引入了非线性,能够提升模型的表达能力,加大拟合。离散特征的增加和减少都很容易,易于模型的快速迭代。
2,速度快。稀疏向量内积乘法运算速度快,计算结果方便存储,容易扩展。
3,鲁棒性。离散化后的特征对异常数据有很强的鲁棒性:比如一个特征是年龄>30是1,否则是0。如果特征没有离散化,一个异常数据 ‘ 年龄300 ’ 会给模型造成很大的干扰。
4,方便交叉与特征组合。离散化后可以进行特征交叉,由 M + N 个变量变为 MN个变量,进一步引入非线性,提升表达能力。
5,稳定性。特征离散化后,模型会变得更稳定,比如如果对用户年龄离散化,20-30作为一个区间,不会因为一个用户年龄长了一岁,就变成一个完全不同的人,当然处于区间相邻的样本会刚好相反,所以怎么划分区间是门学问。
6,简化模型。特征离散化后,起到了简化了逻辑回归模型的作用,降低了模型过拟合的风险。
解析二:
在工业界,很少直接将连续值作为逻辑回归模型的特征而输入,而是将连续特征离散化为一系列0,1特征交给逻辑回归模型,这样做的优势有以下几点:
a,离散特征的增加和减少都很容易,易于模型的快速迭代;
b,稀疏向量内积乘法运算速度快,计算结果方便存储,容易扩展;
c,离散化后的特征对异常数据有很强的鲁棒性:比如一个特征是年龄>30是1,否则是0。如果特征没有离散化,一个异常数据 ‘ 年龄300 ’ 会给模型造成很大的干扰;
d,逻辑回归属于广义线性模型,表达能力受限,单变量离散化为N个后,每个变量有单独的权重,相当于为模型引入了非线性,能够提升模型的表达能力,加大拟合。
e,离散化后可以进行特征交叉,由 M+N个变量变为 M
N 个变量,进一步引入非线性,提升表达能力;
f,特征离散化后,模型会变得更稳定,比如如果对用户年龄离散化,20-30作为一个区间,不会因为一个用户年龄长了一岁,就变成一个完全不同的人,当然处于区间相邻的样本会刚好相反,所以怎么划分区间是门学问;
g,特征离散化后,起到了简化了逻辑回归模型的作用,降低了模型过拟合的风险;

李沐曾经说过: 模型是使用离散化特征还是连续特征,其实是一个 ‘ 海量离散特征 + 简单模型 ’ 同 ‘ 少量连续特征 + 复杂模型 ’ 的权衡。既可以离散化用线性模型,也可以用连续特征加深度学习。就看是喜欢折腾特征还是折腾模型了。
通常来说,前者容易,而且可以n个人一起并行做,有成功经验;后者目前看很赞,能走多远还拭目以待。

你可能感兴趣的:(机器学习)