随机森林混淆矩阵有什么用

随机森林混淆矩阵有什么用

随机森林混淆矩阵可以计算出一些常见的分类性能指标,如准确率、召回率、精确率和F1值等。通过这些指标,可以更全面地评估分类模型的表现,并针对性地进行参数调整、特征筛选等优化措施。

小编还为您整理了以下内容,可能对您也有帮助:

混淆矩阵有什么用?

混淆矩阵可以得出分类正确和错误的样本数量

混淆矩阵热力图什么意思

混淆矩阵热力图意思是机器学习中总结分类模型预测结果的情形分析表,以矩阵形式将数据集中的记录按照真实的类别与分类模型作出的分类判断两个标准进行汇总。 示例:

2. python 函数 官方文档中给出的用法是 sklearn.metrics.confusion_matrix(y_true, y_pred, labels=None, sample_weight=None) y_true

day03-二分类问题

输入变量X和输出变量Y有不同类型,可以连续,可以离散。根据输入输出变量的不同类型,对预测人物给予不同的名称。输入输出变量均为连续变量的预测问题称为回归问题;输出变量为有限个离散变量的预测问题称为分类问题;输入输出变量均为变量序列问题称为标注问题

二分类问题就是简单的“是否”,“有无”问题,例如输出变量为0或1。

1、准确率

2、混淆矩阵

3、精准率、召回率、F1_score

4、auc

5、logloss

1、逻辑回归

2、svm

3、决策树

4、随机森林

5、Adaboost

6、xgboost

7、lightgbm

8、catboost

9、朴素贝叶斯

1.1 线性回归原理

概念:

线性回归是一种通过线性组合来进行预测的线性模型,其目的是找到一条直线或者一个平面或者更高维度的超平面,使得预测值与真实值之间的误差最小化。

线性回归:

线性回归是通过数据在N维空间找到h(x)来描述这些规律,这个过程称为拟合。h(x)的预测值与真实值会有偏差,也称为残差。线性回归一般使用残差的平方来计算损失,即损失函数为:

优缺点:

优:权重w是每个变量x的权重,通过w的大小可以看出每个x的重要性,有很好的解释性

缺:非线性数据拟合不好

1.2 逻辑回归原理

从1.1中可知,h(x)预测值是连续的,是一个回归模型。但是如果我们希望输出是离散的,则需要将h(x)进行一个函数转换,变成g(Y),其中g(Y)中的某些值属于类别1,另外的属于其他类别,这样的模型则为二分类模型。

此时g可以为:

g函数也被称为sigmoid函数。

当sigmoid函数计算出的值大于0.5的归为类别1,小于0.5的归为类别0

假设预测真实样本为1的概率为pi,则预测真实样本为0的概率为1-pi,那么预测概率为:

使用随机梯度下降优化损失函数:

损失函数:

数据挖掘实战之随机森林算法使用

阅读路线:

近来有同学问道,有没有数据挖掘的案例可以来练习下,主要是来通过案例来知道算法是如何使用的。

下面就以 港股打新 这个金融项目为例,来做个预测,先来说下什么是打新;打新,就是用资金参与新股申购,如果中签的话,就买到了即将上市的股票。

此次分析的目的是为了深入打新数据,找到最优算法,挖掘出影响打新的关键因素,找到可能要破发的新股,从而减少新股破发的风险,提高盈利。

打新的本质,也即是在股票上市后卖出,赚取其中的差价。一般在买到的第一天就会卖掉,当然第一天上升的股票有涨有跌,为了能够减少风险,会根据历史数据来做个预判,这里把涨幅10%以下记为0,涨幅10%以上记为1,很明显这也是二分类的预测问题

对于本项目而言,最终的评价标准是要求在精确度达到97%的情况下,最大化召回率。这里是要求尽可能提高召回率,自己本身对风险比较厌恶,宁可错杀,也不会愿意申购上市就要的破发的新股

对于评价标准,一般用的是PR曲线和ROC曲线。ROC曲线有一个突出优势,就是不受样本不均衡的影响 ROC曲线不受样本不均衡问题的影响

1.数据总体情况

港股数据主要来自两个方面, 利弗莫尔证券数据 和 阿思达克保荐人近两年数据 ,处理之后是这样的:

数据一共有17个特征,除了目标变量is_profit,还有16个特征。

以上的数据指标可以梳理为两类,一类是股票相,如 关,一类是保荐人指标,

2.数据处理方面不用管

一般特征工程主要从以下方面来进行:衍生特征、异常值处理、缺失值处理、连续特征离散化、分类变量one-hot-encode、标准化等,本篇文章主要讲解随机森林算法使用,暂不对特征工程做过多的展示了

从 使用随机森林默认的参数 带来的模型结果来看,auc指标是0.76,效果还可以。

为了更好的理解上述,这里有几个知识点需要来解释下:

返回的是一个n行k列的数组,第i行第j列上的数值是模型预测第i个预测样本的标签为j的概率。所以每一行的和应该等于1;本文中predict_proba(x_test)[:,1]返回的是标签为0的概率。

(a).混淆矩阵

混淆矩阵如下图分别用”0“和”1“代表负样本和正样本。FP代表实际类标签为”0“,但预测类标签为”1“的样本数量。其余,类似推理。

(b).假正率和真正率

假正率(False Positive Rate,FPR)是实际标签为”0“的样本中,被预测错误的比例。真正率(True Positive Rate,TPR)是实际标签为”1“的样本中,被预测正确的比例。其公式如下:

(3).ROC曲线

下图的黑色线即为ROC曲线,ROC曲线是一系列threshold下的(FPR,TPR)数值点的连线。此时的threshold的取值分别为测试数据集中各样本的预测概率。但,取各个概率的顺序是从大到小的。然后也就是有了不同的RPR、TPR,且测试样本中的数据点越多,曲线越平滑:

AUC(Area Under roc Cure),顾名思义,其就是ROC曲线下的面积,在此例子中AUC=0.62。AUC越大,说明分类效果越好。

下面我们来看看RF重要的Bagging框架的参数,主要有以下几个:

(1) n_estimators:

也就是最大的弱学习器的个数。一般来说n_estimators太小,容易欠拟合,n_estimators太大,计算量会太大,并且n_estimators到一定的数量后,再增大n_estimators获得的模型提升会很小,所以一般选择一个适中的数值。默认是100。

(2) oob_score:

即是否采用袋外样本来评估模型的好坏。默认识False。个人推荐设置为True,因为袋外分数反应了一个模型拟合后的泛化能力。

(3) criterion:

即CART树做划分时对特征的评价标准。分类模型和回归模型的损失函数是不一样的。分类RF对应的CART分类树默认是基尼系数gini,另一个可选择的标准是信息增益。回归RF对应的CART回归树默认是均方差mse,另一个可以选择的标准是绝对值差mae。一般来说选择默认的标准就已经很好的。

从上面可以看出,RF重要的框架参数比较少,主要需要关注的是 n_estimators ,即RF最大的决策树个数。

下面我们再来看RF的决策树参数,它要调参的参数如下:

(1) RF划分时考虑的最大特征数max_features:

(2) 决策树最大深度max_depth:

默认可以不输入,如果不输入的话,决策树在建立子树的时候不会子树的深度。一般来说,数据少或者特征少的时候可以不管这个值。如果模型样本量多,特征也多的情况下,推荐这个最大深度,具体的取值取决于数据的分布。常用的可以取值10-100之间。

(3) 内部节点再划分所需最小样本数min_samples_split:

这个值了子树继续划分的条件,如果某节点的样本数少于min_samples_split,则不会继续再尝试选择最优特征来进行划分。默认是2.如果样本量不大,不需要管这个值。如果样本量数量级非常大,则推荐增大这个值。

(4) 叶子节点最少样本数min_samples_leaf:

这个值了叶子节点最少的样本数,如果某叶子节点数目小于样本数,则会和兄弟节点一起被剪枝。 默认是1,可以输入最少的样本数的整数,或者最少样本数占样本总数的百分比。如果样本量不大,不需要管这个值。如果样本量数量级非常大,则推荐增大这个值。

(5)叶子节点最小的样本权重和min_weight_fraction_leaf:

这个值了叶子节点所有样本权重和的最小值,如果小于这个值,则会和兄弟节点一起被剪枝。 默认是0,就是不考虑权重问题。一般来说,如果我们有较多样本有缺失值,或者分类树样本的分布类别偏差很大,就会引入样本权重,这时我们就要注意这个值了。

(6) 最大叶子节点数max_leaf_nodes:

通过最大叶子节点数,可以防止过拟合,默认是"None”,即不最大的叶子节点数。如果加了,算法会建立在最大叶子节点数内最优的决策树。如果特征不多,可以不考虑这个值,但是如果特征分成多的话,可以加以,具体的值可以通过交叉验证得到。

(7) 节点划分最小不纯度min_impurity_split:

这个值了决策树的增长,如果某节点的不纯度(基于基尼系数,均方差)小于这个阈值,则该节点不再生成子节点。即为叶子节点 。一般不推荐改动默认值1e-7。

上面决策树参数中最重要的包括最大特征数 max_features , 最大深度 max_depth , 内部节点再划分所需最小样本数 min_samples_split 和叶子节点最少样本数 min_samples_leaf

GridSearchCV的名字其实可以拆分为两部分,GridSearch和CV,即网格搜索和交叉验证。这两个名字都非常好理解。网格搜索,搜索的是参数,即在指定的参数范围内,按步长依次调整参数,利用调整的参数训练学习器,从所有的参数中找到在验证集上精度最高的参数,这其实是一个训练和比较的过程。

GridSearchCV可以保证在指定的参数范围内找到精度最高的参数,但是这也是网格搜索的缺陷所在,他要求遍历所有可能参数的组合,在面对大数据集和多参数的情况下,非常耗时。

通过RF框架以及RF决策树参数能够了解到重点需要调节以下的参数

主要需要关注的是 n_estimators ,即RF最大的决策树个数。

决策树参数中最重要的包括最大特征数 max_features , 最大深度 max_depth , 内部节点再划分所需最小样本数 min_samples_split 和叶子节点最少样本数 min_samples_leaf

输出结果为:

6.3最佳的弱学习器迭代次数,接着我们对决策树最大深度max_depth和内部节点再划分所需最小样本数min_samples_split进行网格搜索

输出结果

6.4最大特征数max_features做调参

输出结果:

6.5根据模型最佳参数进行测试

输出结果:0.7805947388486466,相比没有调参前,模型有不少的提高的,方便观察,用图形来看下ROC曲线图

6.6观察模型的重要特征

6.7最大召回率

最后得出我们想要的结果,精准率在 0.97 下,召回率 0.046

参考文章:

1.sklearn中predict_proba的用法例子

2.Python机器学习笔记 Grid SearchCV(网格搜索)

3.scikit-learn随机森林调参小结

4.ROC曲线和AUC值的计算

中红外光谱(MIR)的介绍

此本来自自己硕士论文的综述部分。

FT-MIR在检测某特定物质时会根据该物质的官能键与官能团,产生属于该物质的特征波。研究表明在使用多自变量建立预测某物质模型的过程中,选出该物质特征波来作为自变量,不仅能提高模型预测的准确性,还能增强模型的稳定性(Leardi et al 2002, Zou et al 2010, Vohland et al 2014)。John等较早提出了特征选择主要分为两大类,第一类为过滤法,其是于预测变量的特征选择算法,并且单独度量各个自变量的重要性,过滤掉在数据分析中几乎没有用的特征;第二类为封装法,其是将所有自变量逐一添加或删除应用在某类算法中,根据模型结果找到最佳自变量组合(John et al 1994)。两者各有优缺点,过滤法速度快,但其不能根据建立模型的结果来分析自变量,而封装法能够结合建立模型准确性的结果来选择变量,但其计算量比过滤法大且有过拟合的风险(Saeys et al 2007)。但随后还出现了第三种嵌入法,其在算法构建中加入了特征波选择,与封装法类似,但其不能用于其他算法(只能适用筛选特征波的算法),优点在于比封装法降低了计算量(Saeys et al 2007)。所以比较合理的筛选光谱特征波方法是先使用过滤法缩小范围,再使用封装法或嵌入法筛选最终特征波。

定性判别分析(Discriminant Analysis)是在已知特征与类别的训练集上建立判别模型,再使用判别模型对已知特征与未知类别的新数据进行分类预测。

定性判别分析根据判别准则可分为Fisher判别、距离判别和Bayes判别。Fisher判别是将数据投影到某一个维度上,使各类的总体之间最大限度分开,再选择合适判别规则将新的样本分类判别。距离判别是先计算出已知分类的各类别的重心,再对未知类别的数据计算其与各类重心的距离,与某类重心距离最近则归于该类。Bayes判别是由先验概率计算出后验概率,再根据后验概率分布对新数据作出统计推断。

