机器学习中常见的问题整理(二)

1.KNN算法有哪些缺点?
(1)计算代价很大
①由于KNN必须对分类数据计算与每一个训练数据的距离,非常耗时;
②KNN算法必须保存全部的数据集,如果训练数据集很大,那么就需要耗费大量的存储空间;
(2)无法处理categorical变量
(3)对变量的缩放非常敏感
(4)难以处理不同单位和不同数值范围的变量
(5)对高维数据表现不佳
(6)可解释性较差,无法给出决策树那样的规则
(7)k的选择问题。k总是在过拟合与欠拟合之间游走。通过cross validation来选择k的k是全局适用的,所以KNN总是无法避免地在一些区域过拟合,同时在另一些区域欠拟合。所以KNN必须要先做特征选择,不然这些不相关的特征会影响到分类效果,因为KNN自己无法学习到哪些特征重要,哪些不重要。
(8)如果用K近邻模型做回归的话,一个比较明显的缺陷,就是KNN无法做out of sample的回归预测。因为用KNN做回归的时候,预测值是它附近几个值的平均值。所以预测值不可能超过预测样本的最大值,也不可能小于样本的最小值。这个缺点其实是和回归树一样的。

2.非参模型是什么意思?有哪些模型算是非参的?
如果一个机器学习模型只由数量有限的参数来决定,那么这个模型就是参数(parametric)模型。这里“数量有限”是指个数少,不随着样本数量而变化,在知道数据量之前,就已经知道了有多少个参数需要被估计。
参数模型一般结构比较简单,只需要估计少量的参数。这通常是因为在对参数进行估计前,参数模型就已经对概率分布有了很强的假设。
比如线性回归就假设了线性关系和残差的正态性。
比如高斯混合模型就假设了每簇聚类都是一个高斯分布。
比如逻辑回归等等。

如果一个机器学习模型无法由数量有限的参数来决定,那么这个模型就是非参数(non-parametric)模型。这里“数量有限”是指个数少,不随着样本数量而变化。
比如k最近邻模型,就是非参的,模型的参数是由每个数据点决定的。
比如k-Means,也是非参的,模型的参数是由每个数据点决定的。
比如决策树、随机森林、SVM等等。

3.hyperparameter与parameter的区别?
参数(parameter)通常是在模型训练的过程中,我们根据训练集数据自动得到的。
超参(hyperparameter)通常是在模型训练前,我们手动设置的,其目的是为了在训练参数的时候让模型的表现更好。
我们一般说的调参,都是指的调超参。
以LASSO regression为例子,回归模型里的系数是参数,正则项的惩罚系数则是超参。
简单说来,模型内部的参数是参数,由外部输入的参数就是超参。

4.数据泄漏(data leakage)是什么意思?
数据泄露就是说用了不该用的数据,比如
(1)在训练模型时,利用了测试集的数据、信息
(2)在当前使用了未来的数据
(3)在交叉验证进行调参时,使用了验证集的信息参与模型建立
具体说下第三点,比如对特征进行标准化,正确的方法应该是在训练集上标准化,然后应用到验证集上,而非先标准化,再划分验证集。再比如说,要对数据进行pca降维,应该是在训练集上pca,然后作用到验证集上,而非对整个数据集进行pca。通常都忽略了这一点。

5.gbdt如何对连续特征离散化?
对连续特征离散化是决策树本身就可以做到的,而不是非要gradient boost。
决策树是这样做的。
(1)首先对这个连续变量排序。比如说年龄,把所有样本中年龄的数值从小到大排序。
(2)在数据没有重复的假设下,如果有n个样本,那么排序后的数据之间应该有n-1个间隔。
(3)决策树会对这n-1个间隔进行逐一尝试(分叉),每个不同的分叉,会带来不同的gini指数,我们最终选gini指数最小的那个分叉作为最优分叉。
理论上是这样进行的,但是实际情况是为了一些计算优化,可能会进行一些随机搜索,而不一定是遍历。
上面这个过程就把那个连续变量进行了一分为二(第一次离散化),比如说年龄被分成了0到20岁,20到100岁。
接下来,当决策树继续生长时,之前一分为二的连续特征可能会再次被选中。比如说20到100岁这个分叉被选中,我们再次重复上面那三个步骤。这次得到的结果可能是20到35,35到100岁。
以此反复,这样一个连续变量就不停地被离散化,直到模型达到停止的条件。

6.分类变量,进行One hot编码,维度升高,如何处理?
有几种思路可以尝试的:
(1)要看这个变量背后的逻辑和意义是什么,有没有办法按照这个分类变量本身的意义进行合并。
(2)按照目标值进行合并,比如你的目标是0-1二元预测,如果这个分类变量取A的时候,90%是1;取B的时候,89%是1。那么A和B就可以合并在一起。最后再做one hot。如果你的目标是回归,也是类似的方法。
(3)把分类变量的分类按频次高低排序,累计到90%或者95%的分类都保留,最小的10%或者5%可以合并成一类。
(4)hashing trick,随机合并。

7.利用PCA降维,降到几维比较合适?
(1)如果是为了数据可视化,可以降到1维(线),2维(平面),或者3维(立体)。
(2)如果是为了建立预测模型而降维,比较常用的方法是看多少个主成分解释了多少百分比的方差,常用的比如说99%,95%,90%。
(3)另一个方法是Kaiser’s Rule,保留所有奇异值大于1的
(4)还有个类似elbow method的方法,画出主成分的个数和解释方差百分比的曲线,找出手肘的那个点。

8.除了PCA,还有什么降维的方法?
(1)High Correlation
如果两个feature的correlation大于某个阈值(自己设定的,比如0.3),就删掉其中一个。
(2)Low variance
如果一个feature的数据方差小于某个阈值(自己设定),就把它删掉。
(3)Missing
如果这一列有很多missing,就把它删掉。
(4)Random Forests
Random Forests训练之后,可以返回所有特征的重要性,我们可以选择重要性最高的一部分特征,比如20%。
(5)Stepwise selection
逐步选择特征,可以向前选择,也可以向后消去。
(6)Random Projection
类似于PCA,但是这个投影是随机的,而非像PCA那样是正交的。
(7)t-SNE
t-SNE做的是一种从高维空间到低维空间的保“距”变换。如果两个点在100维的空间里“距离”是1,我们希望找到一个映射,把这两个点映射到低维(比如2维)空间里,它们的距离也是1。这样达到的效果就是,在原空间里距离远的点,那么在新的低维空间里距离也远;在原空间里距离近的点,那么在新的低维空间里距离也近。这个所谓的“距离”,不是真正的距离,而是一种相似度。两个数据点的相似度的计算主要是依据两点的欧式距离,并且对其进行一些标准化的处理。处理时用到了t分布这个假设。这个从高维到低维的映射,首先需要设置随机初始点,然后进行优化,从而使得两个“距离”相等。

猜你喜欢

转载自blog.csdn.net/iqqiqqiqqiqq/article/details/79888179