随机森林:

什么是随机森林?

随机森林,顾名思义,里面有很多棵树,它基于决策树,将多个决策树结合在一起后把它们的预测结果结合起来预测目标,是集成算法中一种典型的Bagging模型。

集成算法:

通过构建并结合多个机器学习器来完成学习任务,让机器学习效果更好。

常见的集成算法模型有:Bagging,Boosting,Stacking

Bagging:

训练多个分类器取平均值:
f ( x ) = 1 / M ∑ f m ( x ) f(x)=1/M∑fm(x) f(x)=1/M∑fm(x)

Boosting:

从弱学器开始加强,不断建立新的模型,通过加权进行训练,加入一棵树,要比原来的更强

Stacking:

聚合多个分类或回归模型

随机森林的原理:

随机,一是指对数据集有放回地随机采样,二是指对采样后的样本特征进行随机采取,最后通过二者构建一棵棵结果不同的并行决策树模型,森林由此而来。

多数表决:随机森林的最终结果是由所有的决策树结果综合得出的,对于分类问题,每个决策树会输出一个分类标签,随机森林对所有决策树输出的的分类标签进行多数投票,以得出最终的分类结果。对于回归问题,每颗树输出的回归结果进行平均操作,得出随机森林的输出结果。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-C0PL6Tqj-1685342686645)(C:\Users\ASUS\Desktop\QQ图片20230528155856.png)]

随机森林建模过程:

  1. 样本随机选择
  2. 特征随机选择
  3. 决策树训练与生成
  4. 集成多棵树

随机森林的优点:

  • 可处理很高维度(feature很多)的数据,并且不用做特征选择
  • 并行化,速度比较快
  • 可以在训练完之后,评估哪些feature比较重要
  • 可以判断不同特征之间的相互影响
  • 对于不平衡的分类资料集来说,可以平衡误差
  • 不容易过拟合

随机森林的缺点:

被证明在某些噪音较大的分类或回归问提上会过拟合

当训练数据少于分类类别的时候表现很差

对于有不同取值的属性的数据,取值划分较多的属性会对随机森林产生更大的影响

随机森林代码实现:

代码来自这里

随机森林分类:

生成分类样例数据:
from sklearn.datasets import make_classificationX, y = make_classification(n_features = 2, n_informative = 2, n_redundant = 0, n_samples = 100, n_classes = 2, random_state = 0)
y[y == 0] = -1
随机森林分类实现:
import numpy as np
from sklearn.tree import DecisionTreeClassifierclass rfc:"""随机森林分类器"""def __init__(self, n_estimators = 100, random_state = 0):# 随机森林的大小self.n_estimators = n_estimators# 随机森林的随机种子self.random_state = random_statedef fit(self, X, y):"""随机森林分类器拟合"""self.y_classes = np.unique(y)# 决策树数组dts = []n = X.shape[0]rs = np.random.RandomState(self.random_state)for i in range(self.n_estimators):# 创建决策树分类器dt = DecisionTreeClassifier(random_state=rs.randint(np.iinfo(np.int32).max), max_features = "auto")# 根据随机生成的权重,拟合数据集dt.fit(X, y, sample_weight=np.bincount(rs.randint(0, n, n), minlength = n))dts.append(dt)self.trees = dts       def predict(self, X):"""随机森林分类器预测"""# 预测结果数组probas = np.zeros((X.shape[0], len(self.y_classes)))for i in range(self.n_estimators):# 决策树分类器dt = self.trees[i]# 依次预测结果可能性probas += dt.predict_proba(X)# 预测结果可能性取平均probas /= self.n_estimators# 返回预测结果return self.y_classes.take(np.argmax(probas, axis = 1), axis = 0)
随机森林分类拟合:
# 随机森林分类器
rf = rfc()
# 拟合数据集
rf.fit(X, y)
随机森林分类数据可视化:
import numpy as np
import matplotlib.pyplot as plt
from matplotlib.colors import LinearSegmentedColormapplt.rcParams['font.sans-serif'] = ['PingFang HK']  # 选择一个本地的支持中文的字体
fig, ax = plt.subplots()
ax.set_facecolor('#f8f9fa')
x_min, x_max = X[:, 0].min() - .5, X[:, 0].max() + .5
y_min, y_max = X[:, 1].min() - .5, X[:, 1].max() + .5
xx, yy = np.meshgrid(np.arange(x_min, x_max, .05), np.arange(y_min, y_max, .05))
Z = rf.predict(np.c_[xx.ravel(), yy.ravel()])
Z = Z.reshape(xx.shape)
clist=['#ffadad', '#8ecae6']
newcmp = LinearSegmentedColormap.from_list('point_color', clist)
plt.pcolormesh(xx, yy, Z, cmap = newcmp)
plt.xlim(xx.min(), xx.max())
plt.ylim(yy.min(), yy.max())
x1 = X[y==-1][:, 0]
y1 = X[y==-1][:, 1]
x2 = X[y==1][:, 0]
y2 = X[y==1][:, 1]
p1 = plt.scatter(x1, y1, c='#e63946', marker='o', s=20)
p2 = plt.scatter(x2, y2, c='#457b9d', marker='x', s=20)
ax.set_title('随机森林分类', color='#264653')
ax.set_xlabel('X1', color='#264653')
ax.set_ylabel('X2', color='#264653')
ax.tick_params(labelcolor='#264653')
plt.legend([p1, p2], ["-1", "1"], loc="upper left")
plt.show()