定量分析(Quantitative Analysis)是通过某类算法使自变量能够较为精确地预测因变量的一种回归方法,且因变量一般为连续变化的数据,其一般分为线性、广义线性与非线性三种。主要有:偏最小二乘法(Partial least squares, PLS),主成分分析-线性判别分析(PCA-LDA),决策树(Decision Tree, DT),人工神经网络(Artificial neural network,ANN),支持向量机(Support Vector Machine, SVM),K最近邻算法(K Nearest Neighbor, KNN),逻辑回归(Logistic Regression, LR),随机森林(Random Forest, RF)。这8中算法的理论部分请查看 机器学习 部分 11 与 12 篇。

定性判别模型的评价可使用混淆矩阵,混淆矩阵及其相关参数是最简单与最直观的评价指标之一,以二分类为例,混淆矩阵如表1-3,可基于混淆矩阵计算出判别模型的评价指标

推导出的参数有:

定量分析模型的评价指标主要有决定系数(coefficient of determination,R2 )和均方根误差(Root Mean Squared Error,RMSE),R2值越大表示模型越好(0≤R2≤1),RMSE越小表示模型越好(RMSE≥0)。

计算公式如下:

在不同数据集中,可分别计算出相应的R2与RMSE参数。在训练集中,其中公式(2)中n=样本数-主成分数-1时,全部数据建模的参数表示为校正R2C(Calibration coefficient of determination,R2C)与校正RMSEC(Root mean square error of calibration,RMSEC);当公式(2)中n=样本数-交叉验证时留出的样本数时,建模的参数表示为交叉R2CV(Cross-calibration coefficient of determination,R2CV)与交叉RMSECV(Root mean square error of cross-calibration,RMSECV);在测试集中,当公式(2)中n=样本数时,验证结果得到的参数为验证R2V(Validation coefficient of determination,R2V)与验证RMSE p (Root mean square error of validation,RMSEp)。

支持向量机

支持向量机(support vector machines,SVM)是一种二分类模型,它的基本模型是定义在特征空间上的 间隔最大的线性分类器 ,间隔最大使它有别于感知机;SVM还包括 核技巧 ,这使它成为实质上的非线性分类器。 SVM的学习策略就是间隔最大化 ,可形式化为一个求解凸二次规划的问题,也等价于正则化的损失函数最小值问题。SVM的学习算法就是求解凸二次规划的最优算法。

    它在手写识别数字和人脸识别中应用广泛,在文本和超文本的分类中举足轻重,因为SVM可以大量减少标准归纳和转换设置中对标记训练实例的需求。同时, SVM也被用来执行图像的分类,并用于图像分割系统 。实验结果表明,在仅仅三到四轮相关反馈之后,SVM就能实现比传统的查询细化方案高出一大截的搜索精度。除此之外,生物学和许多其他学科都是SVM的青睐者,SVM现在已经广泛用于 蛋白质分类 ,现在化合物分类的业界平均水平可以达到90%以上的准确率。在生物科学的尖端研究中,人们还使用支持向量机来识别用于模型预测的各种特征,以找出各种基因表现结果的影响因素。

SVM学习的基本想法是求解能够正确划分训练数据集并且几何间隔最大的分离超平面 。如下图所示, 即为分离超平面,对于线性可分的数据集来说,这样的超平面有无穷多个(即感知机), 但是几何间隔最大的分离超平面却是唯一的。

超平面与最近数据点之间的距离成为边距。可以将两个类分开的最佳或最佳超平面是具有最大边距的线。只有这些点与定义超平面和分类器的构造有关。这些点称为支持向量。他们支持或定义超平面。实际上,优化算法用于找到使裕度最大化的系数的值。

SVM的三层理解:

(1)线性可分支持向量机、硬间隔

(2)线性支持向量机、软间隔

(3)非线性支持向量机、Kernel SVM

支持向量机模型存在三宝:

(1)间隔:是指样本点到超平面的距离。 硬间隔 是指对给定的样本数据集中所以的样本都能正确分类。对于线性不可分的样本集,无法满足线性可分支持向量机的不等式约束,也就是不存在对所有样本都能正确分类的超平面。这种情况可能是因为问题本身是非线性的,也可能问题是线性可分的,但个别样本点标记错误或存在误差而导致样本集线性不可分。

因此,我们可以允许对少量的样本分类错误, 容忍特异点的存在,而对于去除特异点的样本集是线性可分的,这时称为软间隔 。

(2)对偶

(3)核技巧

支持向量机和感知机在某些方面很相似,其相同点 :

(1)都是二分类模型

(2)都是通过一个分离超平民啊对特征进行分类

不同点:

(1)SVM是特殊的感知机

(2)感知机是用误分类最小的策略,求得分离超平面,这时存在无穷个解,感知机利用间隔最大化求得最优分离超平面。如下图所示。

    图中的蓝色和圆点分别表示正负样本,对于这个二分类,从图中我们可知,在最上面的黄线和最下面的绿线之间的线条都是可以把训练样本集完全分开的,这就是感知机的原理,通过这些分离超平面把训练集分开,这样的分离超平面存在很多条,比如图中的虚线,从视觉上中间那条实线应该是众多线条中最优的一条,感知机对于学习的分离超平面由于优化算法、学习率等不同因素,会随机地学习到这众多分离超平面的一条,当学习到的是靠近上下边缘的分离超平面是,对于一个未知样本,当这个样本稍微浮动一下,模型就很可能对他进行误分类了,因此鲁棒性很低,而支持向量机的目标是找到图中中间那条最优的分离超平面。

为求解支持向量机的最优化问题,我们将公式10作为原始问题,应用拉格朗日对偶性,通过求解对偶问题得到原始问题的最优解,这就是支持向量机的对偶算法。 在约束最优化问题中,常常利用拉格朗日对偶性将原始问题转换为对偶问题,通过解对偶问题而得到原始问题的解(最优解是反的,值是一样的 ) 。这是因为:

    1)对偶问题的对偶是原问题

    2)无论原始问题与约束条件是否是凸的,对偶问题都是凹问题,加个负号就变成凸问题了,凸问题容易优化。

    3)对偶问题可以给出原始问题一个下界

    4)当满足一定条件时,原始问题与对偶问题的解是完全等价的

LinearSVC()类的主要参数:

(1)C: float, default=1.0, 惩罚系数,必须大于0,默认值1.0。用于设置对错误分类的惩罚强度,对于设置对错误分类的惩罚强度,对于完全线性可分的硬间隔问题不需要设置。

(2)fit_intercept: boolean, optional(default=True):是否计算截距,默认为True。如果数据均值为0,则可以选择False不计算截距。

(3)multi_class: string,”ovr“ or "crammer_singer"(default='ovr'):多类别分类策略开关。对于多元分类问题,选择'ovr'将使用多类别策略(one-vs-set)直接对多个类别进行分类(默认方法);选择"crammer_singer"将主次进行二值分类。

(4)class_weight:dict or "balanced", default=None,特征变量的加权系数。用于为某个特征变量设置权重,默认所有特征变量的权重相同。

结论:1)线性核,尤其是多项式核函数在高次项时计算非常缓慢。

            2)rbf和多项式核函数都不擅长处理量纲不统一的数据集

这两个缺点都可以由数据无量纲化来解决。因此,SVM执行之前,非常推荐先进行数据的无量纲化!

svc.score(): 返回给定测试数据和标签的平均准确度。

    首先,分类模型天生会倾向于多数的类,让多数类更容易被判断正确,少数类被牺牲掉 。因为对于模型而言,样本量越大的标签可以学习的信息越多,算法就会更加依赖于从多数类中学到的信息来进行判断。如果我们希望捕获少数类,模型就会失败。 其次,模型评估指标会失去意义 。这种分类状况下,即便模型什么也不做,全把所有人都当成不会犯罪的人,准确率也能非常高,这使得模型评估指标accuracy变得毫无意义,根本无法达到我们的“要识别出会犯罪的人”的建模目的。

    所以现在,我们首先要让算法意识到数据的标签是不均衡的,通过施加一些惩罚或者改变样本本身,来让模型向着捕获少数类的方向建模。然后,我们要改进我们的模型评估指标,使用更加针对于少数类的指标来优化模型。 要解决第一个问题,我们在逻辑回归中已经介绍了一些基本方法,比如上采样下采样 。但这些采样方法会增加样本的总数,对于支持向量机这个样本总是对计算速度影响巨大的算法来说,我们完全不想轻易地增加样本数量。况且,支持向量机中的决策仅仅受到决策边界的影响,而决策边界仅仅受到参数C和支持向量的影响,单纯地增加样本数量不仅会增加计算时间,可能还会增加无数对决策边界无影响的样本点。因此在支持向量机中,我们要大力依赖我们调节样本均衡的参数:SVC类的class_weight和接口fit可以设定的sample_weight。

    混淆矩阵是二分类问题的衡量指标体系,在样本不平衡时极其有用。在混淆矩阵中,我们将少数类认为是正例,多数类认为是负例。在决策树,随机森林这些普通的分类算法里,即是说少数类是1,多数类是0。在SVM里,就是说少数类是1,多数类是-1。普通的混淆矩阵,一般使用{0,1}来表示。混淆矩阵中,永远是真实值在前,预测值在后。

ROC曲线及相关问题

    基于混淆矩阵,总共有六个指标:准确率Accuracy,精确度Precision,召回率Recall,精确度和召回度的平衡指标F measure, 特异度Specificity,以及假正率FPR。

    其中,假正率有一个非常重要的应用:我们在追求较高的Recall的时候,Precision会下降,就是说随着更多的少数类被捕捉出来,会有更多的多数类被判断错误,但我们很好奇,随着Recall的逐渐增加,模型将多数类判断错误的能力如何变化呢?我们希望理解,我每判断正确一个少数类,就有多少个多数类会被判断错误。假正率正好可以帮助我们衡量这个变化。相对的,Precision无法判断这些判断错误的多数类在全部多数类中究竟占多大的比例,所以无法在提升Recall的过程中也顾及到模型整体的Accuracy。因此, 我们可以使用Recall和FPR之间的平衡,来替代Recall和Precision之间的平衡,让我们衡量模型在尽量捕捉少数类的时候,误伤多数类的情况如何变化,这就是我们的ROC曲线衡量的平衡 。

    ROC曲线,全称The Receiver Operating Characteristic Curve。这是一条以下不同阈值下的假正率FPR为横坐标,不同阈值下的召回率Recall为纵坐标的曲线。

优点:

(1)有严格的数学理论支持,可解释性强,不依靠统计方法,从而简化了通常的分类和回归问题

(2)解决小样本下机器学习问题;

(3)能找出对任务至关重要的关键样本(即:支持向量)

(4)采用核技巧之后,可以处理非线性分类/回归任务;可以解决高维问题,即大型特征空间;

(5)最终决策函数只由少数的支持向量所确定,计算的复杂性取决于支持向量的数目,而不是样本空间的维数,这在某种意义上避免了”维数灾难“。

缺点:

(1)训练时间长。当采用SMO算法时,由于每次都需要挑选一对参数,因此时间复杂度 ,其中N为训练样本的数量;

(2)当采用核技巧时,如果需要存储核矩阵,则空间复杂度为 。对非线性问题没有通用解决方案,有时候很难找到一个合适的核函数;

(3)对于核函数的高维映射解释力不强,尤其是径向基函数;

(4)模型预测时,预测时间与支持向量的个数成正比。当支持向量的数量较大时,预测计算复杂度较高。

(5) 对缺失数据敏感;

因此支持向量机目前只适合小批量样本的任务,无法适应百万条甚至上亿样本的任务 。

    SVM主要用于分类问题,主要的应用场景有字符识别、面部识别、行人检测、文本分类等领域。 在机器学习领域,SVM是有监督的学习模型,通常用来进行模式识别、分类(异常值检测)以及回归分析 。

ROC曲线——相关文献实例、原理和绘制方法

数据分析最让人着迷的一种用途是可以基于现有数据创建能够区分不同类型情景的机器学习预测模型。通过定义明确的模型,可以确定能够预测结果的最重要影响因素,为战略假设开发有价值的洞察力,甚至可以通过友好的用户界面将模型的逻辑实现到软件应用程序中。

首先,我们需要评估构建好的预测模型是否具有良好准确的预测能力!比如,如果我们的电子邮件程序的垃圾邮件分类器只能检测到50%的不需要的电子邮件或请求,我们都会非常愤怒。本文将讨论如何使用经典工具来评估预测模型:接收器操作特性(ROC)曲线。

本文主要分为三个部分整理ROC曲线相关内容,可根据自己的需要进行挑选:

1、使用ROC曲线分析的相关文献实例

2、ROC曲线的原理和历史

3、如何绘制ROC曲线

从一篇SCI出发: Improvement of Insulin Sensitivity after Lean Donor Feces in Metabolic Syndrome Is Driven by Baseline Intestinal Microbiota Composition

这是阿姆斯特丹大学学术医学中心在2017年发表在cell子刊上的文献,其中一个highlight提到:Response to lean donor FMT is driven by baseline fecal microbiota composition,使用了ROC曲线来评估预测模型的好坏。

