内容主要来自Aurelien Geron《Hands-on Machine Learning withi Scikit-Learn&TensorFlow》
1. 如果训练集超过百万个特征,你需要选择什么线性回归算法进行训练?
答:使用随机梯度下降(SGD)或者小批量梯度下降(mini-batch gradient descent),如果内存允许,甚至也可以使用批量梯度下降(batch gradient descent),但是由于计算复杂度随特征数增加而快速上升(比二次方还高),因此,无法使用标准方程求解方法。
2. 如果你的训练集里特征数值大小迥异,什么算法可能会收到影响?
答:如果训练集里特征数值大小迥异,成本函数将呈细长碗状,这将导致梯度下降计算方法需要花费非常多的时间进行收敛。要解决这个问题,需要在训练模型之前对特征进行缩放。但是使用标准方程方法,不使用特征缩放也能正常工作。
3. 训练逻辑回归模型时,梯度下降是否会困于局部最小值?
答:不会,因为他的成本函数是凸函数
4. 假设训练的时候足够长,所有的训练模型是不是会产生相同的模型?
答:如果优化问题是凸的(例如线性回归或者逻辑回归),并且学习率也不是太高,那么所有梯度下降算法都可以接近全局最优,最终生成都模型都非常接近。但是除非逐渐降低学习率,否则随机梯度下降和小批量梯度下降方法都不会真正都收敛,而是不断在全局最优都附近波动,即时运行时间足够长,这些梯度下降算法产生都模型结果仍然会有轻微的不同。
5. 如果使用批量梯度下降,并且每一轮训练都绘制其验证集误差,如果发现验证误差持续上升,可能发生了什么?如果解决这个问题?
答:如果是验证集误差开始每轮上升,训练误差也开始上升,那么可能是学习率设置太高,算法开始发散,显然需要降低学习率了。但是,如果训练集误差没有上升,那么模型很可能是过拟合,应该立刻停止训练。
6. 当验证误差开始上升时,立即停止小批量梯度下降算法训练是否为一个好注意?
答:无论是小批量梯度下降还是随机梯度下降,由于它们当随机性,使得它们不能保证在每一步迭代中都取得进展。所以,如果在验证集误差刚开始上升就停止训练,则很可能会在达到最优解之前就过早停止了训练。更好都方法是定时保持模型,当较长一段时间都没有改善时,可以恢复到保存到最优模型。
7. 哪种梯度下降算法能最快达到最优解附近?哪种会收敛?如何使其他算法同样收敛?
答:对于大量训练数据来说,随机梯度下降算法对训练迭代最快,因为它一次只考虑一个训练实例,通常来说,会最快到达全局最优附近。但是,只有批量梯度下降经过足够长的时间训练才能真正的收敛。对于随机梯度下降和小批量梯度下降,除非逐渐降低学习率,柔则一致围绕最优值上下波动。
8. 假设你使用多项式回归,绘制出学习曲线,你发现训练误差和验证误差之间存在很大的差距,发生了什么?哪三种方法可以解决这个问题?
答:如果发现训练误差和验证误差之间存在很大的差距,可能是因为模型对训练集过拟合。解决这个问题的3个方法是:
1)对多项式进行降阶,自由度越低的模型,过拟合的可能性越低
2)对模型进行正则化,例如在成本函数中增加l2(岭回归)或l1(Lasso回归)惩罚项,同样可以降低模型对自由度
3)可以尝试扩大训练集
9. 假设你使用的是岭回归,你注意到训练误差和验证误差几乎相等,并且非常高。你认为模型是高方差还是高偏差?你应该提高还是降低正则化超参数α?
答:这种情况可能是对训练集拟合不足,意味着偏差较高,应该尝试降低正则化超参数
10. 你为何要使用
答:有正则化的模型通常比没有正则化的模型效果要好,所以应该优选选择岭回归而不是普通的线性回归。此外,标准方程需要对矩阵求逆,但是矩阵并不总是可逆的。相反,岭回归矩阵永远是可逆的。
Lasso回归使用l1惩罚函数,往往倾向于将不重要的特征权重重降为零。这将生成一个除了最重要的权重植物,其他所有权重都为零都稀疏模型。这是自动执行特征选择的一种方法,如果你觉得只有少数几个特征是真正重要的,这不失为一个非常好的选择,但是当你不确定时,应该选择使用岭回归。
弹性网络比Lasso更受欢迎,因为某些情况下,Lasso可能产生异常表现(例如当多个特征强相关,或者特征数量比训练集实例多时),并且弹性网络会额外添加一个超参数来对模型进行调整。如果你想用Lasso,只需要将弹性网络对l1_ratio设置为接近1即可。
11. 如果你想将图片分为为户外/室内以及白天/黑夜,你应该使用两个逻辑回归分类器还是一个Softmax回归分类器?
答:应该使用两种逻辑回归分类器,因为户外/室内以及白天/黑夜的分类并不是排他(同一种类型的分类)。
12. 如何处理过拟合问题?
答:1)减少特征数量
2)正则化:保留所有特征,减少参数的量级
3)如果是多项式拟合,对多项式进行降阶,自由度越低的模型,过拟合的可能性越低
4)扩大训练集的规模
1. 支持向量机的基本思想是什么?
答:是寻找一个超平面将两类数据分开,该超平面到两类样本之间的距离最大(间隔最大),它的目的是是决策边界之间的间隔最大化,从而分隔出两个类别的训练实例。SVM执行软间隔分类时,实际上是在完美分类和拟合最宽决策边界间隔之间进行妥协(即允许少数实例落在街道上)。还有一个关键点是在训练非线性可分数据集时,记得使用核函数。
2. 什么是支持向量?
答:支持向量机完成训练后,位于“街道”之上的实例被称为支持向量,包括在边界上的实例。决策边界完全有支持向量决定,非支持向量的实例(街道之外的实例)完全没有任何影响。计算预测结果只会涉及到支持向量,而不涉及整个训练集。
3. 使用SVM时,对特征进行缩放为什么很重要?
答:SVM寻找最大的决策间隔,如果不缩放,SVM会倾向于忽略值小的特征。
4. SVM分类器在对实例进行分类时,会输出信心分数么?概率呢?
答:SVM可以输出测试样例与决策边界之间的距离,你可以将其作为信心分数。但这个分数不能直接转换为类别的概率。如果创建SVM时,在SK-learn中设置probability=True,那么训练完成后,算法将使用逻辑回归对SVM分数进行校准,从而得到概率值。
5. 如果训练集有上千万个实例和几百个特征,你应该使用SVM原始问题还是对偶问题来训练模型?
答:这个问题只适用于线性SVM,非线性SVM只能使用对偶问题。线性SVM,原始问题的计算复杂度和样本数量成正比,而对偶问题计算复杂度介于样本数量的平方至立方。所以,如果训练实例有上千万个,一定要使用原始问题,对偶问题会非常慢。
6. 假设你用RBF核训练来一个SVM分类器,看起来对训练集拟合不足,你应该提升还是降低gama?C呢?
答:这可能是由于过度正则化导致,应该提高gama或C,或者同时提升二者。
1. 如果训练集有100万个实例,训练决策树无约束的大致深度是多少?
答:一个包含m个叶节点的均衡二叉树的深度等于log2(m)的四舍五入。通常来说,二元决策树训练到最后答题都是平衡的,不过不加以限制,最后平均每个叶节点一个实例(前提是属性和属性取值足够多能够进行区分),因此如果训练一个100万实例的决策树,那么决策树深度约等于log2(100万)~20层(实际上会更多一些,因为决策树通常不会那么完美平衡)
2. 通常来说,子节点的基尼不纯度是高于还是低于其父节点?是通常更高/更低还是永远更高/更低?
答:一个子节点的基尼不纯度一般低于其父节点,这是通过CART训练算法的成本函数确定的。该算法分裂每个节点的方法,就是使其子节点的基尼不纯度的加权之和最小。但是,如果一个子节点的不纯度远小于另一个,那么也有可能使另一个子节点的基尼不纯度比其父节点高,只要那个不纯度更低的子节点能够抵偿另外一个子节点增加即可。举例:假设父节点包含4个A类别实例和一个B类别实例(A,B,A,A,A),其基尼不纯度Gini=1-(1/5)^2-(4/5)^2=0.32。假设通过某一个属性可以将父节点拆分为A,B和A,A,A两个子节点,其中第一个子节点的基尼不纯度=1-(1/2)^2-(1/2)^2 = 0.5,高于父节点,第二个子节点的基尼不纯度=1-(3/3)^2 = 0,加权基尼不纯度Gini=2/5*0.5 + 3/5 * 0=0.2,要低于父节点,因此这是可以进行节点拆分的。
3. 如果决策树过度拟合训练集,减少max_depth是否为一个好主意?
答:减少max_depth可能是一个好主意,因为这会限制模型,使其正则化。
4. 如果决策树对训练集拟合不足,尝试缩放输入特征是否为一个好主意?
答:决策树的优点之一是它并不关心特征缩放,因此,如果决策树对训练集拟合不足,尝试缩放输入特征没有用处。
5. 如果包含训练集100万个实例上训练决策树需要1个小时,那么在包含1000万个实例的训练集上训练决策树,需要多少时间?
答:决策树的训练复杂度为O(n * m*log2(m)),其中n为特征数量,m为样本数量,如果不考虑限制,假设100万个实例训练复杂度为O(n * m*log2(m)),则1000万个实例的训练复杂度为O(n * 10m*log2(10m)) = 10*log(10m)/log(m)~11.7小时
6. 如果训练集上有100 000个实例,设置presort=True会加快训练么?
答:只有当数据集实例小于数千个时,设置presort=True会加快训练,如果训练集上有100 000个实例,设置presort=True反而会降低训练速度。
1. 如果在完全相同的训练集上训练了5个不同的模型,并且他们都达到了95%都准确率,是否还有机会结合这些模型来获得更好都结果?如果可以,该怎么做?如果不可以,为什么?
答:可以将这5个模型组合为一个集成学习模型,这通常会带来更好的效果,因为这会降低模型预测的方差。如果是使用不同的模型(比如SVM,决策树,Logistic回归分类等),通常效果更好,如果他们是在不同的训练集上完成训练,那就更好了,但如果不是,只要模型不同,这个集成仍然有效。
2. 硬投票分类器和软投票分类器有什么区别?
答:使用多个模型集成进行预测时,硬投票分类器统计每个分类器的投票,选择得票最多的类别作为最终的分类结果,而软投票分类器会计算每个预测器预测每个分类的概率,将概率进行平均,结果为平均概率最高的类别,这会给预测概率高(信心更高)的分类器更大的权重,通常比硬投票分类器效果更好,当然,这要求分类器能够输出分类的概率(对SK-learn中SVM,需要设置probability=True)
3. 是否可以通过在多个服务器上并行来加速bagging集成训练?pasting集成呢?boosting集成呢?随机森林或者stacking呢?
答:可以通过在多个服务器上并行来加速集成训练对方法:bagging,pasting,随机森林,因为集成中的每个预测器都是独立工作的。
boosting集成每个预测器都是基于前序的结果,因此训练过程必须是有序的,将其分布在多个服务器上没有意义;
stacking集成,在某个指定层的预测器是之间是独立的,可以在多台服务器上并行训练,但是某一层的与其妻只能在其前一层的预测器全部训练完成之后,才能开始训练。
4. 包外评估的好处是什么?
答:可以对bagging集成中每个预测器使用其未经训练对实例进行评估,不需要额外对验证集,就可以对集成进行相当公正的评估,训练使用的实例越多,集成的性能可以略有提升。
5.
1.为什么通常使用逻辑回归分类器而不是经典感知器(即使用感知器训练算法训练单层阈值逻辑单元)?如何调整感知器以使其等于逻辑回归分类器?
答:经典的感知器只有在数据集是线性可分的情况下才会收敛,并且不能估计分类的概率。相反,逻辑回归分类器及时在庶几集不是线性可分的情况下也可以很好的收敛,而且还能输出分类的概率。
如果将感知器的激活函数修改为逻辑激活函数(或者如果有多个神经元的时候,采用softmax激活函数),然后使用梯度下降来训练它(或使用成本函数最消化的一些其他优化算法,通常是交叉熵法),那么它就会变成一个逻辑分类器了
2.为什么逻辑激活函数(sigmoid函数)是训练第一个MLP的关键要素?
答:因为它的导数是非零的,所以梯度下降是可以持续的,当激活功能是一个阶梯函数时,渐变下降就不能持续了,因为这时候根本没有斜率。
3.常见的激活函数有哪些?试着画出其形状
答:阶跃函数,逻辑(sigmoid)函数,双曲正切(tanh)函数、线性整流(ReLU)函数
4.假设你有一个MLP,该MLP是有一个输入层和10个直通神经元组成,随后是一个包含了50个神经元的隐藏层,最后是3个神经元组成的输出层。所有的人工神经元都使用ReLU激活函数
a. 输入局长X的形状是什么? m X 10,其中m是训练批次数目
b. 隐藏层的权重向量Wh及其偏置向量bh的形状是什么?Wh形状 10 X 50,bh 长度为50
c. 输出层的权重向量Wo及其偏置向量bo的形状是什么?Wo形状 50 X 3,bo 长度为3
d. 输出矩阵Y的形状是什么? Y的形状 m X 3
5. 1)如果要将电子邮件分类为垃圾邮件和正常邮件,你需要在输出层中设置多少个神经元?使用什么激活函数?2)如果你想解决MNIST问题,你需要在输出层中设置多少个神经元?使用什么激活函数?3)如果是第二章的预测房价呢?
答:1)分类垃圾邮件和正常邮件只需使用一个神经元,例如计算出电子邮件是垃圾邮件答概率,估算概率时,通常会使用逻辑激活函数(Sigmoid);2)MNIST问题需要将样本预测为10个分类中的某一个,通常需要10个神经元,并且必须使用处理多个分类的softmax激活函数替代逻辑函数,为每个分类输出一个概率。3)如果像让神经元像第二章那样预测房价,输出层只需要一个神经元,且无需使用激活函数
6. 试列举在基本的MLP训练中的超参数?如果出现过拟合,如何调整这些超参数?
答:隐藏层数、各隐藏层神经元个数、激活函数,输出层的激活函数等。一般情况下ReLU激活函数是隐藏层中的一个较好的默认值,对于输出层,通常需要二分类的逻辑激活函数,多分类的softmax激活函数,在做回归任务是无需使用任何激活函数。
MLP如果过拟合,可以尝试减少隐藏层的数量,并减少每个隐藏层的神经元的个数。