1、前言

自己总结的一些问题的答案,都是个人拙见,算是一个记录,防止自己遗忘,如果有错误,欢迎指正。

2、内容

2.1 线性模型

Sigmoid的优缺点

优点:Sigmoid能将数据压缩在0,1之间,适合于概率预测,其次方便求导

缺点:sigmoid()函数存在饱和区,在反向传播时候容易造成梯度消失

SVM多分类怎么处理?

SVM本身是为了二分类问题实际的,处理多分类问题则需要构造合适的分类器

有一种直接的办法是修改目标函数

将多个分类面的参数求解合并成一个最优问题,通过求解这个问题实现多分类,但缺点是计算复杂度高

第二种是构建多个二分类器,常用的有一对多和一对一

  • 一对多就是在训练时将某类样本归于一类,别的样本归于另一类,一次构造n个svm模型,分类时就将样本分为最可能那一类
  • 一对一就是对任意两个类别样本设计一个SVM,这样k个样本就需要设计k(k-1)/2个SVM,对样本分类时,得票最多的类别就是该样本的类别,libsvm多分类就是这么实现的

还有层次SVM,就是所有类别分为两子类,两个子类继续划分知道得到一个单独的类

2.2 聚类模型

Kmeans算法流程

  1. 根据设定的聚类数,随机从数据集中选择k个样本作为初始聚类中心
  2. 计算每个对象到聚类中心的距离,如果样本距离某个聚类簇最近,则重新划分
  3. 然后计算每个簇中样本的平均位置,选择该点为聚类中心
  4. 重复上述过程

2.3 集成学习

为什么Boosting降偏差,Bagging降方差?

从计算角度而言

从方差的计算我们可以知道,如果子模型完全独立,bagging后可以显著降低方差,如果子模型完全相同,则难以降低方差。

因为bagging采用的是自助采样法,其子样本集有一定相似性,且使用的是同一类模型,因此各模型之间的偏差和方差近似,通过计算可知bagging后的偏差和单个子模型接近,一般来说不能显著降低偏差。而bagging的子模型则具有一定的相关性,所以可以在一定程度上降低方差。

对于boosting,它使用的是前向分步算法和加性模型去优化loss,这就导致了boosting的子模型之间强相关,我们知道如果子模型高度相似,是难以降低方差的,但是由于其是串行地最小化loss,其偏差是会逐渐降低的,就通过多个弱分类器加权相加所得的强分类器来降低偏差,达到不错的拟合效果。

从模型思想的角度而言

一般而言,简单模型的方差低而偏差高,复杂模型的方差高而偏差低。

Boosting的目的是为了提高模型拟合程度,一般采用的是弱分类器来组合而成强分类器,可以认为是在不断降低偏差,而bagging的简单投票、简单平均法是为了增加其抗干扰能力,于使用多个稍强的模型进行并行训练,可以认为是在降低方差