为了比较异体FMT中菌群与效果之间的关系,首先按照FMT前后Rd值的变化将患者分为responders组和non-responders组,并比较了两组的菌群差异,从菌群多样性变化来看,基于Shannon指数发现,两组的多样性均没有发生显著改变,然而,两组基线时的菌群多样性却又显著差异(图5A),具体表现为non-responders的基线菌群多样性显著高于responders。随后,作者使用了弹性网络算法elastic net algorithm ( Zou and Hastie, 2005 )区分responders和non-responders,为了避免过度拟合,在数据的训练分区(80%)上使用了十折交叉验证,剩下的20%样品用作测试数据集。要选择的参数是 L1,L2范数和正则化阈值之间的比率。稳定性选择采用80% 的随机二次抽样方法进行,共100次。在稳定性选择过程中,计算所有权重系数为非零的特征。这些计数被归一化并转换为稳定系数,对于总是被选择的特征值在1.0之间,对于从未被选择的特征值在0.0之间。通过随机试验评价弹性网络算法所得结果的统计有效性。按照程序将结果变量(例如,同种异体相对于自体或应答者相对于无应答者)随机重组,同时保留相应的微生物谱。重复100次,每次计算受试者-工作特征-曲线下面积(ROC AUC)评分。用于二进制分类任务的性能度量是 ROC AUC。ROC 可以理解为一个正确分类同种异体受试者与自体受试者或有效者与无效者的概率图。数据集中的交叉验证是通过随机隐藏模型中20% 的受试者并评估该组的预测质量来完成的。ROC AUC 评分用0.5 AUC 来衡量分类模型的预测准确性,对应于一个随机结果。定义了一个临界值0.05,并将原始数据集的真实 AUC 与此值进行了比较。

作者通过ROC曲线评估了基线菌群组成预测6周代谢反应的模型,显示AUC=0.88,模型良好。

从这篇文献了解到ROC曲线可用于评估某个寻找biomarkers的预测模型的好坏。

再从一篇SCI了解: Alterations in the gut microbiome and metabolism with coronary artery disease severity

这是一篇本课题组与北京协和医学院合作在2019年发表的文章,关注了不同冠状动脉疾病Coronary artery disease (CAD)类型患者的肠道菌群区分差异。其中,作者通过ROC曲线评估了区分不同CAD亚型(稳定型冠状动脉疾病(SCAD) ,不稳定型心绞痛(UA)和心肌梗死(MI))的特征共变化菌群和代谢物随机森林模型,得到比较良好的预测结果。

Subgroup identification and prediction based on CAGs and CAD-associated metabotypes

为了确定肠道菌群中的 CAGs 和代谢产物模块是否可以作为鉴别冠心病不同阶段与正常冠状动脉的生物标志物,根据24个 CAGs 和72个血清代谢类型构建了随机森林模型对冠心病不同阶段进行分类,并利用 ROC曲线(ROC)曲线对分类进行了检验(详情见“材料和方法”一节)。总共构建了5个预测模型(Control vs. CAD, Control vs. SCAD, SCAD vs. UA, SCAD vs. ACS和UA vs. MI)。

随后,作者再通过招募新队列使用该模型进行分类预测,进一步论证该疾病亚型识别模型的潜在分类能力。

小结:从这两篇文献来看,作者均通过某个分类法机器学习预测模型寻找biomarkers,然后使用ROC曲线对模型进行评估。因此,我们可以初步得知,ROC曲线是用于检验构建的预测模型好坏的一种衡量方法。那么除了这种用途,ROC曲线还能做什么呢?

为了进一步了解并应用ROC曲线,我们需要首先了解ROC曲线的原理和过往↓

关于ROC曲线相关介绍的文章非常多,这里我摘抄出个人认为比较详细,可用性强的文章,加以理解。

一、评估预测模型的方法

首先,我们应该了解到预测模型的类型可以分为回归模型和分类模型(分类模型又有两类算法:分类输出型和概率输出型,这里就不一一赘述),而不同模型的评估度量也是不同的, 如何评估模型好坏 , 机器学习(二十四)——常见模型评估方法 , 分类模型的评估方法简介 首先需要了解自己构建的预测模型类型来决定评估方法,并不局限于使用ROC曲线进行评估。

ROC曲线原理:

关于ROC曲线的概念和意义可参考: ROC曲线的概念和意义

英文比较好的话也可以看看这篇: ROC curves – what are they and how are they used?

为了更直观的理解ROC,也可以看看这个视频: ROC and AUC, Clearly Explained!

受试者工作特征曲线(receiver operator characteristic curve, ROC曲线),最初用于评价雷达性能,又称为接收者操作特性曲线。ROC曲线其实就是从混淆矩阵衍生出来的图形,以真阳性率(灵敏度,Sensitivity)为纵坐标,假阳性率(1-特异度,1-Specificity)为横坐标绘制的曲线。

其自变量(检验项目)一般为连续性变量(如蛋白质因子、菌株、代谢物等的检测丰度或含量),因变量(金标准,如某疾病亚型分类、治疗响应和无响应、患病和未患病)一般为二分类变量。

ROC曲线图形:随着阈值的减小,更多的值归于正类,敏感度和1-特异度也相应增加,所以ROC曲线呈递增趋势。那条45度对角线是一条参照线,也就是说ROC曲线要与这条曲线比较。简单的说,如果我们不用模型,直接随机把客户分类,我们得到的曲线就是那条参照线,然而我们使用了模型进行预测,就应该比随机的要好,所以ROC曲线要尽量远离参照线,越远,我们的模型预测效果越好。

ROC曲线就是用来判断诊断的正确性,最理想的就是曲线下的面积为1,比较理想的状态就是曲线下的面积在0.8-0.9之间,0.5的话对实验结果没有什么影响。

提到ROC曲线,就离不开AUC(ROC曲线下面积),其判定方法为AUC应该大于0.5。ROC曲线是根据与对角线进行比较来判断模型的好坏,但这只是一种直觉上的定性分析,如果我们需要精确一些,就要用到AUC,也就是ROC曲线下面积(AUC)。

从AUC判断分类器(预测模型)优劣的标准:

AUC = 1,是完美分类器,采用这个预测模型时,存在至少一个阈值能得出完美预测。绝大多数预测的场合,不存在完美分类器。

0.5 < AUC < 1,优于随机猜测。这个分类器(模型)妥善设定阈值的话,能有预测价值。

AUC = 0.5,跟随机猜测一样(例:丢铜板),模型没有预测价值。

AUC < 0.5,比随机猜测还差;但只要总是反预测而行,就优于随机猜测。

看上图,参考线的面积是0.5,ROC曲线与它偏离越大,ROC曲线就越往左上方靠拢,它下面的面积(AUC)也就越大,这里面积是0.869。我们可以根据AUC的值与0.5相比,来评估一个分类模型的预测效果。

二、ROC曲线的历史和关键值

这里推荐阅读这篇: 机器学习基础(1)- ROC曲线理解 。这里从最初雷达兵使用ROC曲线评估的故事说起,言简意赅。

ROC曲线最初的研究是为了确定美国雷达“接收机操作员”是如何漏掉日本飞机的。在模型预测判断中,会出现真阳、假阳、真阴和假阴的三种情况,而不同雷达兵都可能有自己的一套评判标准,对每个接收的信号是大鸟还是轰炸机,每个雷达兵会给出自己的判断结果,这样每个雷达兵就都能计算出一个ROC曲线上的关键点(一组FPR,TPR值),把大家的点连起来,也就是最早的ROC曲线了。

ROC曲线需要了解几个关键值:

敏感性: 正确识别真阳性的比例。在这种情况下,健康患者的比例由诊断工具正确识别。这有时被称为“召回”。

SN =真阳性/(真阳性+假阴性)

逆(1灵敏度)=  假负率 。未被该工具检测到的健康患者被错误地识别为患有CAD。假阴性也称为II型错误。

特异性: 正确识别真阴性的比例。在这种情况下,通过诊断工具正确识别CAD患者的比例。

SP =真阴性/(真阴性+误报)

逆(1-特异性)=  假阳性率 。CAD患者被错误地识别为无CAD。误报也称为I型错误。

积极预测价值: 该工具报告的阳性比例,实际上是积极的。对于诊断工具报告缺乏CAD的患者组,PPV是实际上没有患病的患者的比例。这有时被称为“精确度”。

PPV =真阳性/(真阳性+误报)

负面预测值: 该工具报告的负面影响的比例,实际上是负面的。对于诊断工具报告存在CAD的患者组,NPV是实际上没有CAD的患者的比例。

NPV =真阴性/(真阴性+假阴性)

这里可以借助混淆矩阵加以理解:

TP(True Positive): 真实为0,预测也为0

FN(False Negative): 真实为0,预测为1

FP(False Positive): 真实为1,预测为0

TN(True Negative): 真实为0,预测也为0

三、ROC曲线的主要作用

1、ROC曲线能很容易地查出任意界限值时的对疾病的识别能力。

2、选择最佳的诊断界限值。

3、两种或两种以上不同诊断试验对疾病识别能力的比较。在对同一种疾病的两种或两种以上诊断方法进行比较时,可将各试验的ROC曲线绘制到同一坐标中,以直观地鉴别优劣,靠近左上角的ROC曲线所代表的受试者工作最准确。亦可通过分别计算各个试验的ROC曲线下的面积(AUC)进行比较,哪一种试验的AUC最大,则哪一种试验的诊断价值最佳。

四、交叉验证和过拟合问题

参考: 你真的了解交叉验证和过拟合吗?

机器学习】Cross-Validation(交叉验证)详解

10折交叉验证(10-fold Cross Validation)与留一法(Leave-One-Out)、分层采样(Stratification)

意识到过拟合好像也是个棘手的问题,所以在这里补充一下:

简单来讲,当 train set 误差较小,而 test set 误差较大时,我们即可认为模型过拟合。这句话表达的另一层意思是,模型评估指标的方差(variance)较大,即可认为模型过拟合。另外,无论监督学习还是非监督学习,均存在过拟合的问题。

有一个比喻还不错,这里也摘抄下来:

语文老师 让同学A 解释一个句子:  ‘某鲁迅先生的文章~~~~~~~~’

欠拟合:    差生: 这是个什么鬼东西,比例哔哩哔哩~~~~

过拟合:    语文老师的解释: ‘表面上看是~~~,但其实~~~~,本质上~~~~~~,反映了~~~~心情,烘托了~~~气氛~~~’

正常:        当时鲁迅先生觉得天色晚了,该休息了。

那么,如何才能够在一定程度上避免过拟合呢?这就引出了交叉验证:

最简单的判断模型是否过拟合的方法,就是通过training accuracy 和 test accuracy 数值大小,直观的判断模型是否过拟合。例如,训练集的准确率为90%,而测试集的准确率为70%,那么我们可以认为模型过拟合。不过,这种方法没有明确的判断标准,完全靠个人的主观判断——“感觉训练和测试的误差相差有点大,有可能过拟合”。

如何利用交叉验证避免过拟合?

避免模型过拟合的方法,总结大概以下几点:

    - 重新清洗数据(删除稀疏特征、对噪声数据进行处理(删除/替换))

  - 重新采样(改变采样方法等)

  - 增加训练数据

  - 采用交叉验证训练模型

  - 重新筛选特征

  - 降低模型复杂度(增加正则项:L1,L2)

  - dropout(神经网络中,让神经元一定的概率不工作)

这里探讨如何利用交叉验证来避免模型过拟合:

第一个作用是对模型的性能进行评估 。当我们通过一次划分样本对模型进行训练和测试时,由于样本划分的偶然性,会导致我们对模型的评估不准确。因此,可以采用交叉验证对模型进行评估(一般采用5折或10折,sklearn默认采用的是3折),以 n 折交叉验证结果的均值,作为模型的性能评估。

第二个作用就是用来避免过拟合 。例如当我们进行10折交叉验证时,训练了10次,得到了10个模型,每个模型的参数也是不同的,那么我们究竟用哪个模型作为我们最终的模型呢?答案是: 一个都不用!我们要利用全量数据重新训练出一个最终模型!

关于实现ROC曲线的绘制,可通过多种途径进行,这里列出一些可操作平台和方法:

1、SPSS: 如何用SPSS做ROC曲线分析?看这1篇就够了!

2、R语言: R语言逻辑回归、ROC曲线和十折交叉验证

                    ROC曲线基于R语言-(pROC包)

                    R语言pROC包绘制ROC曲线

3、Python: 机器学习基础(1)- ROC曲线理解

                    ROC原理介绍及利用python实现二分类和多分类的ROC曲线

4、Matlab: Matlab绘图——ROC曲线绘制(官方demo)

                     ROC曲线详解及matlab绘图实例

ROC曲线的初步学习就到这里,我们初步了解到ROC曲线最初是用来评估雷达兵判断的轰炸机信号准确性的方法,随后沿用到了医学指标的判定上,在生活中应用广泛。ROC曲线可用于查出任意界限值时的对疾病的识别能力,选择最佳的诊断界限值,还可以用在评估机器学习预测模型的好坏上(目前好像这方面用的比较多)。当然,还有一些问题值得讨论,比如,何时需要使用ROC曲线,S折交叉验证平均ROC曲线如何绘制,等等。在机器学习模型构建过程中,训练集和测试集的建立,模型的交叉验证和ROC曲线评估的结合,还需要继续学习。

