基础概念
先验概率与后验概率
条件概率(似然概率)
- 一个事情发生后,另一件事发生的概率
- P(X|Y)表示Y发生的条件下,X发生的概率
先验概率
- 事情发生前的预判概率
- 可以是基于历史数据的统计,也可以是主观观点给出的
- 一般是单独事件发生的概率
后验概率
- 基于先验概率球的的反向条件概率,若P(X|Y)为正向,则P(Y|X)为反向
偏差与方差
概念:
- 偏差是预测值的期望与真实值的差距,差距越大,越偏离真实数据
- 方差是预测值与期望值的距离,距离越大,代表分布越离散
偏差与方差用于衡量模型泛化误差的两个方面:
- 偏差用于描述模型的拟合能力
- 方差用于描述模型的稳定性
导致偏差和方差的原因:
- 偏差通常是对学习算法做了错误的假设,比如模型复杂度不够,通常偏差可以在训练误差上体现
- 方差通常是优于模型复杂度过高造成,导致过拟合,通常方差体现在测试误差上
深度学习中的偏差与方差:
- 神经网络的学习能力很强,所以训练误差一般较小
- 神经网络过拟合会导致测试误差偏大
- 降低模型的泛化误差- > 正则化方法
损失函数、代价函数、目标函数
损失函数:Loss Function(希望最小化)
在一个样本上的误差
代价函数:Cost Function
整个training set中的误差平均,即损失函数的平均
任何能表示预测值与真实值的误差的函数都可
目标函数:(最大化/最小化不一定)
最终需要优化的函数,包括经验风险(比如代价函数)与结构风险(比如担心过拟合,用于正则化的项)
梯度下降:
比如模型是h(θ)=θTx,优化θ至代价最小的一个方法是梯度下降
梯度下降指代价函数对θ求偏导
正则化方法
防止过拟合,提高泛化能力
三类原始数据
training data:计算梯度、更新权重
validation data:实际上作用是防止过拟合,确定early stopping的epoch大小、learning rate等
testing data:衡量模型的好坏
L1&L2范数
通过修改代价函数来实现
L1和L2的区别:
- L1通过在原目标函数后加上所有特征系数的绝对值的和实现正则化
- L2通过在原目标函数后加上所有特征系数的平方和来实现正则化
L1和L2的功能:
- L1更适合特征选择
- L2更适合防止模型过拟合
Dropout
修改神经网络本身,随机删除隐层单元
数据集增广
生成模型与判别模型
监督学习的任务模型通常是一个决策函数或一个条件概率分布:
- 决策函数:输入X返回Y,Y再与一个阈值作比较,然后根据比较结果判别X的类别
- 条件概率分布:输入X,返回X属于每个类别的概率,概率最大的为X的类别
- 生成模型:学习X和Y的联合概率分布P(X,Y),然后根据贝叶斯公式求得条件概率P(Y|X)
- 判别模型:直接学习条件概率分布P(Y|X)
常见生成模型与判别模型:
- 生成模型:HMM、朴素贝叶斯
- 判别模型:LR、SVM、CRF、KNN、一般的神经网络
标准化、归一化、中心化
- 归一化normalization 有最大最小值归一、平均归一、非线性归一,作用是把数据压缩到[-1,1](平均归一)或者[0,1](最大最小归一)
- 标准化standardization不像归一化一样只依据最大值与最小值计算,它根据平均值与标准差计算z-score,与数据整体分布有关
- 中心化就是目标值就是原值减去平均值,操作之后数据的平均值为0
- 标准化/中心化的作用:有些模型必须用标准化/归一化,如KNN因为要求欧式距离,如果有的值量级过大,就需要把它压缩到与其他特征可比。如SVM,如神经网络,如PCA,如梯度下降加快收敛
数据不平衡怎么解决
- 欠采样法
- 过采样法
- 阈值移动方法
衡量模型的指标
- 回归任务常用均方误差
- 错误率(分类错误的样本数占样本总数的比例)、精确度(1-错误率)
- 查准率(Precision)=TP/(TP+FP) 【分母是预测为1】 选出的瓜中好瓜占比高,一查一个准
- 查全率(Recall)=TP/(TP+FN) 【分母是真实为1】尽可能把好瓜都选上,查得全
- P-R图横轴查全率、纵轴查准率,比较两个模型得P-R,出发点是查准率查全率双高,比较他们的平衡点BEP(查准率=查全率的取值)。然而BEP还是更简化了,我们用F1(PR的调和平均),Fβ(PR的加权调和平均)
- ROC曲线研究机器学习泛化性能
横轴:假正例率 FPR=FP/(FP+TN) 【分母是真实为0】 希望尽可能小
纵轴:真正例率 TPR=TP/(TP+FN) 【分母是真实为1】 希望尽可能大
算法
逻辑回归
逻辑回归是假设数据服从伯努利分布,极大化似然函数,利用梯度下降求解参数,从而完成二分类的模型
SVM
SVM是一种二分类模型,基于最大间隔找到最佳的超平面,距离超平面最近的点是支持向量。当特征线性不可分的时候,需要用到核函数特征映射到高维空间。
SVM的缺点:
- 难以处理大量数据,因为SVM要借助存储高阶矩阵来计算,所以计算较慢,垃圾邮件分类一般不用SVM,用Naive Bayes或LR
- 难以处理多分类问题,要考虑组合模型的方法
- 没有好的方法选取核函数
核函数
核函本质是两函数的内积,映射数据到高维,有高斯核、线性核、多项式核、Sigmoid核等
- 线性核用于线性可分的数据
- 多项式核参数多,对大量级的幂数不适用
- 高斯核可以映射数据到无穷维,只有一个参数,但可解释性差,容易过拟合,速度较慢
- Sigmoid核求的是全局最优值,有良好的泛化能力
在实战中
- 样本非常多/特征多:线性核(跑得快)
- 样本多、特征少:高斯核
决策树
决策树的训练由特征选择、树的生成、剪枝组成
-
谈谈对决策树的理解?
决策树的训练目标是让模型的不确定性降低得越快越好,根据评价指标不同,决策树主要有ID3,C4.5,CART三种算法,ID3得评价指标是信息增益,C4.5是信息增益率,CART是基尼指数 -
信息增益与信息增益率?
首先要知道熵这个概念,熵是度量随机变量的不确定性的指标,当概率分布越均匀,熵越大,概率分布相同的情况下,取值越多,熵越大。其次要理解条件熵的概念,条件熵是在一定条件下,某个随机变量的不确定性。当熵与条件熵的概率由数据估计得到时,分别称为经验熵与经验条件熵
- 信息增益(也称互信息),是指集合D的经验熵H(D)与特征A给定条件下D的经验条件熵H(D|A)之差
- ID3每次分叉选取最优特征时,会选取信息增益最高的特征来作为分裂特征,但这不一定就好,因为这样会偏爱取值数目多的特征
- 为什么C4.5采用信息增益率能解决ID3存在的问题?
- 因为信息增益偏好可取值数目多的特征,比如将id作为分支条件,纯度一定是最大的,信息增益一定是最大的
- 增益率=信息增益/IV,取值数目越多,IV越高
- 增益率偏好可取值数目少的属性,因此C4.5使用一个启发式的方法:先从候选划分属性中找到信息增益高于平均水平的,再从中找增益率最高的
-
决策树出现过拟合的原因和解决方法?
Early Stopping(限制树的高度、节点数),剪枝 -
不同算法的树的结构有什么区别?
CART是二叉树,叶子节点数目比所有非叶子节点数目多1原因
-
树的生成中没有进行剪枝,模型过于复杂
-
样本中有噪声数据,没有对噪声数据进行有效剔除
-
构建决策树过程中用了较多的输出变量
解决方法
-
剪枝:预剪枝与后剪枝(一般用后剪枝)
-
K-folds交叉验证:将数据分为K份,每次把其中的1份作为测试集,K-1份作为训练集
-
减少特征:
计算每个特征和响应变量的相关性,常见的相关系数是皮尔逊相关系数,将相关性较小的变量剔除
基于决策树的特征筛选
L1正则化选取特征
- 剪枝
- 预剪枝:在当前节点划分前,先进性估计,若当前节点的划分不能带来决策树泛化性能的提升,则停止划分并将当前节点标记为叶子节点
- 后剪枝:是一种全局的优化方法,在决策树完全建立后再自下而上地剪枝,若将该节点对应的子树替换为叶子节点能提升决策树泛化性能,则替换
- 参数:树的高度、叶子节点的数目、最大叶子节点数、限制不纯度等
- DT和LR的区别?
- DT能处理缺失值的数据,LR则需要预处理
- DT对局部结构的分析优于LR,而LR注重全局拟合,DT一旦分层,就与其他节点无法联系了,忽视数据间的相关性
- LR对极值比较敏感,容易受极端值影响
- 当数据量很大时,LR速度很慢,DT较快
Bagging和Boosting
Bagging流程:
- 用Boostrap选取n个训练样本,选取k轮
- 分别训练k个模型
- 综合每个模型的结果
Boosting流程:
- 建立对训练样本的权重
- 每轮迭代对训练样本权重进行改变
- 综合每个基分类器的结果
区别:
- 在样本选择上:
- 在样本权重上:
- 在并行计算上:
- 在预测函数上:
Adaboost/RF/GBDT/XGBoost
Adaboost
Adaboost与RF相同之处:
- 二者都是要训练很多棵决策树;
- 二者都是bootsrap自助法选取样本。
XGBoost与GBDT的区别:
GBDT算法只利用了一阶的导数信息,XGBoost对损失函数做了二阶的泰勒展开,并在目标函数之外加入了正则项对整体求最优解,用以权衡目标函数的下降和模型的复杂程度,避免过拟合。所以不考虑细节方面,两者最大的不同就是目标函数的定义
GBDT与Adboost的区别:
最主要的区别在于两者如何识别模型。Adaboost用错分数据点来识别问题,通过调整错分数据点的权重来改进模型。GBDT通过负梯度来识别问题,通过计算负梯度来改进模型