列表

详情


6. 请你说说RF和SVM的特点,评价

回答思路

支持向量机(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()

使用随机森林分类,并可视化

from sklearn.tree import DecisionTreeClassifier from sklearn.ensemble import BaggingClassifier  def visualize_classifier(model, X, y, ax=None, cmap='rainbow'):   ax = ax or plt.gca()    绘制训练数据   ax.scatter(X[:, 0], X[:, 1], c=y, s=30, cmap=cmap,        clim=(y.min(), y.max()), zorder=3)   ax.axis('tight')   ax.axis('off')   xlim = ax.get_xlim()   ylim = ax.get_ylim()    model.fit(X, y)   xx, yy = np.meshgrid(np.linspace(*xlim, num=200),             np.linspace(*ylim, num=200))   Z = model.predict(np.c_[xx.ravel(), yy.ravel()]).reshape(xx.shape)    绘制结果   n_classes = len(np.unique(y))   contours = ax.contourf(xx, yy, Z, alpha=0.3,              levels=np.arange(n_classes + 1) - 0.5,              cmap=cmap, clim=(y.min(), y.max()),              zorder=1)   ax.set(xlim=xlim, ylim=ylim)   plt.show()  tree = DecisionTreeClassifier() bag = BaggingClassifier(tree, n_estimators=100, max_samples=0.8,             random_state=1) bag.fit(X, y) visualize_classifier(bag, X, y)



上一题