随机森林回归:

生成回归样例数据:
from sklearn.datasets import make_regressionX, y = make_regression(n_features = 1, n_targets = 1, n_samples = 100, noise=5, random_state = 0)
随机森林回归实现:
import numpy as np
from sklearn.tree import DecisionTreeRegressorclass rfr:"""随机森林回归器"""def __init__(self, n_estimators = 100, random_state = 0):# 随机森林的大小self.n_estimators = n_estimators# 随机森林的随机种子self.random_state = random_state  def fit(self, X, y):"""随机森林回归器拟合"""# 决策树数组dts = []n = X.shape[0]rs = np.random.RandomState(self.random_state)for i in range(self.n_estimators):# 创建决策树回归器dt = DecisionTreeRegressor(random_state=rs.randint(np.iinfo(np.int32).max), max_features = "auto")# 根据随机生成的权重,拟合数据集dt.fit(X, y, sample_weight=np.bincount(rs.randint(0, n, n), minlength = n))dts.append(dt)self.trees = dts  def predict(self, X):"""随机森林回归器预测"""# 预测结果ys = np.zeros(X.shape[0])for i in range(self.n_estimators):# 决策树回归器dt = self.trees[i]# 依次预测结果ys += dt.predict(X)# 预测结果取平均ys /= self.n_estimatorsreturn ys
随机森林回归拟合:
# 随机森林回归器
rf = rfr()
# 拟合数据集
rf.fit(X, y)
随机森林回归可视化:
import numpy as np
import matplotlib.pyplot as plt
from matplotlib.colors import LinearSegmentedColormapplt.rcParams['font.sans-serif'] = ['PingFang HK']  # 选择一个本地的支持中文的字体
fig, ax = plt.subplots()
ax.set_facecolor('#f8f9fa')
x_min, x_max = X[:, 0].min() - .5, X[:, 0].max() + .5
xx = np.arange(x_min, x_max, .05)
yy = rf.predict(np.c_[xx.ravel()])
plt.scatter(X, y, c='#e63946', marker='o', s=20)
plt.plot(xx, yy)
ax.set_title('随机森林回归', color='#264653')
ax.set_xlabel('X', color='#264653')
ax.set_ylabel('Y', color='#264653')
ax.tick_params(labelcolor='#264653')
plt.show()