Kootte RS, Levin E, Salojärvi J, Smits LP, Hartstra AV, Udayappan SD, Hermes G, Bouter KE, Koopen AM, Holst JJ, Knop FK, Blaak EE, Zhao J, Smidt H, Harms AC, Hankemeijer T, Bergman JJGHM, Romijn HA, Schaap FG, Olde Damink SWM, Ackermans MT, Dallinga-Thie GM, Zoetendal E, de Vos WM, Serlie MJ, Stroes ESG, Groen AK, Nieuwdorp M. Improvement of Insulin Sensitivity after Lean Donor Feces in Metabolic Syndrome Is Driven by Baseline Intestinal Microbiota Composition. Cell Metab. 2017 Oct 3;26(4):611-619.e6. doi: 10.1016/j.cmet.2017.09.008. PMID: 28978426.

Liu H, Chen X, Hu X, Niu H, Tian R, Wang H, Pang H, Jiang L, Qiu B, Chen X, Zhang Y, Ma Y, Tang S, Li H, Feng S, Zhang S, Zhang C. Alterations in the gut microbiome and metabolism with coronary artery disease severity. Microbiome. 2019 Apr 26;7(1):68. doi: 10.1186/s40168-019-0683-9. PMID: 31027508; PMCID: PMC6486680.

Rodriguez-Ruiz A, Lång K, Gubern-Merida A, Broeders M, Gennaro G, Clauser P, Helbich TH, Chevalier M, Tan T, Mertelmeier T, Wallis MG, Andersson I, Zackrisson S, Mann RM, Sechopoulos I. Stand-Alone Artificial Intelligence for Breast Cancer Detection in Mammography: Comparison With 101 Radiologists. J Natl Cancer Inst. 2019 Sep 1;111(9):916-922. doi: 10.1093/jnci/djy222. PMID: 30834436; PMCID: PMC6748773.

Duclos G, Bobbia X, Markarian T, Muller L, Cheyssac C, Castillon S, Resseguier N, Boussuges A, Volpicelli G, Leone M, Zieleskiewicz L. Speckle tracking quantification of lung sliding for the diagnosis of pneumothorax: a multicentric observational study. Intensive Care Med. 2019 Sep;45(9):1212-1218. doi: 10.1007/s00134-019-05710-1. Epub 2019 Jul 29. PMID: 31359081.

计算机视觉:随机森林算法在人体识别中的应用

摘 要

人体识别是计算机视觉领域的一大类热点问题,其研究内容涵盖了人体的监测与跟踪、手势识别、动作识别、人脸识别、性别识别和行为与事件识别等,有着非常广泛的应用价值。随机森林以它自身固有的特点和优良的分类效果在众多的机器学习算法中脱颖而出。随机森林算法的实质是一种树预测器的组合,其中每一棵树都依赖于一个随机向量,森林中的所有的向量都是同分布的。本文简单介绍了随机森林的原理,并对近几年来随机森林在姿势识别和人脸识别中的应用进行讨论。

1.人体识别概述

人体识别是计算机视觉领域的一大类热点问题,其研究内容涵盖了人体的监测与跟踪、手势识别、动作识别、人脸识别、性别识别和行为与事件识别等。其研究方法几乎囊括了所有的模式识别问题的理论与技术,例如统计理论,变换理论,上下文相关性,分类与聚类,机器学习,模板匹配,滤波等。人体识别有着非常广泛的应用价值。

绝大多数人脸识别算法和人脸表情分析算法在提取人脸特征之前,需要根据人脸关键点的位置(如眼角,嘴角)进行人脸的几何归一化处理。即使在已知人脸粗略位置的情况下,人脸关键点精确定位仍然是一个很困难的问题,这主要由外界干扰和人脸本身的形变造成。

当前比较流行的算法有:基于启发式规则的方法、主成分分析(PCA)、元分析(ICA)、基于K-L 变换、弹性图匹配等。

2.随机森林综述

随机森林顾名思义,使用随机的方式建立一个森林,森林里面有很多的决策树组成,随机森林的每一棵决策树之间是没有关联的。在得到森林之后,当有一个新的输入样本进入的死后,就让森林的每一棵决策树分别进行一下判断,看看这个样本应该属于哪一类(对于分类算法),然后看看哪一类能被选择最多,就预测这个样本为那一类。

随机森林是一种统计学习理论,其随机有两个方面:首先是在训练的每一轮中,都是对原始样本集有放回的抽取固定数目的样本点,形成k个互不相同的样本集。第二点是:对于每一个决策树的建立是从总的属性中随机抽取一定量的属性作属性集,这样对于k个树分类器均是不相同的。由随机生成的k个决策树组成了随机森林。

对于每一个决策树来讲,其属性是不断的选取具有最大信息增益的属性进行排列。整个随机森林建立后,最终的分类标准采用投票机制得到可能性最高的结果。

下图是随机森林构建的过程:

图1 随机森林构建过程

3.随机森林在人体识别中的应用

3.1 随机森林应用于姿势识别

以[1]一文来讨论,论文中所涉及到的人体识别过程主要分为两步,首先是,身体部位标记:对于从单张景深图像中对人体进行分段,并标记出关键节点。之后进行身体关节定位,将标记的各个人体部分重新映射到三维空间中,对关键节点形成高可靠的空间定位。

图2 深度图像-身体部位标记-关节投影

文的最主要贡献在于将姿势识别的问题转化成了物体识别的问题,通过对身体不同部位的空间位置的确定来实现,做到了低计算消耗和高精确度。在身体部位标记的过程中,将问题转化成了对每个像素的分类问题,对于每个像素点,从景深的角度来确定该点的局域梯度特征。该特征是点特征与梯度特征的良好结合。

举个例子,对于不同点的相同属性值的判别,如下图,图a中的两个测量点的像素偏移间均具有较大的景深差,而图b中的景深差则明显很小。由此看出,不同位置像素点的特征值是有明显差别的,这就是分类的基础。

图3 景深图像特质示例

文中对于决策树的属性的选择来说。由于某两个像素点、某些图像特征选取的随意性,将形成大量的备选划分形式,选择对于所有抽样像素对于不同的属性划分前后的信息熵增益进行比较,选取最大的一组ψ=(θ, τ)作为当前节点。(信息增益与该图像块最终是否正确地分类相关,即图像块归属于正确的关键特征点区域的概率。)

图4 决策时分类说明

决策树的建立后,某个叶子节点归属于特定关键特征点区域的概率可以根据训练图像最终分类的情况统计得到,这就是随机森林在实际检测特征点时的最重要依据。

在人体关节分类中,我们由形成的决策森林,来对每一个像素点的具体关节属性进行判断,并进行颜色分类。随机森林这种基于大量样本统计的方法能够对由于光照、变性等造成的影响,实时地解决关键特征点定位的问题。

如图所示,是对于景深图像处理后的结果展示。

图5 姿势识别处理结果

应该这样说,这篇文章在算法的层面对随机森林没有太大的贡献。在划分函数的形式上很简单。这个团队值得称道的地方是通过计算机图形学造出了大量的不同体型不同姿势的各种人体图像,用作训练数据,这也是成为2011年CVPR Best Paper的重要原因。正是因为论文的成果运用于Kinect,在工业界有着巨大的作用,落实到了商用的硬件平台上,推动了随机森林在计算机视觉、多媒体处理上的热潮。

3.2 随机森林应用于人脸识别

基于回归森林的脸部特征检测通过分析脸部图像块来定位人脸的关键特征点,在此基础上条件回归森林方法考虑了全局的脸部性质。对于[2]进行分析,这篇论文是2012年CVPR上的论文,本文考虑的是脸部朝向作为全局性质。其主要描述的问题是如何利用条件随机森林,来确定面部10个关键特征点的位置。与之前不同的是,在随机森林的基础上,加入了面部朝向的条件约束。

图6 脸部10个特征点

对于面部特征标记的问题转化成了对大量图像块的分类问题。类似于人体识别中的局域梯度特征识别。本文中,对于每一个图像块来说,从灰度值、光照补偿、相位变换等图像特征,以及该图像块中心与各个特征点的距离来判断图像块的位置特征。在决策树的属性确定过程,依然使用“最大信息熵增益”原则。

图7 条件随机森林算法说明

文中提出了更进一步基于条件随机森林的分类方法,即通过设定脸部朝向的约束对决策树分类,在特征检测阶段能够根据脸部朝向选择与之相关的决策树进行回归,提高准确率和降低消耗。此论文还对条件随机森林,即如何通过脸部朝向对决策进行分类进行了说明,但这与随机森林算法没有太大关系,这里就不再继续讨论了。随机森林这种基于大量样本统计的方法能够对由于光照、变性等造成的影响,实时地解决关键特征点定位的问题。

另一篇文章[3]对于脸部特征标记,提出了精确度更高、成本更低的方法。即,基于结构化输出的随机森林的特征标记方式。文中将面部划分为20个特征点,对于各个特征点来说,不仅有的图像块分类标记,还加入了例如,点4,对于其他嘴唇特征点3,18,19的依赖关系的判断。这样的方法使特征点标记准确率大大增加。

该方法依然是使用随机森林的方法,有所不同的是引入了如式中所示的与依赖节点之间的关系。对于决策树的建立依然是依赖信息熵增益原则来决定,叶子节点不仅能得到特征的划分还会得到该特征对依赖特征的贡献,最终特征节点的判断会综合原始投票及空间约束。

图8 脸部特征标记

图9 决策树依赖关系

例如当对下图中人脸特征点进行分类时,使用简单的随机森林方法,经过判断会将各个点进行标注,可以看到 红色的点,标注出的鼻子特征。如果利用依赖节点进行判断,鼻子的点会被局限在其他鼻子特征点的周围,进行叠加后,得到了这个结果。显然,对于此节点的判断,利用结构输出的方式,准确度更高了。

图10 结构化输出结果

4.随机森林总结

大量的理论和实证研究都证明了RF具有很高的预测准确率,对异常值和噪声具有很好的容忍度,且不容易出现过拟合。可以说,RF是一种自然的非线性建模工具,是目前数据挖掘算法最热门的前沿研究领域之一。具体来说,它有以下优点:

1.通过对许多分类器进行组合,它可以产生高准确度的分类器;

2.它可以处理大量的输入变量;

3.它可以在决定类别时,评估变量的重要性;

4.在建造森林时,它可以在内部对于一般化后的误差产生不偏差的估计;

5.它包含一个好方法可以估计遗失的资料,并且,如果有很大一部分的资料遗失,仍可以维持准确度。

6.它提供一个实验方法,可以去侦测变量之间的相互作用;

7.学习过程是很快速的;

8.对异常值和噪声具有很好的容忍度,且不容易出现过拟合;

随机森林的缺点:

1.对于有不同级别的属性的数据,级别划分较多的属性会对随机森林产生更大的影响,所以随机森林在这种数据上产出的属性权值是不可信的;

2.单棵决策树的预测效果很差:由于随机选择属性,使得单棵决策树的预测效果很差。

参考文献:

[1] Shotton, J.; Fitzgibbon, A.; Cook, M.; Sharp, T.; Finocchio, M.; Moore, R.; Kipman, A.; Blake, A., “Real-time human pose recognition in parts from single depth images,”Computer Vision and Pattern Recognition (CVPR), 2011 IEEE Conference on , vol., no., pp.1297,1304, 20-25 June 2011

[2] Dantone M, Gall J, Fanelli G, et al. Real-time facial feature detection using conditional regression forests[C]//Computer Vision and Pattern Recognition (CVPR), 2012 IEEE Conference on. IEEE, 2012: 2578-2585.

[3] Heng Yang, Ioannis Patras, “Face Parts Localization Using Structured-output Regression Forests”, ACCV2012, Dajeon, Korea.

本文转自:http://dataunion.org/12046.html,仅供学习交流

r使用随机森林实现所属类别的概率吗

用R做随机森林,先用训练集建模,之后用测试集进行预测,为什么总是显示allargumentsmusthavethesamelength?代码如下sub<-sample(1:nrow(dx),round(nrow(partd)/4))x1.rf<-randomForest(X1T~.,data=dx,importance=T,subset=-sub)pre1<-predict(x1.rf,data=dx,subset=sub)另外,随机森林的结果里给出的confusionmatrix是什么意思?和预测错误

质谱数据怎么用随机森林

1、数据预处理:对质谱数据进行预处理,比如去除噪声、标准化、归一化等。

2、数据划分:将数据集划分为训练集和测试集,一般采用交叉验证的方法。

3、特征提取:从质谱数据中提取特征向量,可以考虑基于峰的方式,例如峰的高度、宽度等特征属性。

4、随机森林模型训练:使用训练集训练随机森林模型,并根据验证集调整模型参数,如树的数量、树的深度、特征的选择等。

