为什么用最大似然函数做估计?
最小二乘法的误差符合正态分布,而逻辑回归的误差符合的是二项分布,所以不能用最小二乘法来作为损失函数。
最小二乘法做损失函数为非凸函数,求解困难且容易陷入局部最优,而似然函数为凸函数可以得到局部最优解。
为什么用sigmoid函数?
最理想的是采用阶跃函数,但是由于其不可微,难以求最优解,所以采用对数几率函数。
(1)logistic变换:
我们将 y 视为 x 为正例的概率,则 1-y 为 x 为其反例的概率。两者的比值称为几率(odds),指该事件发生与不发生的概率比值,若事件发生的概率为 p。
则对数几率:
(2)由h估计y属于0-1的概率:
合并,服从伯努利分布:
(3)通过极大化似然函数的方法,运用梯度下降来求解参数
似然函数:
对数似然函数:
然后求导:
(1)回归系数P的检验是t检验,当P<α值,即回归系数显著,拒绝原假设。 回归模型检验是检验模型是否合适,通过F检验,当F检验P<α,则模型显著,即反映的总体回归。
(2)特征系数的绝对值越大,对分类效果的影响越显著,但不能表示系数更大的特征重要性更高。因为改变变量的尺度就会改变系数的绝对值,而且如果特征是线性相关的,则系数可以从一个特征转移到另一个特征,特征间相关性越高,用系数解释变量的重要性就越不可靠。
sklearn.linear_model.LogisticRegression(penalty='l2', dual=False,
tol=0.0001, C=1.0, fit_intercept=True, intercept_scaling=1,
class_weight=None, random_state=None, solver='liblinear',
max_iter=100, multi_class='ovr', verbose=0, warm_start=False, n_jobs=1)
(1)正则化选择参数:penalty 其原理就是对参数进行约束
l1和l2分别为L1正则化和L2正则化;默认为l2
两种情况调整:
主要的目的只是为了解决过拟合,一般penalty选择L2正则化就够了。
penalty参数的选择会影响我们损失函数优化算法的选择。即参数solver的选择,如果是L2正则化,那么4种可选的算法{‘newton-cg’, ‘lbfgs’, ‘liblinear’, ‘sag’}都可以选择。但是如果penalty是L1正则化的话,就只能选择‘liblinear’了,L1正则化没有连续导数。
(2)优化算法选择参数:solver
(3)tol
: 残差收敛条件,默认是0.0001,也就是只需要收敛的时候两步只差<0.0001就停止,可以设置更大或更小。(逻辑回归模型的损失函数是残差平方和)
(4)分类方式选择参数:multi_class
(multi_class='multinomial', solver='newton-cg')
multi_class参数决定了分类方式的选择,有 ovr和multinomial两个值可以选择,默认是 ovr。
ovr即one-vs-rest(OvR),而multinomial指的是OVO。如果是二元逻辑回归,ovr和multinomial并没有任何区别,区别主要在多元逻辑回归上。
(5)类型权重参数: class_weight
用于标示分类模型中各种类型的权重,可以不输入,即不考虑权重,或者说所有类型的权重一样。如果选择输入的话,可以选择balanced让类库自己计算类型权重,或者我们自己输入各个类型的权重
比如对于0,1的二元模型,我们可以定义class_weight={0:0.9, 1:0.1},这样类型0的权重为90%,而类型1的权重为10%
如果class_weight选择balanced,那么类库会根据训练样本量来计算权重。某种类型样本量越多,则权重越低,样本量越少,则权重越高
使用场景:
(6)样本权重参数: sample_weight
样本不平衡,导致样本不是总体样本的无偏估计,从而可能导致模型预测能力下降。遇到这种情况,可以通过调节样本权重来尝试解决这个问题。样本或类别的权重在训练模型最终通过损失函数实现
sample_weight:array-like, shape (n_samples,)optional
Arrayof weights that are assigned to individual samples. If not provided, then eachsample is given unit weight.
调节样本权重的方法有两种,第一种是在class_weight使用balanced;第二种是在调用fit函数时,通过sample_weight来自己调节每个样本权重。
在scikit-learn做逻辑回归时,如果上面两种方法都用到了,那么样本的真正权重是class_weight*sample_weight
(7)fit_intercept: 默认:True 指定是否应将常量(a.k.a. bias或intercept)添加到决策函数中。
(8)C
: 正则化系数,正则化强度的导数,必须是一个正数,值越小,正则化强度越大,即防止过拟合的程度更大
(9)warm_start
: 是否使用上次的模型结果作为初始化,默认是False,表示不使用
(11)n_jobs
: 并行运算数量(核的数量),默认为1,如果设置为-1,则表示将电脑的cpu全部用上。
(1)L1 L2 正则化
逻辑回归的损失函数:
在此损失函数可以取为最大似然估计函数的相反数,其次除以m这一因子并不改变最终求导极值结果,通过除以m可以得到平均损失值,避免样本数量对于损失值的影响
L1:
L1正则化使得权重 w 往0靠,使网络中的权重尽可能为0,产生稀疏权重矩阵, 也就相当于减小了网络复杂度,防止过拟合。
L2:
L2正则化起到使得权重参数 w 变小的效果,更小的权重参数 w意味着模型的复杂度更低,对训练数据的拟合刚刚好,不会过分拟合训练数据
(2) 增加样本,要覆盖全部的数据类型。数据经过清洗之后再进行模型训练,防止噪声数据干扰模型
(3) bagging(如随机森林)能有效防止过拟合
在多分类Logistic 回归中,使用softmax 函数而不是sigmoid 函数。Softmax回归模型是logistic回归模型在多分类问题上的推广,当分类数为2的时候会退化为Logistic分类。
softmax 函数产生每个类别的概率,并且概率向量的所有元素相加为1。
损失函数:采用交叉熵函数,主要是由于这个求导结果比较简单,易于计算,并且交叉熵解决某些损失函数学习缓慢的问题。
对z求导后:
所有类别之间明显互斥用softmax分类器,所有类别之间不互斥有交叉的情况下最好用个logistic分类器
使用用二分类的三种策略:
7.1 OVO 一对一(N(N-1)/2个分类器)
OvO将这N个类两两配对,从而产生N(N-1)/2个二分类任务。于是我们会得到N(N-1)/2个分类结果,最终的结果可通过投票产生:把被预测得最多的类别作为最终分类结果。
OvR的每个分类器均使用全部的训练样例,而OvO的每个分类器仅用到两个类的样例。OvO的存储开销和测试时间开销通常比OvR更大
7.2 OVR 一对多(只需训练N个分类器,)
一对多是将一个类的样例作为正例,其它类的样例作为反例来训练N个分类器。在测试时若仅有一个分类器预测为正类,则对应类别标记为最终分类结果。如有多个分类器预测为正例,则以经过逻辑回归的数据作为衡量标准,哪个大选择哪个。
7.3 MVM 多对多
多对多是每次将若干类作为正例,若干其他类作为负例。MvM的正反例构造有特殊的设计,不能随意选取。我们这里介绍一种常用的MvM技术:纠错输出码(EOOC)。
以上例子中预测类别为C3,海明距离最小。
1. bagging和boosting
(1)bagging
每一次从原始数据中根据均匀概率分布有放回的抽取和原始数据大小相同的样本集合,样本点可能出现重复,然后对每一次产生的训练集构造一个分类器,再对分类器进行组合。
(2)boosting
每一次抽样的样本分布都是不一样的。每一次迭代,都根据上一次迭代的结果,增加被错误分类的样本的权重,使得模型能在之后的迭代中更加注意到难以分类的样本,这是一个不断学习的过程,也是一个不断提升的过程,这也就是boosting思想的本质所在。
GBDT只能由回归树组成,无论是分类还是回归问题,都采用CART回归树。
不会因为我们所选择的任务是分类任务就选用分类树,这里面的核心是因为gbdt 每轮的训练是在上一轮的训练的残差基础之上进行训练的。这里的残差就是当前模型的负梯度值 。这个要求每轮迭代的时候,弱分类器的输出的结果相减是有意义的。如果选用的弱分类器是分类树,类别相减是没有意义的
https://zhuanlan.zhihu.com/p/58105824
梯度提升的典型基函数即决策树(尤其是CART),GBDT算法在每一步迭代时是输出的值不一样,基本想法是让新的基模型(GBDT以CART分类回归树为基模型)用损失函数的负梯度去拟合前面模型的偏差,从而不断将加法模型的偏差降低。
训练时采用前向分布算法进行贪婪的学习,每次迭代都学习一棵CART树来拟合之前 t-1 棵树的预测结果与训练样本真实值的残差。
(1)回归模型
损失函数:均方差(最常用)、绝对损失、Huber损失、分位数损失
(2)分类模型
https://www.cnblogs.com/ModifyRong/p/7744987.html
由于输出值非连续,一个是用指数损失函数,此时GBDT退化为Adaboost算法。另一种方法是用类似于逻辑回归的对数似然损失函数的方法。也就是说,我们用的是类别的预测概率值和真实概率值的差来拟合损失。对于对数似然损失函数,又有二元分类和多元分类的区别
二分类:
多分类:
GBDT 如何用于分类:
针对样本x每个可能的类都训练一个分类回归树,即每轮的训练都是同时训练k棵树,使用softmax来产生概率。
Softmax函数的定义:
GBDT如何正则化:
(1)框架参数
(2)弱学习器参数
(1)先从n_estimators调整,设定较小的学习速率
param_test1 = {'n_estimators':range(20,81,10)}
gsearch1 = GridSearchCV(estimator = GradientBoostingClassifier(learning_rate=0.1, min_samples_split=300,
min_samples_leaf=20,max_depth=8,max_features='sqrt', subsample=0.8,random_state=10),
param_grid = param_test1, scoring='roc_auc',iid=False,cv=5)
gsearch1.fit(X,y)
gsearch1.grid_scores_, gsearch1.best_params_, gsearch1.best_score_
(2)找到合适的迭代次数后,调整max_depth min_samples_split(暂时不定与其他参数相关)
(3)再对内部节点再划分所需最小样本数min_samples_split和叶子节点最少样本数min_samples_leaf一起调参。
(4)对最大特征数max_features、sub_sample进行网格搜索
(5)最后可以减半步长,最大迭代次数加倍来增加我们模型的泛化能力
(1)目标函数 = 损失函数+正则项
从目标函数的定义可以看出XGBoost对模型复杂度考虑了每颗树的叶节点个数,以及每颗树叶节点输出得分值得平方和。
(2)模型优化
Shrinkage:相当于学习速率。XGBoost 在进行完一次迭代后,会将叶子节点的权重乘上该系数,主要是为了削弱每棵树的影响,让后面有更大的学习空间;
(1)通用参数
(2)tree booster参数
(3)Linear Booster参数
调整顺序:
max_depth 和 min_child_weight 参数调优:
param_test1 = {
'max_depth':range(3,10,2),
'min_child_weight':range(1,6,2)
}
gsearch1 = GridSearchCV(estimator = XGBClassifier(learning_rate =0.1, n_estimators=140, max_depth=5,min_child_weight=1, gamma=0, subsample=0.8, colsample_bytree=0.8,
objective= 'binary:logistic', nthread=4, scale_pos_weight=1, seed=27),
param_grid = param_test1, scoring='roc_auc', n_jobs=4, iid=False, cv=5)
gsearch1.fit(train[predictors],train[target])
gsearch1.grid_scores_, gsearch1.best_params_, gsearch1.best_score_
在选取的最佳max_depth 和 min_child_weight附近,选择小范围调优
min_child_weight调整
gamma:
param_test3 = {
'gamma':[i/10.0 for i in range(0,5)]
}
gsearch3 = GridSearchCV(estimator = XGBClassifier( learning_rate =0.1, n_estimators=140, max_depth=4,
min_child_weight=6, gamma=0, subsample=0.8, colsample_bytree=0.8,
objective= 'binary:logistic', nthread=4, scale_pos_weight=1,seed=27),
param_grid = param_test3, scoring='roc_auc',n_jobs=4,iid=False, cv=5)
gsearch3.fit(train[predictors],train[target])
gsearch3.grid_scores_, gsearch3.best_params_, gsearch3.best_score_
在节点分裂时,只有分裂后损失函数的值下降了,才会分裂这个节点。gamma
指定了节点分裂所需的最小损失函数下降值。 这个参数的值越大,算法越保守。因为gamma
值越大的时候,损失函数下降更多才可以分裂节点。
subsample 和 colsample_bytree 参数: 分两个阶段来进行这个步骤。这两个步骤都取0.6,0.7,0.8,0.9作为起始值, 再细调
正则化参数调优: reg_alpha reg_lambda
降低学习速率
LightGBM = XGBoost + Histogram + GOSS + EFB
Histogram算法:直方图算法;GOSS算法:基于梯度的单边采样算法;EFB算法:互斥特征捆绑算法
(1)xgboost训练复杂度 = 树的棵数✖️每棵树上叶子的数量✖️生成每片叶子的复杂度
生成每片叶子的复杂度 = 特征数量✖️候选分裂点数量✖️样本的数量
Hitogram算法的主要作用是减少候选分裂点数量,GOSS算法的作用是减少样本的数量,EFB算法的作用是减少特征的数量
(2)Hitogram算法
直方图算法是替代XGBoost的预排序(pre-sorted)算法的,即预排序将样本按照特征取值排序,然后从全部特征取值中找到最优的分裂点位,该算法的候选分裂点数量与样本数量成正比
直方图算法通过将连续特征值离散化到固定数量(如255个)的bins上,使得候选分为点位为常数个(num_bins -1)
直方图做差加速直接,减少构建直方图的内存和时间。一个叶子的直方图可以由它的父亲节点的直方图与它兄弟的直方图做差得到。通常构造直方图,需要遍历该叶子上的所有数据,但直方图做差仅需遍历直方图的k个桶。
(3)GOSS算法
主要思想是通过对样本采样的方法来减少计算目标函数增益时候的复杂度,目的是丢弃一些对计算信息增益没有帮助的样本留下有帮助的。GOSS算法的创新之处在于它只对梯度绝对值较小的样本按照一定比例进行采样,而保留了梯度绝对值较大的样本。
为了不改变样本分布:
(3)EFB算法
EFB算法可以有效减少用于构建直方图的特征数量,从而降低计算复杂度,尤其是特征中包含大量稀疏特征的时候。
(4)稀疏特征处理,直接处理类别特征
对于指定为类别特征的特征,LightGBM可以直接将每个类别取值和一个bin关联,从而自动地处理它们,而无需预处理成onehot编码多此一举。
解释:通常可以认为这些稀疏特征是互斥的,即它们几乎不会同时取非零值,对于类别特征,如果转换成onehot编码,则这些onehot编码后的多个特征相互之间是互斥的,从而可以被捆绑成为一个特征。
(5)带深度限制的Leaf-wise的叶子生长策略
一般按层生长(level-wise)的决策树生长策略,因为它不加区分的对待同一层的叶子,带来了很多没必要的开销。实际上很多叶子的分裂增益较低,没必要进行搜索和分裂。
LightGBM采用Leaf-wise的增长策略,该策略每次从当前所有叶子中,找到分裂增益最大的一个叶子,然后分裂,如此循环。因此同Level-wise相比,Leaf-wise的优点是:在分裂次数相同的情况下,Leaf-wise可以降低更多的误差,得到更好的精度;Leaf-wise的缺点是:可能会长出比较深的决策树,产生过拟合。因此LightGBM会在Leaf-wise之上增加了一个最大深度的限制,在保证高效率的同时防止过拟合
early_stopping_round
回合中没有提高,模型将停止训练categorical_features = 0,1,2
, 则列 0,1,2是 categorical 变量<= 2 ^(max_depth)
, 超过此值会导致过拟合(1)决策树:是一个树结构(可以是二叉树或非二叉树)。其每个非叶节点表示一个特征属性上的测试,每个分支代表这个特征属性在某个值域上的输出,而每个叶节点存放一个类别
(2)随机森林:弱学习器的组合,集成多个决策树的结果。在对预测输出进行结合时,对分类任务使用简单投票法,对回归任务使用简单平均法。
构建步骤:
2. 主要问题及注意点
(1)两个采样:行列的随机采样,防止过拟合
(2)列采样参数:通常将其设置为sqrt(n_features)以进行分类,这意味着如果有16个特征,则在每个树中的每个节点处,只考虑4个随机特征来拆分节点
(1)评估思想:判断每个特征在随机森林中的每颗树上做了多大的贡献,然后取个平均值,最后比一比特征之间的贡献大小
(2)评估标准
1. 解释
从预测中把每一个特征的影响分解出来, 并了解正负性,来自合作博弈论,所有可能联盟中特征值的平均边际贡献。
SHAP是由Shapley value启发的可加性解释模型。对于每个预测样本,模型都产生一个预测值,SHAP value就是该样本中每个特征所分配到的数值。
Shapley值是一种根据玩家对总支出的贡献来为玩家分配支出的方法,玩家在联盟中合作并从这种合作中获得一定的收益。用shaply值去解释机器学习的预测的话,其中“总支出”就是数据集单个实例的模型预测值,“玩家”是实例的特征值,“收益”是该实例的实际预测减去所有实例的平均预测。
一个样本中各特征SHAP值的和加上基线值应该等于该样本的预测值。
2. Python shap
import shap
# model是在第1节中训练的模型
explainer = shap.TreeExplainer(model)
shap_values = explainer.shap_values(data[cols])
可视化:
(1)单个样本
shap.initjs()
shap.force_plot(explainer.expected_value, shap_values[j], data[cols].iloc[j])
(2) 对特征的总体分析
shap.summary_plot(shap_values, data[cols])
(3)部分依赖图
shap.dependence_plot('age', shap_values, data[cols], interaction_index=None, show=False)
24到31岁这个年纪对球员的身价是拉抬作用,小于24以及大于31岁的球员身价则会被年纪所累。
(4)对多个变量的交互进行分析
shap_interaction_values = shap.TreeExplainer(model).shap_interaction_values(data[cols])
shap.summary_plot(shap_interaction_values, data[cols], max_display=4)
根据样本数据的距离或相似度划分为若干组,划分的原则是组内距离最小化,组外间距最大化。
kmeans原理:
(1)闵可夫斯基距离/欧式距离
(2)余弦相似度
(3)pearson 相关系数
(4)杰卡德相似系数
(5)K-L距离 相对熵
(1)层次聚类
凝聚和分裂:不需要指定类别数
(2)基于密度的聚类 DBSCAN
原理:主要目标是相比基于划分的聚类方法和层次聚类方法,需要更少的领域知识来确定输入参数;发现任意形状的聚簇;在大规模数据库上更好的效率。DBSCAN能够将足够高密度的区域划分成簇,并能在具有噪声的空间数据库中发现任意形状的簇。
DBSCAN的核心思想是从某个核心点出发,不断向密度可达的区域扩张,从而得到一个包含核心点和边界点的最大化区域,区域中任意两点密度相连。
步骤:
存在的问题:
DBSCAN参数选取:
- 参数(ϵ, MinPts)用来描述邻域的样本分布紧密程度。
- ϵ 描述了某一样本的邻域距离阈值,MinPts描述了某一样本的距离为ϵ的邻域中样本个数的阈值。
使用了统一的邻域值和Minpts(最小点数)值,在类中的数据分布密度不均匀时,较小时,密度小的cluster会被划分成多个性质相似的cluster;较大时,会使得距离较近且密度较大的cluster被合并成一个cluster
(1)特征维数过多
主成分分析是通过正交变化将一组相关性的特征转换为非线性相关的特征,转换后的变量叫主成分,也是特征值对应的特征向量。
一方面,主成分分析会损失很多原始数据信息;另一方面,主成分分析保留下来的主成分也很难有解释性,因为数据已经被正交变换了。
(3)kmeans 的K选取
核心思想:随着聚类数k的增大,样本划分会更加精细,每个簇的聚合程度会逐渐提高,那么误差平方和SSE自然会逐渐变小。并且,当k小于真实聚类数时,由于k的增大会大幅增加每个簇的聚合程度,故SSE的下降幅度会很大,而当k到达真实聚类数时,再增加k所得到的聚合程度回报会迅速变小,所以SSE的下降幅度会骤减,然后随着k值的继续增大而趋于平缓。
某个样本点Xi的轮廓系数定义如下:
其中,a是Xi与同簇的其他样本的平均距离,称为凝聚度,b是Xi与最近簇中所有样本的平均距离,称为分离度
用Xi到某个簇所有样本平均距离作为衡量该点到该簇的距离后,选择离Xi最近的一个簇作为最近簇;
平均轮廓系数的取值范围为[-1,1],且簇内样本的距离越近,簇间样本距离越远,平均轮廓系数越大,聚类效果越好
(1)GBDT中的梯度是什么对什么的梯度?
当前损失函数L(yi, F(x))对树F(xi)的梯度
(2)XGBoost和GBDT的区别
(3)XGBOOST是如何处理缺失值的?
xgboost为缺失值设定了默认的分裂方向,xgboost在树的构建过程中选择能够最小化训练误差的方向作为默认的分裂方向,即在训练时将缺失值划入左子树计算训练误差,再划入右子树计算训练误差,然后将缺失值划入误差小的方向。
(4)XGBOOST采样时有放回的还是无放回的?
xgboost属于boosting方法的一种,所以采样时样本是不放回的,因而每轮计算样本不重复,另外,xgboost支持子采样,每轮计算可以不使用全部的样本,以减少过拟合。
(5)特征重要性原理
importance_type参数支持三种特征重要性的计算方法:
(6)xgboost为什么快
候选分位点:每个特征采用常数个分位点作为候选分割点
(7) RF和GBDT区别?
集成学习:RF属于bagging思想,而GBDT是boosting思想
偏差-方差权衡:RF不断的降低模型的方差,而GBDT不断的降低模型的偏差
训练样本:RF每次迭代的样本是从全部训练集中有放回抽样形成的,而GBDT每次使用全部样本
并行性:RF的树可以并行生成,而GBDT只能顺序生成(需要等上一棵树完全生成)
最终结果:RF最终是多棵树进行多数表决(回归问题是取平均),而GBDT是加权融合
数据敏感性:RF对异常值不敏感,而GBDT对异常值比较敏感
泛化能力:RF不易过拟合,而GBDT容易过拟合
(8)xgboost如何处理不平衡数据
(9)当在高维稀疏特征的场景下,LR的效果一般会比GBDT好
树模型过拟合的更严重,同样是对于y = W1*f1 + Wi*fi+…,LR 等线性模型的正则项是对权重的惩罚,也就是 W1一旦过大,惩罚就会很大,进一步压缩 W1的值,使他不至于过大。但是,树模型则不一样,树模型的惩罚项通常为叶子节点数和深度等,树只需要一个节点就可以完美分割9990和10个样本,一个结点,最终产生的惩罚项极其之小。
(10)XGBoost模型如果过拟合了怎么解决
max_depth,min_child_weight,gamma
等参数subsample,colsample_bytree
learning rate
,但需要同时增加estimator
参数(11)xgboost如何选择最佳分裂点?
XGBoost在训练前预先将特征按照特征值进行了排序,并存储为block结构,以后在结点分裂时可以重复使用该结构。
因此,可以采用特征并行的方法利用多个线程分别计算每个特征的最佳分割点,根据每次分裂后产生的增益,最终选择增益最大的那个特征的特征值作为最佳分裂点。
(12) AUC
首先AUC值是一个概率值,当你随机挑选一个正样本以及负样本,当前的分类算法根据计算得到的Score值将这个正样本排在负样本前面的概率就是AUC值,AUC值越大,当前分类算法越有可能将正样本排在负样本前面,从而能够更好地分类。
横轴FPR:1-TNR,1-Specificity,FPR越大,预测正类中实际负类越多。
纵轴TPR:Sensitivity(正类覆盖率),TPR越大,预测正类中实际正类越多。
TPR和FPR是基于真实样本表现看的,也就是在真实正负样本中去关注概率问题,AUC对样本类别是否均衡并不敏感,这也是不均衡样本通常用AUC评价分类器性能的一个原因。
AUC能很好描述模型整体性能的高低,反应的是对客户进行正确排序的能力
计算方法:统计一下所有的 M×N(M为正类样本的数目,N为负类样本的数目)个正负样本对中,有多少个组中的正样本的score大于负样本的score。
随机抽取一个样本, 对应每一潜在可能值X都对应有一个判为正样本的概率P。
对一批已知正负的样本集合进行分类,按概率从高到矮排个降序, 对于正样本中概率最高的,排序为rank_1, 比它概率小的有M-1个正样本(M为正样本个数), (rank_1 - M) 个负样本。
正样本概率第二高的, 排序为rank_2, 比它概率小的有M-2个正样本,(rank_2 - M + 1) 个 负样本。
以此类推
正样本中概率最小的, 排序为rank_M,比它概率小的有0个正样本,rank_M - 1 个负样本。
总共有MxN个正负样本对(N为负样本个数)。把所有比较中 正样本概率大于负样本概率 的例子都算上, 得到公式(rank_1 - M + rank_2 - M + 1 .... + rank_M - 1) / (MxN) 就是正样本概率大于负样本概率的可能性了。 化简后(因为后面是个等差数列)得:
(13)KS
当KS不佳时,为了达到KS的预期目标,我们可以从哪些方面着手去优化呢?一般建议如下:
(14)为什么用KS评估?
KS指标倾向于从概率角度衡量正负样本分布之间的差异。正是因为正负样本之间的模糊性和连续性(即y的定义并非是非黑即白),所以KS也是一条连续曲线。但最终为什么取一个最大值,主要原因是提取KS曲线中的一个显著特征,从而便于相互比较
(15)为什么通常认为KS在高于75%时就不可靠?
(16)F1-SCORE
召回率——灵敏度——TPR
特异度——1-FPR=1-FP/(FP+TN)=TN/(FP+TN)
关注的是P,一般超过threshold的就是P,threshold 的调整,不是随便调的,设的越高,灵敏度就越低,设的越低,假阳性就越多。
(17)PR曲线
https://blog.csdn.net/zwqjoy/article/details/84859405(关于模型评估指标)
(18) AdaBoost V.S. GBDT
和AdaBoost一样,Gradient Boosting也是重复选择一个表现一般的模型并且每次基于先前模型的表现进行调整。
可以说AdaBoost是GBDT特例。
区别: