模型

概念

model (X → Y 的映射关系)

假设空间:决策函数的集合

F = {f|Y=f(X)}

策略(从假设空间中选取最优的model)

损失函数:一次预测的好坏

风险函数:平均意义下的好坏

计算方法(计算求解最佳参数)

eg. 梯度下降

线性

回归

线性回归是监督学习方法之一,可以用来解决分类和回归问题。

它假设变量和预测目标之间存在线性关系。学习目标是求解线性函数中的各个参数

假设:Y服从高斯分布

y = p0 + p1*x11 +

p2*x12 + ... +pk*x1k + 误差

找到以上任意指标的最小值

梯度下降求解w1, w2, w3

最小二乘法

机器学习--线性回归算法的原理及优缺点 - 泰初 - 博客园

逻辑

回归

逻辑回归是用于二分类的监督算法。它通过Logistic/Sigmoid 函数来对样本属于类1的概率进行建模。

训练时期,目标在于确定Sigmoid函数中的参数。

预测时,对于一个新的x, 如果逻辑函数给出的概率值大于某个阈值(比如0.5),则认为x属于类1

Y服从伯努利分布(丢偏心硬币)
----伯努利分布:对于随机变量Y有, 参数为p(0<p<1),如果它分别以概率p和1-p取1和0为值: Pr(Y=1)=p; Pr(Y=0)=1-p;
----概率函数:f(y|p) = p^y*(1-p)^(1-y)

优点:

  • 可解释性强,根据权重的不同可解释特征是否重要
  • 工程化简单

缺点:

不能使用交叉特征,表达能力弱,信息损失多,甚至出现“辛普森悖论

辛普森悖论:在对样本集合进行分组研究时,在分组比较中占优势的一方,在汇总实验中反而是劣势的一方
比如视频推荐中,如果使用"性别”+“视频ID" 的组合特征计算点击率,和只用视频ID单一特征,会有不同的结果。因为汇总试验对高维特征进行了合并,损失了大量的信息

为何逻辑回归选择交叉熵函数作为损失函数,而不是MSE?

  1. 交叉熵函数可以衡量模型的预测值和真实值的差距大小,差距越小代表预测值和真实值越接近。这论证了它作为损失函数的可行性
  2. 在计算方法上,我们使用的是梯度下降。逻辑回归模型使用的时候逻辑函数sigmoid。
    1. MSE:损失函数对w和b 的导数中含有对逻辑函数的偏导项 。 而逻辑函数在大部分的定义域上的导数都接近于0,这就会导致参数更新得非常慢

    2. 交叉熵:损失函数对w和b 的导数中不包含逻辑函数的导数项。权重的更新受  影响,受到误差的影响,所以当误差大的时候,权重更新快;当误差小的时候,权重更新慢。这是一个很好的性质

交叉熵函数

用极大似然估计构建出损失函数

1.交叉熵函数与最大似然函数的联系和区别?

区别:交叉熵函数使用来描述模型预测值和真实值的差距大小,越大代表越不相近;似然函数的本质就是衡量在某个参数下,整体的估计和真实的情况一样的概率,越大代表越相近。

联系:交叉熵函数可以由最大似然函数在伯努利分布的条件下推导出来,或者说最小化交叉熵函数的本质就是对数似然函数的最大化。

K近邻

方法

定义:k近邻法是监督学习,分类和回归

基本做法:

分类时,对新的实例,根据其k个最近邻的训练实例的类别,通过多数表决方式进行预测。

没有显示的函数表达式,对应着训练数据集对特征空间的划分

确定了k, 距离,分类决策 等三要素,也就确定了模型

k : 交叉验证实现 (k越大,模型越简单)

距离:

分类决策规则:多数表决(对应于经验风险最小化)

通过kd树来快速搜索k个最近邻点

朴素

贝叶

斯法

朴素贝叶斯是监督学习中的分类方法

训练过程中,首先基于特征条件独立假设学习输入输出的联合概率分布 P(X,Y) = P(X)P(X|Y)

然后基于此模型,在预测阶段,对给定的输入x,利用贝叶斯定理求出后验概率P(Y|X)最大的类y

优点:高效且易于实现

缺点:分类性能不一定高

模型:P(X,Y)

训练阶段:

预测阶段:

预测目标:求得值最大的P(Y|X)

P(Y|X) = P(X,Y)/P(X) 推断出 P(X,Y)

所以,预测目标是求得值最大的P(X,Y), 而

将输入x分到后验概率最大的类y

后验概率最大等价于0-1损失函数时的期望风险最小化

极大似然估计作为概率估计方法
决策树

监督学习,分类+回归

决策树是用于一种用于分类和回归的监督性方法。它基于特征对实例进行分类,并且最终生成一个树形结构。

