支持向量机: 进行线性或近似线性数据的分类
核函数:将低维数据映射到高维,解决低维数据非线性问题
决策树:模仿决策过程,常用作组合模型中特征提取
随机森林:相互独立的多个决策树组合,提升模型效果
GBTs:以最优方式提升模型预测结果
支持向量机
在支持向量机模型里,一个数据点与分离直线的距离表示模型对这个点的预测置信度,离得越近,模型越没把握。
对于线性可分数据,支持向量机有不错的分类效果,但大部分数据都是非线性可分,这时需要加入损失项,支持向量机可抽象表示成这样的一个优化问题
将这个优化问题转换成不带约束条件的形式为
其中,是模型的预测损失,称为hinge loss,是由一个线性损失函数外套一个非线性变换构成的,这个非线性部分就是线性整流函数,即ReLU。
是模型的惩罚项,避免出现过拟合问题。C是超参数,较小的C值表示模型将注重类别中心的数据,称为soft margin;较大的C值表示模型注重靠近超平面的“异常点”数据,称为hard margin。
支持向量机与逻辑回归的区别在于:支持向量机使用超平面附近的数据,而逻辑回归使用全部数据。
核函数
不需要知道空间变换的具体形式,将低维空间的数据映射到高维,减少计算量,解决非线性低维数据问题。
常用的核函数有:
线性核:
多项式核:
sigmoid核:
拉普拉斯核:
高斯核(RBF):
核函数对线性变换不稳定,本质是内积运算对线性变换不稳定。
拉格朗日对偶
工程中,经常将最优化问题转换成对偶问题进行求解,支持向量机的对偶问题如下
参数估计公式:
预测公式:
决策树
决策树的模型有许多,这里讨论CART(classification and regression trees),通过构造二叉树来解决分类和回归问题。
节点的不纯度:该指标的取值区间为[0,1],用于衡量节点上数据类别的单一程度,数值越接近0,表示数据类别越单一。常用的指标有:
Gini:
Cross entropy:
Misclassification:
代码实现
from sklearn.tree import DecisionTreeClassifier
model=DecisionTreeClassifier(criterion="gini", max_depth=2)
model.fit(data[["x1","x2"]],data["y"])
前剪枝:在决策树生成过程中,通过一些阈值限制决策树的生长
后剪枝:在决策树生成之后,将其中节点不纯度下降不明显的子树减掉
随机森林
由n个决策树组成,模型的预测结果等于各决策树结果的某种“加权平均”
对于分类问题:最终结果等于在决策树预测结果中出现次数最多的类别
对于回归问题:最终结果等于决策树预测结果的平均值
引入决策树随机性的3个方面:
- 对每个决策树,从原始训练集中随机选取训练该决策树的数据
- 在划分节点时,并不遍历全部自变量,而是随机挑选其中的一部分作为候选自变量
- 在选择自变量的划分阈值时,并不求得最优的解,而是随机构成一个候选阈值集合,并从中选取效果最优的(子节点不纯度之和最低)
random forest embedding将原本低维度的原始数据映射到高维空间,常配合其他监督式学习模型一起用
GBTs
假设训练数据为,模型算法如下
(1) 定义模型在数据点i的损失函数为
(2) 定义初始模型,即被预测值的平均值
(3) 根据损失函数梯度,得到新的训练数据,并用新的数据得到决策树模型
(4) 更新模型得到,其中参数
不是参数不是超参数,表示模型更新的力度
(5) 不断重复(3)和(4),得到迭代公式,其中训练数据为
,
GBTs通过修正已有模型的错误来提升预测效果,理论基础是梯度下降。