5、模型评估:用测试集进行模型评估,可以计算混淆矩阵、ROC曲线等评价指标,来评估分类器的性能。

混淆矩阵有什么用?

混淆矩阵可以得出分类正确和错误的样本数量

混淆矩阵热力图什么意思

混淆矩阵热力图意思是机器学习中总结分类模型预测结果的情形分析表,以矩阵形式将数据集中的记录按照真实的类别与分类模型作出的分类判断两个标准进行汇总。 示例:

2. python 函数 官方文档中给出的用法是 sklearn.metrics.confusion_matrix(y_true, y_pred, labels=None, sample_weight=None) y_true

day03-二分类问题

输入变量X和输出变量Y有不同类型,可以连续,可以离散。根据输入输出变量的不同类型,对预测人物给予不同的名称。输入输出变量均为连续变量的预测问题称为回归问题;输出变量为有限个离散变量的预测问题称为分类问题;输入输出变量均为变量序列问题称为标注问题

二分类问题就是简单的“是否”,“有无”问题,例如输出变量为0或1。

1、准确率

2、混淆矩阵

3、精准率、召回率、F1_score

4、auc

5、logloss

1、逻辑回归

2、svm

3、决策树

4、随机森林

5、Adaboost

6、xgboost

7、lightgbm

8、catboost

9、朴素贝叶斯

1.1 线性回归原理

概念:

线性回归是一种通过线性组合来进行预测的线性模型,其目的是找到一条直线或者一个平面或者更高维度的超平面,使得预测值与真实值之间的误差最小化。

线性回归:

线性回归是通过数据在N维空间找到h(x)来描述这些规律,这个过程称为拟合。h(x)的预测值与真实值会有偏差,也称为残差。线性回归一般使用残差的平方来计算损失,即损失函数为:

优缺点:

优:权重w是每个变量x的权重,通过w的大小可以看出每个x的重要性,有很好的解释性

缺:非线性数据拟合不好

1.2 逻辑回归原理

从1.1中可知,h(x)预测值是连续的,是一个回归模型。但是如果我们希望输出是离散的,则需要将h(x)进行一个函数转换,变成g(Y),其中g(Y)中的某些值属于类别1,另外的属于其他类别,这样的模型则为二分类模型。

此时g可以为:

g函数也被称为sigmoid函数。

当sigmoid函数计算出的值大于0.5的归为类别1,小于0.5的归为类别0

假设预测真实样本为1的概率为pi,则预测真实样本为0的概率为1-pi,那么预测概率为:

使用随机梯度下降优化损失函数:

损失函数:

数据挖掘实战之随机森林算法使用

阅读路线:

近来有同学问道,有没有数据挖掘的案例可以来练习下,主要是来通过案例来知道算法是如何使用的。

下面就以 港股打新 这个金融项目为例,来做个预测,先来说下什么是打新;打新,就是用资金参与新股申购,如果中签的话,就买到了即将上市的股票。

此次分析的目的是为了深入打新数据,找到最优算法,挖掘出影响打新的关键因素,找到可能要破发的新股,从而减少新股破发的风险,提高盈利。

打新的本质,也即是在股票上市后卖出,赚取其中的差价。一般在买到的第一天就会卖掉,当然第一天上升的股票有涨有跌,为了能够减少风险,会根据历史数据来做个预判,这里把涨幅10%以下记为0,涨幅10%以上记为1,很明显这也是二分类的预测问题

对于本项目而言,最终的评价标准是要求在精确度达到97%的情况下,最大化召回率。这里是要求尽可能提高召回率,自己本身对风险比较厌恶,宁可错杀,也不会愿意申购上市就要的破发的新股

对于评价标准,一般用的是PR曲线和ROC曲线。ROC曲线有一个突出优势,就是不受样本不均衡的影响 ROC曲线不受样本不均衡问题的影响

1.数据总体情况

港股数据主要来自两个方面, 利弗莫尔证券数据 和 阿思达克保荐人近两年数据 ,处理之后是这样的:

数据一共有17个特征,除了目标变量is_profit,还有16个特征。

以上的数据指标可以梳理为两类,一类是股票相,如 关,一类是保荐人指标,

2.数据处理方面不用管

一般特征工程主要从以下方面来进行:衍生特征、异常值处理、缺失值处理、连续特征离散化、分类变量one-hot-encode、标准化等,本篇文章主要讲解随机森林算法使用,暂不对特征工程做过多的展示了

从 使用随机森林默认的参数 带来的模型结果来看,auc指标是0.76,效果还可以。

为了更好的理解上述,这里有几个知识点需要来解释下:

返回的是一个n行k列的数组,第i行第j列上的数值是模型预测第i个预测样本的标签为j的概率。所以每一行的和应该等于1;本文中predict_proba(x_test)[:,1]返回的是标签为0的概率。

(a).混淆矩阵

混淆矩阵如下图分别用”0“和”1“代表负样本和正样本。FP代表实际类标签为”0“,但预测类标签为”1“的样本数量。其余,类似推理。

(b).假正率和真正率

假正率(False Positive Rate,FPR)是实际标签为”0“的样本中,被预测错误的比例。真正率(True Positive Rate,TPR)是实际标签为”1“的样本中,被预测正确的比例。其公式如下:

(3).ROC曲线

下图的黑色线即为ROC曲线,ROC曲线是一系列threshold下的(FPR,TPR)数值点的连线。此时的threshold的取值分别为测试数据集中各样本的预测概率。但,取各个概率的顺序是从大到小的。然后也就是有了不同的RPR、TPR,且测试样本中的数据点越多,曲线越平滑:

AUC(Area Under roc Cure),顾名思义,其就是ROC曲线下的面积,在此例子中AUC=0.62。AUC越大,说明分类效果越好。

下面我们来看看RF重要的Bagging框架的参数,主要有以下几个:

(1) n_estimators:

也就是最大的弱学习器的个数。一般来说n_estimators太小,容易欠拟合,n_estimators太大,计算量会太大,并且n_estimators到一定的数量后,再增大n_estimators获得的模型提升会很小,所以一般选择一个适中的数值。默认是100。

(2) oob_score:

即是否采用袋外样本来评估模型的好坏。默认识False。个人推荐设置为True,因为袋外分数反应了一个模型拟合后的泛化能力。

(3) criterion:

即CART树做划分时对特征的评价标准。分类模型和回归模型的损失函数是不一样的。分类RF对应的CART分类树默认是基尼系数gini,另一个可选择的标准是信息增益。回归RF对应的CART回归树默认是均方差mse,另一个可以选择的标准是绝对值差mae。一般来说选择默认的标准就已经很好的。

从上面可以看出,RF重要的框架参数比较少,主要需要关注的是 n_estimators ,即RF最大的决策树个数。

下面我们再来看RF的决策树参数,它要调参的参数如下:

(1) RF划分时考虑的最大特征数max_features:

(2) 决策树最大深度max_depth:

默认可以不输入,如果不输入的话,决策树在建立子树的时候不会子树的深度。一般来说,数据少或者特征少的时候可以不管这个值。如果模型样本量多,特征也多的情况下,推荐这个最大深度,具体的取值取决于数据的分布。常用的可以取值10-100之间。

(3) 内部节点再划分所需最小样本数min_samples_split:

这个值了子树继续划分的条件,如果某节点的样本数少于min_samples_split,则不会继续再尝试选择最优特征来进行划分。默认是2.如果样本量不大,不需要管这个值。如果样本量数量级非常大,则推荐增大这个值。

(4) 叶子节点最少样本数min_samples_leaf:

这个值了叶子节点最少的样本数,如果某叶子节点数目小于样本数,则会和兄弟节点一起被剪枝。 默认是1,可以输入最少的样本数的整数,或者最少样本数占样本总数的百分比。如果样本量不大,不需要管这个值。如果样本量数量级非常大,则推荐增大这个值。

(5)叶子节点最小的样本权重和min_weight_fraction_leaf:

这个值了叶子节点所有样本权重和的最小值,如果小于这个值,则会和兄弟节点一起被剪枝。 默认是0,就是不考虑权重问题。一般来说,如果我们有较多样本有缺失值,或者分类树样本的分布类别偏差很大,就会引入样本权重,这时我们就要注意这个值了。

(6) 最大叶子节点数max_leaf_nodes:

通过最大叶子节点数,可以防止过拟合,默认是"None”,即不最大的叶子节点数。如果加了,算法会建立在最大叶子节点数内最优的决策树。如果特征不多,可以不考虑这个值,但是如果特征分成多的话,可以加以,具体的值可以通过交叉验证得到。

(7) 节点划分最小不纯度min_impurity_split:

这个值了决策树的增长,如果某节点的不纯度(基于基尼系数,均方差)小于这个阈值,则该节点不再生成子节点。即为叶子节点 。一般不推荐改动默认值1e-7。

上面决策树参数中最重要的包括最大特征数 max_features , 最大深度 max_depth , 内部节点再划分所需最小样本数 min_samples_split 和叶子节点最少样本数 min_samples_leaf

GridSearchCV的名字其实可以拆分为两部分,GridSearch和CV,即网格搜索和交叉验证。这两个名字都非常好理解。网格搜索,搜索的是参数,即在指定的参数范围内,按步长依次调整参数,利用调整的参数训练学习器,从所有的参数中找到在验证集上精度最高的参数,这其实是一个训练和比较的过程。

GridSearchCV可以保证在指定的参数范围内找到精度最高的参数,但是这也是网格搜索的缺陷所在,他要求遍历所有可能参数的组合,在面对大数据集和多参数的情况下,非常耗时。

通过RF框架以及RF决策树参数能够了解到重点需要调节以下的参数

主要需要关注的是 n_estimators ,即RF最大的决策树个数。

决策树参数中最重要的包括最大特征数 max_features , 最大深度 max_depth , 内部节点再划分所需最小样本数 min_samples_split 和叶子节点最少样本数 min_samples_leaf

输出结果为:

6.3最佳的弱学习器迭代次数,接着我们对决策树最大深度max_depth和内部节点再划分所需最小样本数min_samples_split进行网格搜索

输出结果

6.4最大特征数max_features做调参

输出结果:

6.5根据模型最佳参数进行测试

输出结果:0.7805947388486466,相比没有调参前,模型有不少的提高的,方便观察,用图形来看下ROC曲线图

6.6观察模型的重要特征

6.7最大召回率

最后得出我们想要的结果,精准率在 0.97 下,召回率 0.046

参考文章:

1.sklearn中predict_proba的用法例子

2.Python机器学习笔记 Grid SearchCV(网格搜索)

3.scikit-learn随机森林调参小结

4.ROC曲线和AUC值的计算

中红外光谱(MIR)的介绍

此本来自自己硕士论文的综述部分。

FT-MIR在检测某特定物质时会根据该物质的官能键与官能团,产生属于该物质的特征波。研究表明在使用多自变量建立预测某物质模型的过程中,选出该物质特征波来作为自变量,不仅能提高模型预测的准确性,还能增强模型的稳定性(Leardi et al 2002, Zou et al 2010, Vohland et al 2014)。John等较早提出了特征选择主要分为两大类,第一类为过滤法,其是于预测变量的特征选择算法,并且单独度量各个自变量的重要性,过滤掉在数据分析中几乎没有用的特征;第二类为封装法,其是将所有自变量逐一添加或删除应用在某类算法中,根据模型结果找到最佳自变量组合(John et al 1994)。两者各有优缺点,过滤法速度快,但其不能根据建立模型的结果来分析自变量,而封装法能够结合建立模型准确性的结果来选择变量,但其计算量比过滤法大且有过拟合的风险(Saeys et al 2007)。但随后还出现了第三种嵌入法,其在算法构建中加入了特征波选择,与封装法类似,但其不能用于其他算法(只能适用筛选特征波的算法),优点在于比封装法降低了计算量(Saeys et al 2007)。所以比较合理的筛选光谱特征波方法是先使用过滤法缩小范围,再使用封装法或嵌入法筛选最终特征波。

定性判别分析(Discriminant Analysis)是在已知特征与类别的训练集上建立判别模型,再使用判别模型对已知特征与未知类别的新数据进行分类预测。

定性判别分析根据判别准则可分为Fisher判别、距离判别和Bayes判别。Fisher判别是将数据投影到某一个维度上,使各类的总体之间最大限度分开,再选择合适判别规则将新的样本分类判别。距离判别是先计算出已知分类的各类别的重心,再对未知类别的数据计算其与各类重心的距离,与某类重心距离最近则归于该类。Bayes判别是由先验概率计算出后验概率,再根据后验概率分布对新数据作出统计推断。

定量分析(Quantitative Analysis)是通过某类算法使自变量能够较为精确地预测因变量的一种回归方法,且因变量一般为连续变化的数据,其一般分为线性、广义线性与非线性三种。主要有:偏最小二乘法(Partial least squares, PLS),主成分分析-线性判别分析(PCA-LDA),决策树(Decision Tree, DT),人工神经网络(Artificial neural network,ANN),支持向量机(Support Vector Machine, SVM),K最近邻算法(K Nearest Neighbor, KNN),逻辑回归(Logistic Regression, LR),随机森林(Random Forest, RF)。这8中算法的理论部分请查看 机器学习 部分 11 与 12 篇。

