随机森林”是数据科学最受喜爱的预测算法之一。 20世纪90年代主要由统计学家Leo Breiman开发,随机森林因其简单而受到珍视。 虽然对于给定问题并不总是最准确的预测方法,但它在机器学习中占有特殊的地位,因为即使是那些刚接触数据科学的人也可以实现并理解这种强大的算法。
随机森林树
我们之前学习过分类树,随机森林就是种了很多分类树。对输入向量进行分类。每一颗树都是分类,要对这个输入向量进行"投票"。森林就是选择投票最多的那个树。
- 现在我们需要在森林里找N个数据进行训练,那训练集数量为N,N个随机数。每次训练都会从原数据中进行替换。这个样本就是森林树的成长。
- 如果存在M个输入变量,则指定数量m << M,使得在每个节点处,从M中随机选择m个变量,并且使用这些m上的最佳分割来分割节点。在森林生长期间,m的值保持不变。
每棵树都尽可能地生长。没有修剪。(看着就枯燥,以后一篇我会通过一个实例去讲解)
在关于随机森林的原始论文中,显示森林错误率取决于两件事:
- 森林中任何两棵树之间的相关性。 增加相关性会增加森林错误率。
- 森林中每棵树的力量(具有低错误率的树是强分类器)。 增加单个树木的强度(分类更精确)会降低森林错误率。
随机森林的特点
- 它可以处理数千个输入变量而无需变量删除。
- 它给出了对分类中哪些变量重要的估计。
- 随着森林建设的进展,它会产生对泛化误差的内部无偏估计。
- 它有一种估算缺失数据的有效方法,并在大部分数据丢失时保持准确性。
- 它具有平衡类群不平衡数据集中的错误的方法。
- 可以保存生成的林以备将来用于其他数据。
- 计算原型,提供有关变量和分类之间关系的信息。
- 它计算可用于聚类,定位异常值或(通过缩放)给出有趣的数据视图的案例对之间的邻近关系。
- 上述功能可以扩展到未标记的数据,从而导致无监督的聚类,数据视图和异常值检测。
- 它提供了一种检测可变相互作用的实验方法。
总之一句话,这个算法很重要,精确度高。
随机森林是如何工作的
要理解和使用各种选项,有关如何计算它们的更多信息是有用的。 大多数选项取决于随机林生成的两个数据对象。
当通过替换采样绘制当前树的训练集时,大约三分之一的情况被遗漏在样本之外。 随着树木被添加到森林中,该oob(out-of-bag)数据用于获得对分类错误的运行无偏估计。 它还用于获得变量重要性的估计。
在构建每个树之后,所有数据都在树下运行,并且为每对案例计算邻近度。 如果两个案例占用相同的终端节点,则它们的接近度增加一。 在运行结束时,通过除以树的数量来标准化邻近度。 Proximities用于替换缺失数据,定位异常值,以及生成数据的低维视图。(论文里的东西就是如此的生涩,难懂)。
简单说分为如下几步。
- oob误差估计
- 变量重要性
- 基尼的重要性
- 互动
- PROXIMITIES
- 缩放
- 原型
- 缺少训练集的值
- 缺少测试集的值
- 错误标记的案件
- 离群值
- 无人监督的学习
- 平衡预测错误
- 检测新奇
The out-of-bag(oob) error estimate oob误差估计
在随机森林中,不需要交叉验证或单独的测试集来获得测试集是否有偏差。 在运行期间内部逻辑如下:
使用来自原始数据的不同引导样本构造每个树。 大约三分之一的案例被遗漏在引导样本之外,并没有用于构建第k棵树。
将每个案例放在第k树的第k树的构造中,以获得分类。 以这种方式,在大约三分之一的树中为每种情况获得测试集分类。 在运行结束时,将j作为每次案例n为oob时获得大多数选票的类。 在所有情况下,j不等于n的真实等级的次数的比例是oob误差估计。 事实证明,这在许多测试中都是公正的。
Variable importance变量重要性
在森林中种植的每棵树上,放下oob案例并计算正确等级的投票数。现在随机置换oob情况中变量m的值,并将这些情况放在树下。从未改变的oob数据中的正确类的投票数中减去变量m置换oob数据中正确类的投票数。森林中所有树木的这个数字的平均值是变量m的原始重要性得分。
如果从树到树的该得分的值是独立的,则可以通过标准计算来计算标准误差。已经为许多数据集计算了树之间这些得分的相关性并且证明相当低,因此我们以经典方式计算标准误差,将原始得分除以其标准误差以得到z得分,并且指定假设正态性,z分数的显着性水平。
如果变量的数量非常大,则可以使用所有变量运行一次,然后仅使用第一次运行中最重要的变量再次运行。
对于每种情况,请考虑它所用的所有树木。从未改变的oob数据中正确类别的投票百分比中减去变量m置换oob数据中正确类别的投票百分比。对于这种情况,这是变量m的局部重要性得分,并且在图形程序RAFT中使用。
Gini Importance基尼重要性
每次在变量m上进行节点分割时,两个后代节点的基尼杂质标准小于父节点。 对于森林中所有树木的每个单独变量,加上基尼系数会产生快速变量的重要性,这通常与排列重要性度量非常一致。
Interactions交互
所使用的交互的操作定义是,如果对树中的一个变量(例如m)的拆分使得k上的拆分系统地更不可能或更可能,则变量m和k相互作用。 使用的实现基于林中每棵树的gini值g(m)。 这些是针对每棵树的排名,并且对于每两个变量,他们的排名的绝对差异在所有树上被平均。
该数字也是在假设两个变量彼此独立并且后者从前者中减去的情况下计算的。 一个大的正数意味着一个变量的分裂会抑制另一个变量的分裂,反之亦然。 这是一个实验程序,其结论需要谨慎对待。 它仅在少数数据集上进行了测试。
Proximities
这些是随机森林中最有用的工具之一。 邻近区最初形成NxN矩阵。 树生长后,将所有数据(包括训练和oob)放在树下。 如果情况k和n在同一终端节点中,则将它们的接近度增加1。 最后,通过除以树的数量来标准化邻近度。
用户注意到,对于大型数据集,它们无法将NxN矩阵拟合到快速内存中。 修改将所需的内存大小减少到NxT,其中T是林中树的数量。 为了加速计算密集型缩放和迭代缺失值替换,用户可以选择仅保留每种情况的nrnn最大邻近度。
当存在测试集时,还可以计算测试集中每个案例与训练集中的每个案例的邻近度。 额外计算量适中。
Scaling缩放
情况n和k之间的邻近性形成矩阵{prox(n,k)}。 根据它们的定义,很容易证明这个矩阵是对称的,正定的并且在1以上有界,对角元素等于1.因此,1-prox(n,k)的值是欧几里得的平方距离 尺寸空间不大于案件数量。
Prototypes原型
原型是一种了解变量如何与分类相关的图像。 对于第j个类,我们发现在其k个最近邻居中具有最大数量的类j个案例的情况,使用邻近度确定。 在这些k个案例中,我们发现每个变量的中位数,第25百分位数和第75百分位数。 中位数是j类的原型,四分位数估计是稳定性。 对于第二个原型,我们重复该过程,但只考虑不在原始k中的情况,依此类推。 当我们要求将原型输出到屏幕或保存到文件中时,通过减去第5个百分位并除以第95个百分位数和第5个百分位数之间的差异来标准化连续变量的原型。 对于分类变量,原型是最常见的值。 当我们要求将原型输出到屏幕或保存到文件时,所有频率都是针对分类变量给出的。
Missing Value replacement for the training set缺失值替代训练值
随机森林有两种方法可以替换缺失值。第一种方式很快。如果第m个变量不是分类变量,则该方法计算类j中此变量的所有值的中值,然后使用此值替换类j中第m个变量的所有缺失值。如果第m个变量是分类的,则替换是类j中最常见的非缺失值。这些替换值称为填充。
替换缺失值的第二种方法在计算上更昂贵,但是即使有大量缺失数据,也比第一种方法具有更好的性能。它仅在训练集中替换缺失值。它首先填写缺失值的粗略和不准确的填充。然后它执行森林运行并计算邻近度。
如果x(m,n)是缺失的连续值,则将其填充估计为由第n个案例和非缺失值案例之间的邻近性加权的第m个变量的非缺失值的平均值。如果它是缺少的分类变量,请将其替换为频率按接近度加权的最常见的非缺失值。
现在使用这些新填充的值再次迭代构造一个林,找到新的填充并再次迭代。我们的经验是4-6次迭代就足够了。
Miss value replacement for the test set缺失值替代测试集
当存在测试集时,根据测试集是否存在标签,有两种不同的替换方法。
如果他们这样做,那么从训练集得到的填充被用作替换。 如果标签不存在,那么测试集中的每个案例都会被复制nclass次(nclass =类的数量)。 假设案例的第一个重复是第1类,第一个类填充用于替换缺失值。 第二个重复假定为第2级,并且第2个重复使用它。
这个增强的测试集在树下运行。 在每组重复中,获得最多投票的一组确定原始案例的类别。
Mislabeled cases错误标记的案件
训练集通常通过使用人类判断来分配标签而形成。 在某些区域,这会导致错误标记的频率很高。 可以使用异常值测量来检测许多错误标记的病例。
Outliers离群值
异常值通常定义为从数据主体中删除的情况。 将其翻译为:异常值是与数据中所有其他情况的接近度通常较小的情况。 一个有用的修订是定义与其类相关的异常值。
Unsupervised learning非监督学习
在无监督学习中,数据由一组相同维度的x向量组成,没有类标签或响应变量。 没有任何优点可以优化,使得该领域可以得出含糊不清的结论。 通常的目标是对数据进行聚类 - 以查看它是否属于不同的堆,每个堆都可以分配一些含义。
Balancing Prediction Error平衡预测错误
在一些数据集中,类之间的预测误差是高度不平衡的。 有些类的预测误差很低,有些则高。 这通常发生在一个类比另一个类大得多时。 然后,试图最小化整体错误率的随机森林将使大类的错误率保持较低,同时让较小的类具有较大的错误率。 例如,在药物发现中,给定分子被分类为活性或非活性,通常将活性物质的数量超过10比1,最高可达100比1.在这些情况下,有趣类别的错误率(活性物质) 会很高的。
Detecting novelties检测新奇
测试集的离群值度量可用于找到不适合任何先前建立的类的新情况。