训练的过程中,从根节点开始,通过某些准则来选取局部最优的特征,将训练集进行分割,使得分割后的子集有最好的分类,以此递归地生成决策树。树中的叶子节点对应于训练集的子集,对应于特定的输出值Y。回归问题中,Y是这个叶子节点中所有实例的均值,分类问题中,Y是叶子节点里大部分实例所属的类。

预测过程中,对于新来的实例,从根节点开始,根据树中得节点对应得条件,最后会分配到一个叶子节点,以该叶子节点对应的Y作为该新实例的预测值

目标:构建一个和训练数据拟合好并且复杂度小的决策树

优点:可读性好,分类速度快

连续型特征处理

假设训练样本集合D中有n个样本,考察对连续属性a的最佳划分点。
若属性a在这n个样本中有m个不同的取值(m<=n),对这m个值两两之间取中点,可获得m-1个中点作为候选划分点。

选择过程
接下来的选择最佳划分点过程和离散属性的虚选择过程类似,以基尼系数或信息增益作为度量,选择使度量值最大的候选划分点作为最佳划分点。

条件概率模型 P(Y|X)

X: 表示特征的随机变量

Y:表示类的随机变量

各叶子节点上的条件概率通常偏向某一类,决策树分类时将该节点的实例强行分到条件概率大的一类去

算法

分类准则

ID3

信息增益(大)

Gain(D,a) = Ent(D) - Ent(D|A)

熵Ent(D):度量样本集合D纯度的指标,Ent(D)越小,D的纯度越高

确定了特征A后对数据D进行分类的带来的纯度的提升

信息增益越大,特征A进行划分带来的“纯度提升”越大

选择方式:每次分类的时候,选择信息增益最大的特征
C4.5

信息增益比(大)

Gain_ratio(D,A) = Gain(D) /IV(A)

信息增益越大,特征A进行划分带来的“纯度提升”越大, 且消除了取值数目较多的属性的偏好

先从候选特征集种找出信息增益Gain 高于平均水平的特征,再从中选择信息增益比Gain_Ratio最大的特征

CART

classification and regression tree

基尼指数(小)

基尼指数越小,特征A进行划分后带来的”纯度提升“越大

以划分后基尼指数Gini_index最小的特征作为最优划分特征

损失函数:正则化的极大似然函数

策略:以损失函数为目标函数的最小化er f r

第一项:所有叶节点熵之和(熵越小,每个节点的纯度越高,分类的确定性越高),训练数据的预测误差

第二项:正则项,避免叶子节点过多,树的结构太复杂而导致的过拟合

树的生成:局部最优

树的剪枝:全局最优

随机

森林

随机森林是一种用于分类和回归的监督性方法。

随机构建多棵决策树,预测阶段,对于输入x,回归问题中,Y是所有决策树的均值,分类问题中,Y是大部分决策树所属的类。

优点:

1.随机性的引入,不容易过拟合

2.能够处理很高维度(feature很多)的数据,并且不用做特征选择(因为每一步的分割,特征子集都是随机选取的),

3.对数据集的适应能力强:既能处理离散型数据,也能处理连续型数据,数据集无需规范化。(因为树的构建是一个不断寻找最佳分裂点的过程,没用使用梯度下降。同时对数值进行缩放并不会影响分裂点的位置)

(梯度下降中,归一化后的数据,所有的特征量纲都有相同的轴,特征空间就编程一个圆,提高收敛速度。)

4.训练速度快,还可以得到重要性排序

随机性体现在:

1. 样本采样:bagging每次有放回的随机选择N个样本(每次随机选择一个样本,然后返回继续选择)。

这选择好了的N个样本用来训练一个决策树,作为决策树根节点处的样本。

2. 特征采样:每个节点分裂的时候,随机从全量属性中抽取出m个,

然后从这m个属性中采用信息增益等方式来选择一个属性作为节点的分裂属性

调参方向:

sklearn.ensemble.RandomForestClassifier — scikit-learn 1.0.2 documentation

max_depth = 10, num_tree = 200, max_depth = 15

参数

含义

推荐值

max_depth决策树的最大深度10-100
n_estimators森林中树木的棵树
max-leaf-nodes决策树的叶子数
max_features

决策树分裂时考虑的最大特征数

也可接受整数

log2"意味着划分时最多考虑log2N个特征

"sqrt"或者"auto"意味着划分时最多考虑N−−√N个特征

越小,避免过拟合

7
max_leaf_nodes叶子节点数
min_samples_leaf叶子节点最小样本数20
多数表决法

Ada

Boost

是一种提升方法,目的是把简单易学但是正确率低的弱提升算法提升为准确率高的强提升算法。

用于分类

学习方式:

1.通过迭代每次学习一个基本分类器。每次迭代中,都改变训练数据的权值/概率分布,提高那些被前一轮弱分类器错误分类样本的权值,降低被正确分类样本的权值