定性判别模型的评价可使用混淆矩阵,混淆矩阵及其相关参数是最简单与最直观的评价指标之一,以二分类为例,混淆矩阵如表1-3,可基于混淆矩阵计算出判别模型的评价指标

推导出的参数有:

定量分析模型的评价指标主要有决定系数(coefficient of determination,R2 )和均方根误差(Root Mean Squared Error,RMSE),R2值越大表示模型越好(0≤R2≤1),RMSE越小表示模型越好(RMSE≥0)。

计算公式如下:

在不同数据集中,可分别计算出相应的R2与RMSE参数。在训练集中,其中公式(2)中n=样本数-主成分数-1时,全部数据建模的参数表示为校正R2C(Calibration coefficient of determination,R2C)与校正RMSEC(Root mean square error of calibration,RMSEC);当公式(2)中n=样本数-交叉验证时留出的样本数时,建模的参数表示为交叉R2CV(Cross-calibration coefficient of determination,R2CV)与交叉RMSECV(Root mean square error of cross-calibration,RMSECV);在测试集中,当公式(2)中n=样本数时,验证结果得到的参数为验证R2V(Validation coefficient of determination,R2V)与验证RMSE p (Root mean square error of validation,RMSEp)。

支持向量机

支持向量机(support vector machines,SVM)是一种二分类模型,它的基本模型是定义在特征空间上的 间隔最大的线性分类器 ,间隔最大使它有别于感知机;SVM还包括 核技巧 ,这使它成为实质上的非线性分类器。 SVM的学习策略就是间隔最大化 ,可形式化为一个求解凸二次规划的问题,也等价于正则化的损失函数最小值问题。SVM的学习算法就是求解凸二次规划的最优算法。

    它在手写识别数字和人脸识别中应用广泛,在文本和超文本的分类中举足轻重,因为SVM可以大量减少标准归纳和转换设置中对标记训练实例的需求。同时, SVM也被用来执行图像的分类,并用于图像分割系统 。实验结果表明,在仅仅三到四轮相关反馈之后,SVM就能实现比传统的查询细化方案高出一大截的搜索精度。除此之外,生物学和许多其他学科都是SVM的青睐者,SVM现在已经广泛用于 蛋白质分类 ,现在化合物分类的业界平均水平可以达到90%以上的准确率。在生物科学的尖端研究中,人们还使用支持向量机来识别用于模型预测的各种特征,以找出各种基因表现结果的影响因素。

SVM学习的基本想法是求解能够正确划分训练数据集并且几何间隔最大的分离超平面 。如下图所示, 即为分离超平面,对于线性可分的数据集来说,这样的超平面有无穷多个(即感知机), 但是几何间隔最大的分离超平面却是唯一的。

超平面与最近数据点之间的距离成为边距。可以将两个类分开的最佳或最佳超平面是具有最大边距的线。只有这些点与定义超平面和分类器的构造有关。这些点称为支持向量。他们支持或定义超平面。实际上,优化算法用于找到使裕度最大化的系数的值。

SVM的三层理解:

(1)线性可分支持向量机、硬间隔

(2)线性支持向量机、软间隔

(3)非线性支持向量机、Kernel SVM

支持向量机模型存在三宝:

(1)间隔:是指样本点到超平面的距离。 硬间隔 是指对给定的样本数据集中所以的样本都能正确分类。对于线性不可分的样本集,无法满足线性可分支持向量机的不等式约束,也就是不存在对所有样本都能正确分类的超平面。这种情况可能是因为问题本身是非线性的,也可能问题是线性可分的,但个别样本点标记错误或存在误差而导致样本集线性不可分。

因此,我们可以允许对少量的样本分类错误, 容忍特异点的存在,而对于去除特异点的样本集是线性可分的,这时称为软间隔 。

(2)对偶

(3)核技巧

支持向量机和感知机在某些方面很相似,其相同点 :

(1)都是二分类模型

(2)都是通过一个分离超平民啊对特征进行分类

不同点:

(1)SVM是特殊的感知机

(2)感知机是用误分类最小的策略,求得分离超平面,这时存在无穷个解,感知机利用间隔最大化求得最优分离超平面。如下图所示。

    图中的蓝色和圆点分别表示正负样本,对于这个二分类,从图中我们可知,在最上面的黄线和最下面的绿线之间的线条都是可以把训练样本集完全分开的,这就是感知机的原理,通过这些分离超平面把训练集分开,这样的分离超平面存在很多条,比如图中的虚线,从视觉上中间那条实线应该是众多线条中最优的一条,感知机对于学习的分离超平面由于优化算法、学习率等不同因素,会随机地学习到这众多分离超平面的一条,当学习到的是靠近上下边缘的分离超平面是,对于一个未知样本,当这个样本稍微浮动一下,模型就很可能对他进行误分类了,因此鲁棒性很低,而支持向量机的目标是找到图中中间那条最优的分离超平面。

为求解支持向量机的最优化问题,我们将公式10作为原始问题,应用拉格朗日对偶性,通过求解对偶问题得到原始问题的最优解,这就是支持向量机的对偶算法。 在约束最优化问题中,常常利用拉格朗日对偶性将原始问题转换为对偶问题,通过解对偶问题而得到原始问题的解(最优解是反的,值是一样的 ) 。这是因为:

    1)对偶问题的对偶是原问题

    2)无论原始问题与约束条件是否是凸的,对偶问题都是凹问题,加个负号就变成凸问题了,凸问题容易优化。

    3)对偶问题可以给出原始问题一个下界

    4)当满足一定条件时,原始问题与对偶问题的解是完全等价的

LinearSVC()类的主要参数:

(1)C: float, default=1.0, 惩罚系数,必须大于0,默认值1.0。用于设置对错误分类的惩罚强度,对于设置对错误分类的惩罚强度,对于完全线性可分的硬间隔问题不需要设置。

(2)fit_intercept: boolean, optional(default=True):是否计算截距,默认为True。如果数据均值为0,则可以选择False不计算截距。

(3)multi_class: string,”ovr“ or "crammer_singer"(default='ovr'):多类别分类策略开关。对于多元分类问题,选择'ovr'将使用多类别策略(one-vs-set)直接对多个类别进行分类(默认方法);选择"crammer_singer"将主次进行二值分类。

(4)class_weight:dict or "balanced", default=None,特征变量的加权系数。用于为某个特征变量设置权重,默认所有特征变量的权重相同。

结论:1)线性核,尤其是多项式核函数在高次项时计算非常缓慢。

            2)rbf和多项式核函数都不擅长处理量纲不统一的数据集

这两个缺点都可以由数据无量纲化来解决。因此,SVM执行之前,非常推荐先进行数据的无量纲化!

svc.score(): 返回给定测试数据和标签的平均准确度。

    首先,分类模型天生会倾向于多数的类,让多数类更容易被判断正确,少数类被牺牲掉 。因为对于模型而言,样本量越大的标签可以学习的信息越多,算法就会更加依赖于从多数类中学到的信息来进行判断。如果我们希望捕获少数类,模型就会失败。 其次,模型评估指标会失去意义 。这种分类状况下,即便模型什么也不做,全把所有人都当成不会犯罪的人,准确率也能非常高,这使得模型评估指标accuracy变得毫无意义,根本无法达到我们的“要识别出会犯罪的人”的建模目的。

    所以现在,我们首先要让算法意识到数据的标签是不均衡的,通过施加一些惩罚或者改变样本本身,来让模型向着捕获少数类的方向建模。然后,我们要改进我们的模型评估指标,使用更加针对于少数类的指标来优化模型。 要解决第一个问题,我们在逻辑回归中已经介绍了一些基本方法,比如上采样下采样 。但这些采样方法会增加样本的总数,对于支持向量机这个样本总是对计算速度影响巨大的算法来说,我们完全不想轻易地增加样本数量。况且,支持向量机中的决策仅仅受到决策边界的影响,而决策边界仅仅受到参数C和支持向量的影响,单纯地增加样本数量不仅会增加计算时间,可能还会增加无数对决策边界无影响的样本点。因此在支持向量机中,我们要大力依赖我们调节样本均衡的参数:SVC类的class_weight和接口fit可以设定的sample_weight。

    混淆矩阵是二分类问题的衡量指标体系,在样本不平衡时极其有用。在混淆矩阵中,我们将少数类认为是正例,多数类认为是负例。在决策树,随机森林这些普通的分类算法里,即是说少数类是1,多数类是0。在SVM里,就是说少数类是1,多数类是-1。普通的混淆矩阵,一般使用{0,1}来表示。混淆矩阵中,永远是真实值在前,预测值在后。

ROC曲线及相关问题

    基于混淆矩阵,总共有六个指标:准确率Accuracy,精确度Precision,召回率Recall,精确度和召回度的平衡指标F measure, 特异度Specificity,以及假正率FPR。

    其中,假正率有一个非常重要的应用:我们在追求较高的Recall的时候,Precision会下降,就是说随着更多的少数类被捕捉出来,会有更多的多数类被判断错误,但我们很好奇,随着Recall的逐渐增加,模型将多数类判断错误的能力如何变化呢?我们希望理解,我每判断正确一个少数类,就有多少个多数类会被判断错误。假正率正好可以帮助我们衡量这个变化。相对的,Precision无法判断这些判断错误的多数类在全部多数类中究竟占多大的比例,所以无法在提升Recall的过程中也顾及到模型整体的Accuracy。因此, 我们可以使用Recall和FPR之间的平衡,来替代Recall和Precision之间的平衡,让我们衡量模型在尽量捕捉少数类的时候,误伤多数类的情况如何变化,这就是我们的ROC曲线衡量的平衡 。

    ROC曲线,全称The Receiver Operating Characteristic Curve。这是一条以下不同阈值下的假正率FPR为横坐标,不同阈值下的召回率Recall为纵坐标的曲线。

优点:

(1)有严格的数学理论支持,可解释性强,不依靠统计方法,从而简化了通常的分类和回归问题

(2)解决小样本下机器学习问题;

(3)能找出对任务至关重要的关键样本(即:支持向量)

(4)采用核技巧之后,可以处理非线性分类/回归任务;可以解决高维问题,即大型特征空间;

(5)最终决策函数只由少数的支持向量所确定,计算的复杂性取决于支持向量的数目,而不是样本空间的维数,这在某种意义上避免了”维数灾难“。

缺点:

(1)训练时间长。当采用SMO算法时,由于每次都需要挑选一对参数,因此时间复杂度 ,其中N为训练样本的数量;

(2)当采用核技巧时,如果需要存储核矩阵,则空间复杂度为 。对非线性问题没有通用解决方案,有时候很难找到一个合适的核函数;

(3)对于核函数的高维映射解释力不强,尤其是径向基函数;

(4)模型预测时,预测时间与支持向量的个数成正比。当支持向量的数量较大时,预测计算复杂度较高。

(5) 对缺失数据敏感;

因此支持向量机目前只适合小批量样本的任务,无法适应百万条甚至上亿样本的任务 。

    SVM主要用于分类问题,主要的应用场景有字符识别、面部识别、行人检测、文本分类等领域。 在机器学习领域,SVM是有监督的学习模型,通常用来进行模式识别、分类(异常值检测)以及回归分析 。

ROC曲线——相关文献实例、原理和绘制方法

数据分析最让人着迷的一种用途是可以基于现有数据创建能够区分不同类型情景的机器学习预测模型。通过定义明确的模型,可以确定能够预测结果的最重要影响因素,为战略假设开发有价值的洞察力,甚至可以通过友好的用户界面将模型的逻辑实现到软件应用程序中。

首先,我们需要评估构建好的预测模型是否具有良好准确的预测能力!比如,如果我们的电子邮件程序的垃圾邮件分类器只能检测到50%的不需要的电子邮件或请求,我们都会非常愤怒。本文将讨论如何使用经典工具来评估预测模型:接收器操作特性(ROC)曲线。

本文主要分为三个部分整理ROC曲线相关内容,可根据自己的需要进行挑选:

1、使用ROC曲线分析的相关文献实例

2、ROC曲线的原理和历史

3、如何绘制ROC曲线

从一篇SCI出发: Improvement of Insulin Sensitivity after Lean Donor Feces in Metabolic Syndrome Is Driven by Baseline Intestinal Microbiota Composition

这是阿姆斯特丹大学学术医学中心在2017年发表在cell子刊上的文献,其中一个highlight提到:Response to lean donor FMT is driven by baseline fecal microbiota composition,使用了ROC曲线来评估预测模型的好坏。

