支持向量机(SVM)已经介绍了,讲讲随机森林(random forest,RF)。
想要了解随机森林,首先要知道决策树,即森林由一棵棵树组成。
决策树
决策树是一种有监督的机器学习算法,该方法可以用于解决分类和回归问题。
决策树可以简单地理解为达到某一特定结果的一系列决策。思考逻辑上,就像一连串的if-else,如果满足xx特征,则归为xx类别,否则则归为yy类别。(可以参考周志华老师《机器学习》里挑西瓜的案例)
这其中的关键,就是如何选取特征。一棵树能选取的特征往往有限,限制了模型的性能。因此就有了随机森林。
随机森林
随机森林是基于决策树的机器学习算法,该算法利用了多棵决策树的力量来进行决策。
为什么要称其为“随机森林”呢?这是因为它是随机创造的决策树组成的森林。决策树中的每一个节点是特征的一个随机子集,用于计算输出。随机森林将单个决策树的输出整合起来生成最后的输出结果。
简单来说:“随机森林算法用多棵(随机生成的)决策树来生成最后的输出结果。”
对于一个测试数据,将它投入到随机森林中的不同决策树中,会得到不同的测试结果。若问题是一个分类问题,则可以通过求众数来得出测试数据的类别;若问题是一个回归问题,则可以通过求平均值得出测试数据的值。该过程即为经典的bagging思想。
那么RF和SVM的特点就可以归纳为
SVM
1.解决小样本下机器学习问题(不像深度学习一样,依赖海量数据)
2.可以解决高维问题,即大型特征空间(借助核函数);但当样本很多时,效率并不是很高
3.SVM的最终决策函数只由少数的支持向量所确定,计算的复杂性取决于支持向量的数目,而不是样本空间的维数
4.无需依赖整个数据,无局部极小值问题;但SVM算法对大规模训练样本难以实施
5.能够处理非线性特征的相互作用,对于核函数的高维映射可解释性不强,尤其是径向基函数RF
1.简单,容易实现,计算开销小,并且它在很多现实任务中展现出来了强大的性能
2.它能够处理很高维度(特征很多)的数据,并且不用做特征选择(可以随机选择各种特征)
4.训练速度快,容易做成并行化方法
\5. 在训练完后,它能够给出哪些feature比较重要
在创建随机森林的时候,对generlization error使用的是无偏估计,模型泛化能力强
6.对于不平衡的数据集来说,它可以平衡误差;如果有很大一部分的特征遗失,仍可以维持准确度。
RF示例代码:
from sklearn.datasets import make_blobs
import matplotlib.pyplot as plt
import numpy as np
X, y = make_blobs(n_samples=300, centers=4, random_state=0, cluster_std=1.0)
plt.scatter(X[:, 0], X[:, 1], c=y, s=50, cmap='rainbow')
plt.show()