2.将弱分类器组合成强分类器:加权多数表决,加大分类误差率小的弱分类器的权重,减小分类误差大的弱分类器的权重。

gbdt

gbdt是一种用于分类和回归的监督性方法。

它是以CART为基本分类器的提升方法。

他通过迭代学习一系列的树,回归问题中,每次迭代生成的树学的是之前所有树结论和残差,最后返回所有树的集合。

比如A的真实年龄是18岁,但第一棵树的预测年龄是12岁,差了6岁,即残差为6岁。那么在第二棵树里我们把A的年龄设为6岁去学习,如果第二棵树真的能把A分到6岁的叶子节点,那累加两棵树的结论就是A的真实年龄;如果第二棵树的结论是5岁,则A仍然存在1岁的残差,第三棵树里A的年龄就变成1岁,继续学习。

提升树的模型:决策树的加法模型

T:决策树

sigma_m: 第m颗决策树的参数

M:树的个数

一共训练M轮,每轮产生一个弱分类器 T

回归问题:MSE

分类问题:指数损失函数 

L(Y| f(X)) = exp[-yf(x)]

前向分布算法:

从前向后,每一步都只学习一个基函数及其系数,也就是每次都只优化当前的损失函数。

xg-

boost

  • 传统GBDT以CART作为基分类器,xgboost还支持线性分类器,这个时候xgboost相当于带L1和L2正则化项的逻辑斯蒂回归(分类问题)或者线性回归(回归问题)。
  • 传统GBDT在优化时只用到一阶导数信息,xgboost则对损失函数进行了二阶泰勒展开,同时用到了一阶和二阶导数。顺便提一下,xgboost工具支持自定义代价函数,只要函数可一阶和二阶求导。
  • xgboost在损失函数里加入了正则项,用于控制模型的复杂度。正则项里包含了树的叶子节点个数、每个叶子节点上输出的score的L2模的平方和。从Bias-variance tradeoff角度来讲,正则项降低了模型的variance,使学习出来的模型更加简单,防止过拟合,这也是xgboost优于传统GBDT的一个特性。
  • Shrinkage(缩减),相当于学习速率(xgboost中的eta)。每次迭代,增加新的模型,在前面成上一个小于1的系数,降低优化的速度,每次走一小步逐步逼近最优模型比每次走一大步逼近更加容易避免过拟合现象;
  • 列抽样(column subsampling)。xgboost借鉴了随机森林的做法,支持列抽样(即每次的输入特征不是全部特征),不仅能降低过拟合,还能减少计算,这也是xgboost异于传统gbdt的一个特性。
  • 忽略缺失值:在寻找splitpoint的时候,不会对该特征为missing的样本进行遍历统计,只对该列特征值为non-missing的样本上对应的特征值进行遍历,通过这个工程技巧来减少了为稀疏离散特征寻找splitpoint的时间开销
  • 指定缺失值的分隔方向:可以为缺失值或者指定的值指定分支的默认方向,为了保证完备性,会分别处理将missing该特征值的样本分配到左叶子结点和右叶子结点的两种情形,分到那个子节点带来的增益大,默认的方向就是哪个子节点,这能大大提升算法的效率。
  • 并行化处理:在训练之前,预先对每个特征内部进行了排序找出候选切割点,然后保存为block结构,后面的迭代中重复地使用这个结构,大大减小计算量。在进行节点的分裂时,需要计算每个特征的增益,最终选增益最大的那个特征去做分裂,那么各个特征的增益计算就可以开多线程进行,即在不同的特征属性上采用多线程并行方式寻找最佳分割点。

xgboost 参数

参考范围

booster

gbtree:基于树的模型

gbliner:线性模型

gbtree
silent

0: 输出日志

1:不输出

0

eta

[default=0.3]

学习率

大学习率可能无法收敛

小学习率可以使得后期学习更仔细

0.01-0.2

max_depth

[default=6]

每棵树的最大深度

越小,避免过拟合

3-10
max_leaf_nodes

每棵树的最大叶子节点数

降低,避免过拟合

gamma

[default=0]

叶子节点分裂所需要达到的最小损失减少

越大,避免过拟合

subsample

[default=1]

样本采样。

subsample =0.5, 说明每次只用一半的样本量来生成迭代树

越小,避免过拟合

0.5-1

colsample_bytree

[default=1]

列采样

生成树的特征

0.5-1

colsample_bylevel

[default=1]

列采样

树中节点分裂的时候,可选的特征的采样

lambda

L2 regularization term on weights

越大,避免过拟合

alpha

L1 regularization term on weights

越大,避免过拟合

objective

损失函数的选择
binary:logistic

二分类的逻辑回归

更多推荐

有监督学习模型总结