为了比较异体FMT中菌群与效果之间的关系,首先按照FMT前后Rd值的变化将患者分为responders组和non-responders组,并比较了两组的菌群差异,从菌群多样性变化来看,基于Shannon指数发现,两组的多样性均没有发生显著改变,然而,两组基线时的菌群多样性却又显著差异(图5A),具体表现为non-responders的基线菌群多样性显著高于responders。随后,作者使用了弹性网络算法elastic net algorithm ( Zou and Hastie, 2005 )区分responders和non-responders,为了避免过度拟合,在数据的训练分区(80%)上使用了十折交叉验证,剩下的20%样品用作测试数据集。要选择的参数是 L1,L2范数和正则化阈值之间的比率。稳定性选择采用80% 的随机二次抽样方法进行,共100次。在稳定性选择过程中,计算所有权重系数为非零的特征。这些计数被归一化并转换为稳定系数,对于总是被选择的特征值在1.0之间,对于从未被选择的特征值在0.0之间。通过随机试验评价弹性网络算法所得结果的统计有效性。按照程序将结果变量(例如,同种异体相对于自体或应答者相对于无应答者)随机重组,同时保留相应的微生物谱。重复100次,每次计算受试者-工作特征-曲线下面积(ROC AUC)评分。用于二进制分类任务的性能度量是 ROC AUC。ROC 可以理解为一个正确分类同种异体受试者与自体受试者或有效者与无效者的概率图。数据集中的交叉验证是通过随机隐藏模型中20% 的受试者并评估该组的预测质量来完成的。ROC AUC 评分用0.5 AUC 来衡量分类模型的预测准确性,对应于一个随机结果。定义了一个临界值0.05,并将原始数据集的真实 AUC 与此值进行了比较。

作者通过ROC曲线评估了基线菌群组成预测6周代谢反应的模型,显示AUC=0.88,模型良好。

从这篇文献了解到ROC曲线可用于评估某个寻找biomarkers的预测模型的好坏。

再从一篇SCI了解: Alterations in the gut microbiome and metabolism with coronary artery disease severity

这是一篇本课题组与北京协和医学院合作在2019年发表的文章,关注了不同冠状动脉疾病Coronary artery disease (CAD)类型患者的肠道菌群区分差异。其中,作者通过ROC曲线评估了区分不同CAD亚型(稳定型冠状动脉疾病(SCAD) ,不稳定型心绞痛(UA)和心肌梗死(MI))的特征共变化菌群和代谢物随机森林模型,得到比较良好的预测结果。

Subgroup identification and prediction based on CAGs and CAD-associated metabotypes

为了确定肠道菌群中的 CAGs 和代谢产物模块是否可以作为鉴别冠心病不同阶段与正常冠状动脉的生物标志物,根据24个 CAGs 和72个血清代谢类型构建了随机森林模型对冠心病不同阶段进行分类,并利用 ROC曲线(ROC)曲线对分类进行了检验(详情见“材料和方法”一节)。总共构建了5个预测模型(Control vs. CAD, Control vs. SCAD, SCAD vs. UA, SCAD vs. ACS和UA vs. MI)。

随后,作者再通过招募新队列使用该模型进行分类预测,进一步论证该疾病亚型识别模型的潜在分类能力。

小结:从这两篇文献来看,作者均通过某个分类法机器学习预测模型寻找biomarkers,然后使用ROC曲线对模型进行评估。因此,我们可以初步得知,ROC曲线是用于检验构建的预测模型好坏的一种衡量方法。那么除了这种用途,ROC曲线还能做什么呢?

为了进一步了解并应用ROC曲线,我们需要首先了解ROC曲线的原理和过往↓

关于ROC曲线相关介绍的文章非常多,这里我摘抄出个人认为比较详细,可用性强的文章,加以理解。

一、评估预测模型的方法

首先,我们应该了解到预测模型的类型可以分为回归模型和分类模型(分类模型又有两类算法:分类输出型和概率输出型,这里就不一一赘述),而不同模型的评估度量也是不同的, 如何评估模型好坏 , 机器学习(二十四)——常见模型评估方法 , 分类模型的评估方法简介 首先需要了解自己构建的预测模型类型来决定评估方法,并不局限于使用ROC曲线进行评估。

ROC曲线原理:

关于ROC曲线的概念和意义可参考: ROC曲线的概念和意义

英文比较好的话也可以看看这篇: ROC curves – what are they and how are they used?

为了更直观的理解ROC,也可以看看这个视频: ROC and AUC, Clearly Explained!

受试者工作特征曲线(receiver operator characteristic curve, ROC曲线),最初用于评价雷达性能,又称为接收者操作特性曲线。ROC曲线其实就是从混淆矩阵衍生出来的图形,以真阳性率(灵敏度,Sensitivity)为纵坐标,假阳性率(1-特异度,1-Specificity)为横坐标绘制的曲线。

其自变量(检验项目)一般为连续性变量(如蛋白质因子、菌株、代谢物等的检测丰度或含量),因变量(金标准,如某疾病亚型分类、治疗响应和无响应、患病和未患病)一般为二分类变量。

ROC曲线图形:随着阈值的减小,更多的值归于正类,敏感度和1-特异度也相应增加,所以ROC曲线呈递增趋势。那条45度对角线是一条参照线,也就是说ROC曲线要与这条曲线比较。简单的说,如果我们不用模型,直接随机把客户分类,我们得到的曲线就是那条参照线,然而我们使用了模型进行预测,就应该比随机的要好,所以ROC曲线要尽量远离参照线,越远,我们的模型预测效果越好。

ROC曲线就是用来判断诊断的正确性,最理想的就是曲线下的面积为1,比较理想的状态就是曲线下的面积在0.8-0.9之间,0.5的话对实验结果没有什么影响。

提到ROC曲线,就离不开AUC(ROC曲线下面积),其判定方法为AUC应该大于0.5。ROC曲线是根据与对角线进行比较来判断模型的好坏,但这只是一种直觉上的定性分析,如果我们需要精确一些,就要用到AUC,也就是ROC曲线下面积(AUC)。

从AUC判断分类器(预测模型)优劣的标准:

AUC = 1,是完美分类器,采用这个预测模型时,存在至少一个阈值能得出完美预测。绝大多数预测的场合,不存在完美分类器。

0.5 < AUC < 1,优于随机猜测。这个分类器(模型)妥善设定阈值的话,能有预测价值。

AUC = 0.5,跟随机猜测一样(例:丢铜板),模型没有预测价值。

AUC < 0.5,比随机猜测还差;但只要总是反预测而行,就优于随机猜测。

看上图,参考线的面积是0.5,ROC曲线与它偏离越大,ROC曲线就越往左上方靠拢,它下面的面积(AUC)也就越大,这里面积是0.869。我们可以根据AUC的值与0.5相比,来评估一个分类模型的预测效果。

二、ROC曲线的历史和关键值

这里推荐阅读这篇: 机器学习基础(1)- ROC曲线理解 。这里从最初雷达兵使用ROC曲线评估的故事说起,言简意赅。

ROC曲线最初的研究是为了确定美国雷达“接收机操作员”是如何漏掉日本飞机的。在模型预测判断中,会出现真阳、假阳、真阴和假阴的三种情况,而不同雷达兵都可能有自己的一套评判标准,对每个接收的信号是大鸟还是轰炸机,每个雷达兵会给出自己的判断结果,这样每个雷达兵就都能计算出一个ROC曲线上的关键点(一组FPR,TPR值),把大家的点连起来,也就是最早的ROC曲线了。

ROC曲线需要了解几个关键值:

敏感性: 正确识别真阳性的比例。在这种情况下,健康患者的比例由诊断工具正确识别。这有时被称为“召回”。

SN =真阳性/(真阳性+假阴性)

逆(1灵敏度)=  假负率 。未被该工具检测到的健康患者被错误地识别为患有CAD。假阴性也称为II型错误。

特异性: 正确识别真阴性的比例。在这种情况下,通过诊断工具正确识别CAD患者的比例。

SP =真阴性/(真阴性+误报)

逆(1-特异性)=  假阳性率 。CAD患者被错误地识别为无CAD。误报也称为I型错误。

积极预测价值: 该工具报告的阳性比例,实际上是积极的。对于诊断工具报告缺乏CAD的患者组,PPV是实际上没有患病的患者的比例。这有时被称为“精确度”。

PPV =真阳性/(真阳性+误报)

负面预测值: 该工具报告的负面影响的比例,实际上是负面的。对于诊断工具报告存在CAD的患者组,NPV是实际上没有CAD的患者的比例。

NPV =真阴性/(真阴性+假阴性)

这里可以借助混淆矩阵加以理解:

TP(True Positive): 真实为0,预测也为0

FN(False Negative): 真实为0,预测为1

FP(False Positive): 真实为1,预测为0

TN(True Negative): 真实为0,预测也为0

三、ROC曲线的主要作用

1、ROC曲线能很容易地查出任意界限值时的对疾病的识别能力。

2、选择最佳的诊断界限值。

3、两种或两种以上不同诊断试验对疾病识别能力的比较。在对同一种疾病的两种或两种以上诊断方法进行比较时,可将各试验的ROC曲线绘制到同一坐标中,以直观地鉴别优劣,靠近左上角的ROC曲线所代表的受试者工作最准确。亦可通过分别计算各个试验的ROC曲线下的面积(AUC)进行比较,哪一种试验的AUC最大,则哪一种试验的诊断价值最佳。

四、交叉验证和过拟合问题

参考: 你真的了解交叉验证和过拟合吗?

机器学习】Cross-Validation(交叉验证)详解

10折交叉验证(10-fold Cross Validation)与留一法(Leave-One-Out)、分层采样(Stratification)

意识到过拟合好像也是个棘手的问题,所以在这里补充一下:

简单来讲,当 train set 误差较小,而 test set 误差较大时,我们即可认为模型过拟合。这句话表达的另一层意思是,模型评估指标的方差(variance)较大,即可认为模型过拟合。另外,无论监督学习还是非监督学习,均存在过拟合的问题。

有一个比喻还不错,这里也摘抄下来:

语文老师 让同学A 解释一个句子:  ‘某鲁迅先生的文章~~~~~~~~’

欠拟合:    差生: 这是个什么鬼东西,比例哔哩哔哩~~~~

过拟合:    语文老师的解释: ‘表面上看是~~~,但其实~~~~,本质上~~~~~~,反映了~~~~心情,烘托了~~~气氛~~~’

正常:        当时鲁迅先生觉得天色晚了,该休息了。

那么,如何才能够在一定程度上避免过拟合呢?这就引出了交叉验证:

最简单的判断模型是否过拟合的方法,就是通过training accuracy 和 test accuracy 数值大小,直观的判断模型是否过拟合。例如,训练集的准确率为90%,而测试集的准确率为70%,那么我们可以认为模型过拟合。不过,这种方法没有明确的判断标准,完全靠个人的主观判断——“感觉训练和测试的误差相差有点大,有可能过拟合”。

如何利用交叉验证避免过拟合?

避免模型过拟合的方法,总结大概以下几点:

    - 重新清洗数据(删除稀疏特征、对噪声数据进行处理(删除/替换))

  - 重新采样(改变采样方法等)

  - 增加训练数据

  - 采用交叉验证训练模型

  - 重新筛选特征

  - 降低模型复杂度(增加正则项:L1,L2)

  - dropout(神经网络中,让神经元一定的概率不工作)

这里探讨如何利用交叉验证来避免模型过拟合:

第一个作用是对模型的性能进行评估 。当我们通过一次划分样本对模型进行训练和测试时,由于样本划分的偶然性,会导致我们对模型的评估不准确。因此,可以采用交叉验证对模型进行评估(一般采用5折或10折,sklearn默认采用的是3折),以 n 折交叉验证结果的均值,作为模型的性能评估。

第二个作用就是用来避免过拟合 。例如当我们进行10折交叉验证时,训练了10次,得到了10个模型,每个模型的参数也是不同的,那么我们究竟用哪个模型作为我们最终的模型呢?答案是: 一个都不用!我们要利用全量数据重新训练出一个最终模型!

关于实现ROC曲线的绘制,可通过多种途径进行,这里列出一些可操作平台和方法:

1、SPSS: 如何用SPSS做ROC曲线分析?看这1篇就够了!

2、R语言: R语言逻辑回归、ROC曲线和十折交叉验证

                    ROC曲线基于R语言-(pROC包)

                    R语言pROC包绘制ROC曲线

3、Python: 机器学习基础(1)- ROC曲线理解

                    ROC原理介绍及利用python实现二分类和多分类的ROC曲线

4、Matlab: Matlab绘图——ROC曲线绘制(官方demo)

                     ROC曲线详解及matlab绘图实例

ROC曲线的初步学习就到这里,我们初步了解到ROC曲线最初是用来评估雷达兵判断的轰炸机信号准确性的方法,随后沿用到了医学指标的判定上,在生活中应用广泛。ROC曲线可用于查出任意界限值时的对疾病的识别能力,选择最佳的诊断界限值,还可以用在评估机器学习预测模型的好坏上(目前好像这方面用的比较多)。当然,还有一些问题值得讨论,比如,何时需要使用ROC曲线,S折交叉验证平均ROC曲线如何绘制,等等。在机器学习模型构建过程中,训练集和测试集的建立,模型的交叉验证和ROC曲线评估的结合,还需要继续学习。

