机器学习算法
逻辑回归与最大熵
一个事件的几率(odds):指该事件发生与不发生的概率比值。对数几率是输入 x 的线性函数表示的模型,这就是逻辑回归模型。
为什么特征是离散的
- 稀疏向量内积乘法运算速度快,计算结果方便存储,容易扩展
- 离散化后的特征对异常数据有很强的鲁棒性
- 离散化后可以进行特征交叉,由M+N个变量变为M*N个变量,进一步引入非线性,提升表达能力
- 特征离散化以后,起到了简化了逻辑回归模型的作用,降低了模型过拟合的风险。
最大熵原理
最大熵原理认为选择的概率模型首先要满足已有的事实,即约束条件。在没有更多的信息情况下,那些不确定都是等可能的,最大熵原理通过熵的最大化表示等可能性。学习概率模型的时候,在所有可能的概率模型(分布)中,熵最大的模型是最好的模型。
简单粗暴的说:逻辑回归跟最大熵模型没有本质区别。逻辑回归是最大熵对应为二类时的特殊情况,也就是说,当逻辑回归扩展为多类别的时候,就是最大熵模型
KNN:k最近邻分类算法
1.如果当K的取值过小时,一旦有噪声得成分存在们将会对预测产生比较大影响,例如取K值为1时,一旦最近的一个点是噪声,那么就会出现偏差,K值的减小就意味着整体模型变得复杂,容易发生过拟合;
2.如果K的值取的过大时,就相当于用较大邻域中的训练实例进行预测,学习的近似误差会增大。这时与输入目标点较远实例也会对预测起作用,使预测发生错误。K值的增大就意味着整体的模型变得简单;
3.如果K==N的时候,那么就是取全部的实例,即为取实例中某分类下最多的点,就对预测没有什么实际的意义了;
K的取值尽量要取奇数,以保证在计算结果最后会产生一个较多的类别,如果取偶数可能会产生相等的情况,不利于预测。
朴素贝叶斯
朴素贝叶斯通过训练数据集学习联合概率分布P(x,y),具体的,学习先验概率分布和条件概率分布。朴素贝叶斯法将实例分到后验概率最大的类中,等价于0-1损失函数时的期望风险最小化。它对条件概率作出了条件独立性假设,即用于分类的特征在类确定的情况下都是条件独立的。使用极大似然估计求解,但是会出现估计概率值为0的情况,影响后验概率的计算,因而使用贝叶斯估计,在随机变量取值的频数上赋予一个正数,当为0时就是极大似然估计,常取1,这时被称为拉普拉斯平滑。
决策树
- 特征选择准则:信息增益和信息增益比
- 熵:随机变量不确定性的度量
- 信息增益:得知特征X的信息而使得Y信息不确定性减少的程度
- 信息增益比:解决信息增益准则容易偏向选择取值较多的特征,信息增益与特征A的取值数量的熵之比
ID3,ID4.5
- 选择最大信息增益作为节点特征,以所有可能取值作为子节点
- 子节点递归使用以上方法
- 直到所有特征信息增益很小或者没有特征可选
ID4.5和ID3相似,但使用了信息增益比,解决信息增益准则容易偏向选择取值较多的特征
CART
- 决策树生成:基于训练数据集生成二叉决策树,要尽量大
- 决策树剪枝:验证数据集对已生成的树进行剪枝并选择最优子树,用损失函数作为剪枝标准
回归树使用平方误差最小化准则,分类树使用基尼系数最小化。基尼指数越大表示不确定性越大。
Gini 指数 vs 熵
- Gini 指数的计算不需要对数运算,更加高效;
- Gini 指数更偏向于连续属性,熵更偏向于离散属性
剪枝
决策树算法很容易过拟合(overfitting),剪枝算法就是用来防止决策树过拟合,提高泛华性能的方法,剪枝分为预剪枝与后剪枝。
- 预剪枝是指在决策树的生成过程中,对每个节点在划分前先进行评估,若当前的划分不能带来泛化性能的提升,则停止划分,并将当前节点标记为叶节点。
- 后剪枝是指先从训练集生成一颗完整的决策树,然后自底向上对非叶节点进行考察,若将该节点对应的子树替换为叶节点,能带来泛化性能的提升,则将该子树替换为叶节点。
那么怎么来判断是否带来泛化性能的提升呢?最简单的就是留出法,即预留一部分数据作为验证集来进行性能评估
支持向量机
使用核函数变换将原空间的数据映射到新特征空间(希尔伯特空间),然后在新空间用线性分类学习方法从训练数据中学习分类模型。
常见的正定核函数:多项式核函数、高斯核函数、字符串函数。
优缺点
- 时空开销比较大,训练时间长;核函数的选取比较难,主要靠经验
- 在小训练集上往往得到比较好的结果
- 使用核函数避开了高纬空间的复杂性
集成ensemble
bagging
集成算法获得性能的提升,个体学习器应该具有独立性。虽然 “独立” 在现实生活中往往无法做到,但是可以设法让基学习器尽可能的有较大的差异。Bagging 给出的做法就是对训练集进行采样,产生出若干个不同的子集,再从每个训练子集中训练一个基学习器。由于训练数据不同,我们的基学习器可望具有较大的差异。Bagging 在预测输出进行结合时,对于分类问题,采用简单投票法;对于回归问题,采用简单平均法。
Bagging 优点
- 高效。Bagging 集成与直接训练基学习器的复杂度同阶;
- Bagging 能不经修改的适用于多分类、回归任务;
- 包外估计。使用剩下的样本作为验证集进行包外估计(out-of-bag estimate)。
随机森林
随机森林(Random Forest)是 Bagging 的一个变体。Ramdon Forest 在以决策树为基学习器构建 Bagging 集成的基础上,进一步在决策树的训练过程中引入随机属性选择。
构造过程
- 从原始训练集中使用bootstrap方法随机有放回采样选出m个样本,共进行n_tree次采样,生成n_tree个训练集
- 对于n_tree个训练集,我们分别训练n_tree个决策树模型
- 对于单个决策树模型,假设训练样本特征的个数为n,那么每次分裂时根据信息增益/信息增益比/基尼指数选择最好的特征进行分裂
- 每棵树都一直这样分裂下去,直到该节点的所有训练样例都属于同一类。在决策树的分裂过程中不需要剪枝
- 将生成的多棵决策树组成随机森林。对于分类问题,按多棵树分类器投票决定最终分类结果;对于回归问题,由多棵树预测值的均值决定最终预测结果
优点
- 由于每次不再考虑全部的属性,而是一个属性子集,所以相比于 Bagging 计算开销更小,训练效率更高;
- 由于增加了属性的扰动,随机森林中基学习器的性能降低,使得在随机森林在起始时候性能较差,但是随着基学习器的增多,随机森林通常会收敛于更低的泛化误差;
- 两个随机性的引入,使得随机森林不容易陷入过拟合,具有很好的抗噪声能力;
- 对数据的适应能力强,可以处理离散和连续的,无需要规范化;
- 可以得到变量的重要性,基于oob错误率(袋外错误率out-of-bag error)和基于 Gini 系数的变化。
- 不同决策树可以由不同主机并行训练生成,效率很高
缺点
- 在噪声较大的时候容易过拟合。
Adaboost
模型为加法模型、损失函数为指数函数、学习算法为前向分步算法的二分类学学习方法。
两个关键问题:
- 每一轮如何改变训练数据的权值或概率分布:提高那些被弱分类器分类错误的样本的权值,降低被分类正确的样本的权值,使没有正确分类的样本得到关注,分类问题被一系列的弱分类器分而治之。
- 如何将弱分类器组合成一个强分类器:采用加权多数表决的方法,加大分类误差小的弱分类器权值,使其在表决过程中起较大作用。
优缺点
- 不改变所给的训练数据,而不断改变训练数据的权值分布,使得训练数据在基本分类器的学习中起不同的作用。这是 AdaBoost 的一个特点;
- 利用基本分类器的加权线性组合构建最终分类器,是 AdaBoost 的另一个特点;
- AdaBoost 被实践证明是一种很好的防止过拟合的方法,但为什么会如此,至今没从理论上证明。
- AdaBoost 只适用于二分类问题。
提升树
加法模型与前向分步算法,决策树为基函数。对分类问题是二叉分类树(损失函数为指数函数);回归问题的决策树是二叉回归树(损失函数平方误差),当前模型拟合数据的残差。
梯度提升(GBDT)
对于一般损失函数而言,优化不易。利用损失函数的负梯度在当前模型的值作为回归问题提升树算法中的残差的近似值,拟合一个回归树。
Shrinkage
核心思想在于:Shrinkage 认为每次走一小步来逼近结果的效果,要比每次迈一大步很快逼近结果的方式更容易防止过拟合。也就是说,它不信任每次学习到的残差,它认为每棵树只学习到了真理的一小部分,累加的时候只累加一小部分,通过多学习几棵树来弥补不足。本质上,Shrinkage 为每一颗树设置了一个 weight,累加时要乘以这个 weight,但和 Gradient 没有关系,能减少过拟合。
GBDT和RF的区别
相同点:
- 都是决策树模型,最终结果都由多棵树决定
不同点:
- 组成随机森林的可以是分类树、回归树;组成 GBDT 只能是回归树;
- 组成随机森林的树可以并行生成(Bagging);GBDT 只能串行生成(Boosting);这两种模型都用到了Bootstrap的思想。
- 对于最终的输出结果而言,随机森林使用多数投票或者简单平均;而 GBDT则是将所有结果累加起来,或者加权累加起来 ;
- 随机森林通过减小模型的方差提高性能,GBDT 通过减少模型偏差提高性能。
XGBOOST
和GBDT的区别:
- 代价函数不同。传统的GBDT在优化的时候只用到一阶导数信息,XGBoost则对代价函数进行了二阶泰勒展开,得到一阶和二阶导数。XGBoost在代价函数中加入了正则项,用于控制模型的复杂度。
- shrinkage(缩减),相当于学习速率(XGBoost中的eta)。XGBoost在进行完一次迭代时,会将叶子节点的权值乘上该系数,主要是为了削弱每棵树的影响,让后面有更大的学习空间。(GBDT也有学习速率)
- 列抽样。XGBoost借鉴了随机森林的做法,支持列抽样,不仅防止过拟合,还能减少计算
- 对于特征的值有缺失的样本,XGBoost还可以自动 学习出它的分裂方向。
- XGBoost工具支持并行。XGBoost在训练之前,预先对数据进行了排序,然后保存为block结构,各个特征的增益计算就可以开多线程进行。
K-means:k均值聚类算法
是一种迭代求解的聚类分析算法,其步骤是,预将数据分为K组,则随机选取K个对象作为初始的聚类中心,然后计算每个对象与各个种子聚类中心之间的距离,把每个对象分配给距离它最近的聚类中心。聚类中心以及分配给它们的对象就代表一个聚类。每分配一个样本,聚类的聚类中心会根据聚类中现有的对象被重新计算。这个过程将不断重复直到满足某个终止条件。终止条件可以是没有(或最小数目)对象被重新分配给不同的聚类,没有(或最小数目)聚类中心再发生变化,误差平方和局部最小。
生成模型与判别模型
- 生成方法由数据学习X,Y的联合概率分布,然后求出给定X的条件概率分布,之所以被称为生成方法,是因为模型表示了给定输入X产生输出Y的生成关系,典型的生成模型有:朴素贝叶斯,隐马尔可夫。好处是收敛速度快,当存在隐变量,生成模型可以使用,判别不行。
- 判别方法直接由数据学习决策函数,或者条件概率分布作为预测模型,判别方法关心给定输入X,应该预测什么样的Y,典型的包括:K近邻,感知机,决策树,回归模型,最大熵模型,SVM,条件随机场等。好处是准确率高,可以对数据进行各种程度的抽象,定义并使用特征,从而简化学习问题。