- 结构化数据(表)
- 半结构化数据(文本,日志)
- 非结构化数据(图像,视频)
- 参数空间
- 决策模型
- 概率模型
- 或者
- 生成模型:由数据学习联合概率分布P(X,Y),然后求出条件概率分布P(Y|X)作为预测的模型,即生成模型:P(Y|X)= P(X,Y)/ P(X)。(朴素贝叶斯)
- 生成模型可以还原联合概率分布p(X,Y),并且有较快的学习收敛速度,还可以用于隐变量的学习
- 判别模型:由数据直接学习决策函数Y=f(X)或者条件概率分布P(Y|X)作为预测的模型,即判别模型。(k近邻、决策树)
- 直接面对预测,往往准确率较高,直接对数据在各种程度上的抽象,所以可以简化模型
- 准则
-
实质公式场景对参数的看法利用的信息最小化结构风险loss+正则
最大似然概率积
(带正则的最大似然)贝叶斯估计
+
把参数作为先验知识 -
根据贝叶斯定理,后验函数正比于似然函数乘以先验概率,所以后验概率函数一般表达如:
贝叶斯估计中的先验概率其实就相当于最小化结构风险函数中的正则项,若先验为拉普拉斯分布,则为L1,若先验为高斯分布,则为L2
- 算法
- 最优化方法
(二)数据
1.常见抽样方法
(1)简单随机抽样:无放回抽样,有放回抽样
(2)分层抽样
2.类别样本不平衡的解决方法(假设负样本远远大于正样本数量)
(1)欠采样:对负样本进行欠采样;一般不单纯地进行欠采样,而是结合集成学习来进行欠采样;将负样本划分为若干个集合供不同分类器使用,这样对每个分类器来看都进行了欠采样,但在全局来看却不会丢失重要信息;
(2)重采样:对正样本进行重采样;一般不单纯地进行重采样,而是对正样本进行插值等来产生新的正样本;
(3)阈值移动:不是简单地将概率阈值0.5作为正负样本的区分界限,若负样本过多,那么正样本的阈值将往低于0.5方向调整;
3.处理数据缺失的常用方法:
(1)用平均值、中值、分位数、众数、随机值等替代;
(2)通过建模,使用其他变量来预测缺失值;
(3)将变量映射到高维空间:比如性别变量有男,女以及缺失3种情况,则映射为3个变量:是否男,是否女,是否缺失;
(4)整列删除
4.构造线下验证集的常用方法:
(1)hold-out-validation:将线下数据随机划分为一大一小两部分,大的为训练集,小的为验证集,重复若干次;(典型做法是三七分)
(2)cross-validation:将线下数据划分为k份,每次只用k-1份来训练,剩下的1份作为验证集,重复k次;(典型做法是k取10,k偏小则欠拟合,k偏大样本增多则过拟合)
(3)bootstrapping:从原始数据集D中有放回地采样,得到同样大小的D1,D1作为训练集,D-D1作为验证集;
PS:
1)训练集与验证集的划分要尽可能保持数据分布的一致性,避免因数据划分过程引入额外的偏差而对最终结果产生影响,例如在分类任务中至少要保持样本的类别比例相似;如果从采样的角度来看待数据集的划分过程,则保留类别比例的采样方式通常称为“分层采样”;
2)验证集较小时,评估结果的方差较大,过拟合;训练集较小时,评估结果的偏差较大,欠拟合;
3)leave-one-out是k-fold cross-validation的特殊例子,只留一个样本做验证集;评估结果往往比较准确,但是不适用于大样本数据;(训练的计算开销太大)
4)bootstrapping可以产生多个不同的训练集,适用于ensemble learning;同时,由于重复采样,所以会改变初始训练集的分布,造成样本泄露,因此一般适用于小样本,在数据量足够的情况下,常采用hold-out-validation或者cross-validation;
5.常见的离线评价指标:
(1)准确率(Accuracy)与平均准确率(Average Per-class Accuracy)
其中平均准确率是对各个类的准确率取平均值
(2)混淆矩阵:对二分类结果进行详细表述的一个矩阵
怎么画出X轴Y轴
适用于/优点关注范围用一个值衡量的话?缺点
ROC
通过改变0.5这个阈值使得真阳性和假阳性变化假阳性真阳性排序质量单个集合AUC假设平衡PRCPercision/RecallPercisionRecall不平衡整体F1比较不平滑
6.常见的在线评价指标——A/B test
7.验证集和测试集的区别
验证集:用于调整子模型或者其超参数,做模型选择
测试集:用来评测多个最终模型
如果采用 k-折交叉验证等重采样方法,尤其当重采样方法已经被嵌套在模型验证中时,「验证数据集」和「测试数据集」的概念可能会淡化
(三)特征
1.冗余特征
(1)冗余特征指的是其所包含的信息能从其他特征中推演出来;
(2)去除冗余特征会减轻学习过程的负担,增加冗余特征会降低学习任务的难度;
2.特征选择:从给定的特征集合中选择出相关特征子集的过程称作“特征选择”;其中包括子集搜索问题与子集评价问题:
(1)子集搜索:前向搜索(逐渐往子集增加特征),后向搜索(逐渐往全集剔除特征)
(2)子集评价:信息增益,基尼指数
PS:
(1)子集搜索中的前后向搜索都是贪心策略,所以不一定是最优,这是不进行穷举搜索所无法避免的;
(2)将特征子集搜索机制与子集评价机制相结合,可以得到特征选择方法,例如前向搜索与信息熵结合,得到的是决策树的特征选择方法;
3.特征选择常见方法:过滤式(filter),包裹式(wrapper),嵌入式(embedding)
(1)过滤式 Filter:
根据CHI,PCA等降维
先做特征选择,再训练学习器
优点: 快速, 只需要基础统计知识, 特征选择过程与后续的学习器的训练没有关系 。
缺点:特征之间的组合效应难以挖掘。
(2)包裹式 Wrapper :
根据效果好的算法的结果搜索 “量身定做”的特征子集
优点: 直接面向算法优化,从最终学习性能来看,包裹式比过滤式更好,不需要太多知识。
缺点: 庞大的搜索空间, 需要定义启发式策略。
(3)嵌入式Embedded:
将特征选择与学习器训练融为一体使用各种的稀疏和惩罚项
优点: 快速, 并且面向算法,两者在同一个优化过程中完成,即在学习器训练过程中自动地进行了特征选择。
缺点: 需要调整结构和参数配置, 而这需要深入的知识和经验。
(四)模型
1.模型选择的常用方法:
(1)正则化
(2)交叉验证
PS:当假设空间含有不同的复杂度(例如,不同的参数个数)的模型时,就要面临模型选择的问题;
2.过拟合与欠拟合
(1)过拟合是模型的学习能力太强,把样本的噪声都学习进去;
(2)欠拟合是模型的学习能力太弱,连样本的一般特性都没有学习进去;
3.泛化能力与泛化误差上界
(1)泛化能力是指由该方法学习到的模型对未知数据的预测能力,是学习方法本质上最重要的性质;
(2)泛化误差上界:训练误差越小,泛化误差上界也越小;样本容量越大,泛化误差上界也越小;模型越复杂,泛化误差上界越大;
- regularize:(规范; 使有规则; 使有秩序)
- Regularization(先验规范化/正则化/惩罚项): 利用先验知识,在处理过程中引入正则化因子(regulator),增加向模型收敛的哪个方面引导约束的作用,比如稀疏,比如防止过拟合,处理噪声跟异常点。
- 通过添加正则项指定一组与原不适定问题相“邻近”的适定问题的解,去逼近原问题的解
- 都是通过增加模型的loss function来惩罚模型
- 正则化其实是决策模型的概念,其对应于概率模型中的贝叶斯估计;贝叶斯估计比起极大似然估计,多了参数的先验知识;即假设模型参数是符合一个先验的概率分布的
- 通过把(权重为0的个数)这样的正则项加入,降低了权值的维度,从而提高了在一定数据样本上的泛化能力
-
别名意义公式对特征的效果性能作用过拟合下降的梯度假设参数服从的分布L0
sigma(x==0)稀疏差一点
L1lasso权重绝对值loss + |xi| 产生稀疏的特征求导较困难特征选择防止过拟合斜率拉普拉斯L2ridge岭权重平方和loss + sigma(xi^2)选择更多的特征,这些特征都会接近于0最吼规则化防止过拟合二次
高斯
- 这张图里,方框是一种约束,使得模型的参数在方框里面,一圈一圈是逐渐逼近的目标函数(从紫色圈到扩散,为了满足loss里的稀疏条件),其中w2或者w1=0的点就是稀疏点,所以交点就是满足正则化同时达到一定模型性能的模型点,因为L1一般会用=0的位置(即角)相交于模型(稀疏点,lasso点,模型点三点一致),L2一般会让模型靠近0,从而防止过拟合,但是模型从哪个方向靠近0都是没关系的,只关心均方差就可以
- Normalization 归一化 :把数据变为(0,1)之间的小数 , 消除量纲。
-
公式minmax
零均值(Z-score)减去均值,乘以方差:y=(x-means)/ variance对数y=lg (x)arctany=arctan(x)*2/PI - 比最大最小归一化更好的方法是归一到Z值,也就是说,特征值距离它的平均值有多远,并除去本身的标准差,Batch norm的源头
- 归一化可以处理量纲问题,有利于优化迭代速度(梯度下降),提高精度(KNN)
Standardization 标准化:是将数据按比例缩放,使之落入一个小的特定区间(如,0均值)
Logisticy=1/(1+e^(-x))
数据分布很远可导,广泛应用
5.常用的防止过拟合的方法:
(1)数据集扩增
(2)正则化:约束参数大小
6.bias与variance
(1)bias:结果和预测的偏差,拟合误差,表示模型的拟合能力,偏差越小,模型的拟合能力越强;(宽广网的DNN部分)
拟合误差表示是否已经把线偏差到指定位置
(2)variance:结果和预测的方差,泛化误差,表示模型的泛化能力,方差越小,模型的泛化能力越强;(宽广网的LR部分)
方差表示这根线有多符合这个验证集
(3)error = bias + variance
是个问题
7.调试性能较差的分类器
- 对于出现了高方差(过拟合)
- 增加更多的数据,降低模型复杂度
- ill-condition,可以用L2正则化处理,或者检查数据,重新搜索参数
- 对于出现了高偏差(欠拟合)
- 增加模型复杂度,或者尝试别的模型
- 改变目标:
- 训练和测试数据不均衡的情况下,应该关注准确率和召回率
- 注意的问题:很低的训练误差,甚至是0不一定很好,只是有可能出现了N小于P的情况,样本数小于特征数
8.模型参数与超参数
(1)机器学习模型建立过程其实是一个参数学习与调优的过程,参数包括模型参数与超参数;
(2)模型参数使指通过模型训练中的学习算法而进行调整的,而模型超参数不是通过学习算法而来的,但是同样也需要进行调优,比如特征的维数等;
(3)常见的调参方法有:网格搜索,随机搜索,启发式搜索;
(4)调参是通过线下验证集进行的;
9.VC维(Vapnik-Chervonenkis Dimension):VC维是统计学习理论中的一个核心概念,它是目前为止对函数集学习性能的最好描述指标
(1)shatter(打散)概念:给定训练样本集合x1,x2,...,xn;,其中每个样本有两个可选的label(+1, -1),因此总共有2的n次方种不同的label组合;如果对于其中每一种组合,分类模型(函数集) F 都能够对其进行正确的划分,那么我们称 F 能够将训练样本集合打散(shatter);
上图共有3个样本,可以看到,对于样本的任意一种label组合,图中的直线都可以将正样本和负样本分开;这时我们称这条直线可以将这三个样本打散(shatter);
上图中显示了四个样本,如果只用一条直线,那么无论这条直线怎么划都不能将正负样本分开;
(2)VC维的概念:指函数集H能够打散的最大样本数称为H的VC维;
(3)对于一个模型来说,其VC维越大,则其模型复杂度越高,需要更多的训练数据,因此为了防止过拟合,加入正则项,其实也就是降低模型的VC维;
(4)一个机器学习模型想要取得好的效果,这个模型需要满足以下两个条件:
1. 模型在我们的训练数据上的表现要不错,也就是 trainning error 要足够小。
2. 模型的 vc-dimension 要低。换句话说,就是模型的自由度不能太大,以防overfit.
换句话说,模型的维度大的容易过拟合,而数据量小的容易过拟合
PS:线性SVM的VC维为d+1(任何线性分类器的VC维都是d+1);高斯核函数的VC维为无穷大;NN(Neural Networks )的VC维为参数量;树模型的vc维度很接近样本
10.集成学习(ensemble learning)的常用方法:
(1)bagging:训练不同的模型,对预测结果取均值或者投票等(减小variance,增强泛化);
(2)boosting:迭代算法,在上一次分类结果上进行迭代调整(减小bias,增强拟合);
(3)stacking/cascade:训练不同的模型,用每个模型的预测作为输入,训练新的模型;
11.多分类的常见方法(假设N个类)
(1)one vs rest:构建N个分类器,每个分类器依次将每个类做为正样本,剩余的类作为负样本
(2)one vs one:构建N*(N-1)/2个分类器,每个分类器选择两个类的样本进行训练
- 区别:如果模型是参数的线性函数,并且存在线性分类面,那么就是线性分类器,否则不是。
- 常见的线性分类器有:LR,贝叶斯分类,单层感知机、线性回归
- 常见的非线性分类器:决策树、RF、GBDT、多层感知机
- deal(即团购单,下同)维度的特征:主要是deal本身的一些属性,包括价格、折扣、销量、评分、类别、点击率等
- user维度的特征:包括用户等级、用户的人口属性、用户的客户端类型等
- user、deal的交叉特征:包括用户对deal的点击、收藏、购买等
- 距离特征:包括用户的实时地理位置、常去地理位置、工作地、居住地等与poi的距离
通用模型举隅
排序层
模型集成方法:
Bagging
【切分数据集,结果加权】Bagging试图在小样本集上实现相似的学习模块,然后对预测值求平均值。对于Bagging一般来说,你可以在不同数据集上使用不同学习模块。正如你所期望的那样,这样可以帮助我们减少方差,增强泛化。
Boosting
【误差梯度下降】Boosting是一项迭代技术,它在上一次分类的基础上调整观测值的权重。如果观测值被错误分类,它就会增加这个观测值的权重,反之亦然。Boosting一般会减少偏置误差然后构建强大的预测模型。但是,有些时候它们也会在训练数据上过拟合。
Stacking
【简单的blending】训练集中取子集,交叉训练基模型,再用总模型汇总。这样做可以减少偏置误差和方差(泛化误差)。
线性stacking:
用线性模型做最终模型,这样就能看见每个模型的权重
二次线性stacking:
把模型的输出和他们之间结果的组合一起作为最终模型的输入
- 不标准化数据
- 使用z标准化
- 使用0-1标准化