Kootte RS, Levin E, Salojärvi J, Smits LP, Hartstra AV, Udayappan SD, Hermes G, Bouter KE, Koopen AM, Holst JJ, Knop FK, Blaak EE, Zhao J, Smidt H, Harms AC, Hankemeijer T, Bergman JJGHM, Romijn HA, Schaap FG, Olde Damink SWM, Ackermans MT, Dallinga-Thie GM, Zoetendal E, de Vos WM, Serlie MJ, Stroes ESG, Groen AK, Nieuwdorp M. Improvement of Insulin Sensitivity after Lean Donor Feces in Metabolic Syndrome Is Driven by Baseline Intestinal Microbiota Composition. Cell Metab. 2017 Oct 3;26(4):611-619.e6. doi: 10.1016/j.cmet.2017.09.008. PMID: 28978426.

Liu H, Chen X, Hu X, Niu H, Tian R, Wang H, Pang H, Jiang L, Qiu B, Chen X, Zhang Y, Ma Y, Tang S, Li H, Feng S, Zhang S, Zhang C. Alterations in the gut microbiome and metabolism with coronary artery disease severity. Microbiome. 2019 Apr 26;7(1):68. doi: 10.1186/s40168-019-0683-9. PMID: 31027508; PMCID: PMC6486680.

Rodriguez-Ruiz A, Lång K, Gubern-Merida A, Broeders M, Gennaro G, Clauser P, Helbich TH, Chevalier M, Tan T, Mertelmeier T, Wallis MG, Andersson I, Zackrisson S, Mann RM, Sechopoulos I. Stand-Alone Artificial Intelligence for Breast Cancer Detection in Mammography: Comparison With 101 Radiologists. J Natl Cancer Inst. 2019 Sep 1;111(9):916-922. doi: 10.1093/jnci/djy222. PMID: 30834436; PMCID: PMC6748773.

Duclos G, Bobbia X, Markarian T, Muller L, Cheyssac C, Castillon S, Resseguier N, Boussuges A, Volpicelli G, Leone M, Zieleskiewicz L. Speckle tracking quantification of lung sliding for the diagnosis of pneumothorax: a multicentric observational study. Intensive Care Med. 2019 Sep;45(9):1212-1218. doi: 10.1007/s00134-019-05710-1. Epub 2019 Jul 29. PMID: 31359081.

计算机视觉:随机森林算法在人体识别中的应用

摘 要

人体识别是计算机视觉领域的一大类热点问题,其研究内容涵盖了人体的监测与跟踪、手势识别、动作识别、人脸识别、性别识别和行为与事件识别等,有着非常广泛的应用价值。随机森林以它自身固有的特点和优良的分类效果在众多的机器学习算法中脱颖而出。随机森林算法的实质是一种树预测器的组合,其中每一棵树都依赖于一个随机向量,森林中的所有的向量都是同分布的。本文简单介绍了随机森林的原理,并对近几年来随机森林在姿势识别和人脸识别中的应用进行讨论。

1.人体识别概述

人体识别是计算机视觉领域的一大类热点问题,其研究内容涵盖了人体的监测与跟踪、手势识别、动作识别、人脸识别、性别识别和行为与事件识别等。其研究方法几乎囊括了所有的模式识别问题的理论与技术,例如统计理论,变换理论,上下文相关性,分类与聚类,机器学习,模板匹配,滤波等。人体识别有着非常广泛的应用价值。

绝大多数人脸识别算法和人脸表情分析算法在提取人脸特征之前,需要根据人脸关键点的位置(如眼角,嘴角)进行人脸的几何归一化处理。即使在已知人脸粗略位置的情况下,人脸关键点精确定位仍然是一个很困难的问题,这主要由外界干扰和人脸本身的形变造成。

当前比较流行的算法有:基于启发式规则的方法、主成分分析(PCA)、元分析(ICA)、基于K-L 变换、弹性图匹配等。

2.随机森林综述

随机森林顾名思义,使用随机的方式建立一个森林,森林里面有很多的决策树组成,随机森林的每一棵决策树之间是没有关联的。在得到森林之后,当有一个新的输入样本进入的死后,就让森林的每一棵决策树分别进行一下判断,看看这个样本应该属于哪一类(对于分类算法),然后看看哪一类能被选择最多,就预测这个样本为那一类。

随机森林是一种统计学习理论,其随机有两个方面:首先是在训练的每一轮中,都是对原始样本集有放回的抽取固定数目的样本点,形成k个互不相同的样本集。第二点是:对于每一个决策树的建立是从总的属性中随机抽取一定量的属性作属性集,这样对于k个树分类器均是不相同的。由随机生成的k个决策树组成了随机森林。

对于每一个决策树来讲,其属性是不断的选取具有最大信息增益的属性进行排列。整个随机森林建立后,最终的分类标准采用投票机制得到可能性最高的结果。

下图是随机森林构建的过程:

图1 随机森林构建过程

3.随机森林在人体识别中的应用

3.1 随机森林应用于姿势识别

以[1]一文来讨论,论文中所涉及到的人体识别过程主要分为两步,首先是,身体部位标记:对于从单张景深图像中对人体进行分段,并标记出关键节点。之后进行身体关节定位,将标记的各个人体部分重新映射到三维空间中,对关键节点形成高可靠的空间定位。

图2 深度图像-身体部位标记-关节投影

文的最主要贡献在于将姿势识别的问题转化成了物体识别的问题,通过对身体不同部位的空间位置的确定来实现,做到了低计算消耗和高精确度。在身体部位标记的过程中,将问题转化成了对每个像素的分类问题,对于每个像素点,从景深的角度来确定该点的局域梯度特征。该特征是点特征与梯度特征的良好结合。

举个例子,对于不同点的相同属性值的判别,如下图,图a中的两个测量点的像素偏移间均具有较大的景深差,而图b中的景深差则明显很小。由此看出,不同位置像素点的特征值是有明显差别的,这就是分类的基础。

图3 景深图像特质示例

文中对于决策树的属性的选择来说。由于某两个像素点、某些图像特征选取的随意性,将形成大量的备选划分形式,选择对于所有抽样像素对于不同的属性划分前后的信息熵增益进行比较,选取最大的一组ψ=(θ, τ)作为当前节点。(信息增益与该图像块最终是否正确地分类相关,即图像块归属于正确的关键特征点区域的概率。)

图4 决策时分类说明

决策树的建立后,某个叶子节点归属于特定关键特征点区域的概率可以根据训练图像最终分类的情况统计得到,这就是随机森林在实际检测特征点时的最重要依据。

在人体关节分类中,我们由形成的决策森林,来对每一个像素点的具体关节属性进行判断,并进行颜色分类。随机森林这种基于大量样本统计的方法能够对由于光照、变性等造成的影响,实时地解决关键特征点定位的问题。

如图所示,是对于景深图像处理后的结果展示。

图5 姿势识别处理结果

应该这样说,这篇文章在算法的层面对随机森林没有太大的贡献。在划分函数的形式上很简单。这个团队值得称道的地方是通过计算机图形学造出了大量的不同体型不同姿势的各种人体图像,用作训练数据,这也是成为2011年CVPR Best Paper的重要原因。正是因为论文的成果运用于Kinect,在工业界有着巨大的作用,落实到了商用的硬件平台上,推动了随机森林在计算机视觉、多媒体处理上的热潮。

3.2 随机森林应用于人脸识别

基于回归森林的脸部特征检测通过分析脸部图像块来定位人脸的关键特征点,在此基础上条件回归森林方法考虑了全局的脸部性质。对于[2]进行分析,这篇论文是2012年CVPR上的论文,本文考虑的是脸部朝向作为全局性质。其主要描述的问题是如何利用条件随机森林,来确定面部10个关键特征点的位置。与之前不同的是,在随机森林的基础上,加入了面部朝向的条件约束。

图6 脸部10个特征点

对于面部特征标记的问题转化成了对大量图像块的分类问题。类似于人体识别中的局域梯度特征识别。本文中,对于每一个图像块来说,从灰度值、光照补偿、相位变换等图像特征,以及该图像块中心与各个特征点的距离来判断图像块的位置特征。在决策树的属性确定过程,依然使用“最大信息熵增益”原则。

图7 条件随机森林算法说明

文中提出了更进一步基于条件随机森林的分类方法,即通过设定脸部朝向的约束对决策树分类,在特征检测阶段能够根据脸部朝向选择与之相关的决策树进行回归,提高准确率和降低消耗。此论文还对条件随机森林,即如何通过脸部朝向对决策进行分类进行了说明,但这与随机森林算法没有太大关系,这里就不再继续讨论了。随机森林这种基于大量样本统计的方法能够对由于光照、变性等造成的影响,实时地解决关键特征点定位的问题。

另一篇文章[3]对于脸部特征标记,提出了精确度更高、成本更低的方法。即,基于结构化输出的随机森林的特征标记方式。文中将面部划分为20个特征点,对于各个特征点来说,不仅有的图像块分类标记,还加入了例如,点4,对于其他嘴唇特征点3,18,19的依赖关系的判断。这样的方法使特征点标记准确率大大增加。

该方法依然是使用随机森林的方法,有所不同的是引入了如式中所示的与依赖节点之间的关系。对于决策树的建立依然是依赖信息熵增益原则来决定,叶子节点不仅能得到特征的划分还会得到该特征对依赖特征的贡献,最终特征节点的判断会综合原始投票及空间约束。

图8 脸部特征标记

图9 决策树依赖关系

例如当对下图中人脸特征点进行分类时,使用简单的随机森林方法,经过判断会将各个点进行标注,可以看到 红色的点,标注出的鼻子特征。如果利用依赖节点进行判断,鼻子的点会被局限在其他鼻子特征点的周围,进行叠加后,得到了这个结果。显然,对于此节点的判断,利用结构输出的方式,准确度更高了。

图10 结构化输出结果

4.随机森林总结

大量的理论和实证研究都证明了RF具有很高的预测准确率,对异常值和噪声具有很好的容忍度,且不容易出现过拟合。可以说,RF是一种自然的非线性建模工具,是目前数据挖掘算法最热门的前沿研究领域之一。具体来说,它有以下优点:

1.通过对许多分类器进行组合,它可以产生高准确度的分类器;

2.它可以处理大量的输入变量;

3.它可以在决定类别时,评估变量的重要性;

4.在建造森林时,它可以在内部对于一般化后的误差产生不偏差的估计;

5.它包含一个好方法可以估计遗失的资料,并且,如果有很大一部分的资料遗失,仍可以维持准确度。

6.它提供一个实验方法,可以去侦测变量之间的相互作用;

7.学习过程是很快速的;

8.对异常值和噪声具有很好的容忍度,且不容易出现过拟合;

随机森林的缺点:

1.对于有不同级别的属性的数据,级别划分较多的属性会对随机森林产生更大的影响,所以随机森林在这种数据上产出的属性权值是不可信的;

2.单棵决策树的预测效果很差:由于随机选择属性,使得单棵决策树的预测效果很差。

参考文献:

[1] Shotton, J.; Fitzgibbon, A.; Cook, M.; Sharp, T.; Finocchio, M.; Moore, R.; Kipman, A.; Blake, A., “Real-time human pose recognition in parts from single depth images,”Computer Vision and Pattern Recognition (CVPR), 2011 IEEE Conference on , vol., no., pp.1297,1304, 20-25 June 2011

[2] Dantone M, Gall J, Fanelli G, et al. Real-time facial feature detection using conditional regression forests[C]//Computer Vision and Pattern Recognition (CVPR), 2012 IEEE Conference on. IEEE, 2012: 2578-2585.

[3] Heng Yang, Ioannis Patras, “Face Parts Localization Using Structured-output Regression Forests”, ACCV2012, Dajeon, Korea.

本文转自:http://dataunion.org/12046.html,仅供学习交流

r使用随机森林实现所属类别的概率吗

用R做随机森林,先用训练集建模,之后用测试集进行预测,为什么总是显示allargumentsmusthavethesamelength?代码如下sub<-sample(1:nrow(dx),round(nrow(partd)/4))x1.rf<-randomForest(X1T~.,data=dx,importance=T,subset=-sub)pre1<-predict(x1.rf,data=dx,subset=sub)另外,随机森林的结果里给出的confusionmatrix是什么意思?和预测错误

质谱数据怎么用随机森林

1、数据预处理:对质谱数据进行预处理,比如去除噪声、标准化、归一化等。

2、数据划分:将数据集划分为训练集和测试集,一般采用交叉验证的方法。

3、特征提取:从质谱数据中提取特征向量,可以考虑基于峰的方式,例如峰的高度、宽度等特征属性。

4、随机森林模型训练:使用训练集训练随机森林模型,并根据验证集调整模型参数,如树的数量、树的深度、特征的选择等。

5、模型评估:用测试集进行模型评估,可以计算混淆矩阵、ROC曲线等评价指标,来评估分类器的性能。