基于决策树的随机森林相关推荐

  1. ML之PDP:基于FIFA 2018 Statistics(2018年俄罗斯世界杯足球赛)球队比赛之星分类预测数据集利用DT决策树RF随机森林+PDP部分依赖图可视化实现模型可解释性之详细攻略

    ML之PDP:基于FIFA 2018 Statistics(2018年俄罗斯世界杯足球赛)球队比赛之星分类预测数据集利用DT决策树&RF随机森林+PDP部分依赖图可视化实现模型可解释性之详细攻 ...

  2. 基于回归分析的广告投入销售额预测——K邻近,决策树,随机森林,线性回归,岭回归

    基于回归分析的广告投入销售额预测--K邻近,决策树,随机森林,线性回归,岭回归 文章目录 基于回归分析的广告投入销售额预测--K邻近,决策树,随机森林,线性回归,岭回归 1. 项目背景 2. 项目简介 ...

  3. 独家 | 决策树VS随机森林——应该使用哪种算法?(附代码链接)

    作者:Abhishek Sharma 翻译:陈超 校对:丁楠雅 本文长度为4600字,建议阅读20分钟 本文以银行贷款数据为案例,对是否批准顾客贷款申请的决策过程进行了算法构建,并对比了决策树与随机森 ...

  4. 2.1.决策树和随机森林

    2.1.决策树和随机森林 决策树(Decision Tree)是在已知各种情况发生概率的基础上,通过构成决策树来求取净现值的期望值大于等于零的概率,评价项目风险,判断其可行性的决策分析方法,是直观运用 ...

  5. 如何解读决策树和随机森林的内部工作机制?

    随机森林在过去几年里得到了蓬勃的发展.它是一种非线性的基于树的模型,往往可以得到准确的结果.但是,随机森林的工作过程大都处于黑箱状态,往往难以解读和完全理解.近日,Pivotal Engineerin ...

  6. 第二课 决策树与随机森林

    本系列是七月算法机器学习课程笔记 文章目录 1 从LR到决策树 1.1 决策树 1.2 决策树的终止条件 1.3 决策树划分依据 1.3.1 信息熵 1.3.2 信息增益 1.3.3 ID3模型 1. ...

  7. 机器学习之决策树与随机森林

    目录 1.了解熵.条件熵.互信息的概念及公式 1.1.熵 1.2.条件熵 1.3.信息增益/互信息 2.了解决策树 2.1.了解决策树的概念和特点以及和熵的关系 2.2.了解树生成的过程 2.3.了解 ...

  8. sklearn分类器算法:决策树与随机森林及案例分析

    分类算法之决策树 决策树是一种基本的分类方法,当然也可以用于回归.我们一般只讨论用于分类的决策树.决策树模型呈树形结构.在分类问题中,表示基于特征对实例进行分类的过程,它可以认为是if-then规则的 ...

  9. 决策树 随机森林 xgboost_从决策树到随机森林理论篇从人话到鬼话:看不懂来找我麻烦...

    从决策树产生的一些列的问题,过度到随机森林: 全文大概要阅读10分钟: 随机森林算法范畴 监督学习分类算法,基模型是由决策树组成 决策树 决策树模型与学习 特征选择 决策树生成 决策树剪枝 CART算 ...

最新文章

  1. A-FRAME初体验
  2. Web API 实现JSONP或者安装配置Cors跨域
  3. 效果图底图 线框图_5分钟的线框图教程
  4. 海纳威上云 构建数字化透明工厂
  5. 怎么设置电脑壁纸_电脑怎么设置双屏或多屏显示?
  6. php 数组去重且不保留,php数组去重并计数求和如何操作
  7. Cmd下开启3389
  8. PostgreSQL主要优势
  9. gridcontrol值为0时设置为空_汇总:MySQL 8.0 运维便捷命令
  10. Ajax无刷新评论的PHP代码,PHP Ajax实现页面无刷新发表评论
  11. 尚硅谷大数据开发Day03
  12. 甲方爸爸素材给得少,怎么做出高大上的设计?
  13. 文献中数学公式规范复制工具——Mathpix Snip
  14. elsevier模板通讯作者添加脚注的方法[已解决]
  15. 随机测试数据生成 与 Pandas迭代方法性能对比
  16. 复活Google右键翻译方法及Google浏览器网页一键翻译
  17. Bongo Cat 小猫咪自制全键盘版本 养一只超可爱的小猫
  18. 时间计算题100道_【高中政治】选择题里面的计算题怎么办(汇率篇)
  19. AWS两个VPC网络互通
  20. Android系统设置选项的包名

热门文章

  1. 工作日志-Opyrator进展
  2. 靠这个Python脚本轻松月入上万?你信不?打造淘宝主图视频
  3. 淘宝、阿里的商品主图视频如何抓取、下载的步骤
  4. java简单爬取Boss直聘招聘基本信息
  5. 基于Echarts实现可视化数据大屏Echarts地图炫光标记
  6. 给广大码农分享福利:一个业界良心的github仓库,中文计算机资料
  7. JTAG与SWD引脚
  8. python中路径写法
  9. JavaScript 数字金额转繁体金额
  10. 第7章 负面评论识别