随机森林(RandomForest)简单回归预测

随机森林是bagging方法的一种具体实现。它会训练多棵决策树,然后将这些结果融合在一起就是最终的结果。随机森林可以用于分裂,也可以用于回归。主要在于决策树类型的选取,根据具体的任务选择具体类别的决策树。

对于分类问题,一个测试样本会送到每一颗决策树中进行预测,然后投票,得票最多的类为最终的分类结果;

对于回归问题,随机森林的预测结果是所有决策树输出的均值。

本文介绍利用随机森林进行时间序列的简单回归预测,满足大部分科研需求。

介绍

随机森林的优点:

在数据集上表现良好,两个随机性的引入,使得随机森林不容易陷入过拟合,但是对于小数据集还是有可能过拟合,所以还是要注意;

两个随机性的引入,使得随机森林具有很好的抗噪能力;

它能够处理很高维的数据,并且不用做特征选择,对数据集的适应能力强。既能处理离散性数据,也能处理连续型数据,数据集无需规范化;

在创建随机森林的时候,对generalization error使用的是无偏估计;

训练速度快,可以得到变量重要性排序;

在训练过程中,能够检测到feature间的互影响;

容易做成并行化方法;

实现比较简单

随机森林的缺点:

对于小数据集和低维的数据效果可能不是很好。

整个模型为黑盒,没有很强的解释性。

由于随机森林的两个随机性,导致运行结果不稳定。

数据准备

安装所需要的py库

pip install sklearn

导入所需要的包

import numpy as np
import matplotlib.pyplot as plt
from sklearn.ensemble import RandomForestRegressor
from sklearn.model_selection import train_test_split
from sklearn.multioutput import MultiOutputRegressor

​单输出回归

预测给定输入的单个数字输出。

随机构建训练集和测试集

rng = np.random.RandomState(1)
X = np.sort(200 * rng.rand(600, 1) - 100, axis=0)
y = np.array([np.pi * np.sin(X).ravel()]).T
y += (0.5 - rng.rand(*y.shape))
#x和y的shape为(600, 1) (600, 1)
​
X_train, X_test, y_train, y_test = train_test_split(X, y, train_size=400, test_size=200, random_state=4)
#X_train, X_test, y_train, y_test的shape
#为(400, 1) (200, 1) (400, 1) (200, 1)

构建模型并进行预测

#定义模型
regr_rf = RandomForestRegressor(n_estimators=100, max_depth=30,random_state=2)
# 集合模型
regr_rf.fit(X_train, y_train)
# 利用预测
y_rf = regr_rf.predict(X_test)
#评价
print(regr_rf.score(X_test, y_test))

作图

plt.figure()
s = 50
a = 0.4
plt.scatter(X_test, y_test, edgecolor='k',c="navy", s=s, marker="s", alpha=a, label="Data")
​
plt.scatter(X_test, y_rf, edgecolor='k',c="c", s=s, marker="^", alpha=a,label="RF score=%.2f" % regr_rf.score(X_test, y_test))
plt.xlim([-6, 6])
​
plt.xlabel("X_test")
plt.ylabel("target")
plt.title("Comparing random forests and the test")
plt.legend()
plt.show()

多输出回归

根据输入预测两个或多个数字输出。

随机构建训练集和测试集,这里构建的是一个x对应两个y

rng = np.random.RandomState(1)
X = np.sort(200 * rng.rand(600, 1) - 100, axis=0)
y = np.array([np.pi * np.sin(X).ravel(), np.pi * np.cos(X).ravel()]).T
y += (0.5 - rng.rand(*y.shape))
#x和y的shape为(600, 1) (600, 2)
​
X_train, X_test, y_train, y_test = train_test_split(X, y, train_size=400, test_size=200, random_state=4)
#X_train, X_test, y_train, y_test的shape
#为(400, 1) (200, 2) (400, 1) (200, 2)

构建模型并进行预测

这里尝试了利用随机森林和包装器类两种方法

#定义模型
max_depth = 30
regr_multirf = MultiOutputRegressor(RandomForestRegressor(n_estimators=100,                                                       max_depth=max_depth,                                                      random_state=0))
# 拟合模型
regr_multirf.fit(X_train, y_train)
​
#定义模型
regr_rf = RandomForestRegressor(n_estimators=100, max_depth=max_depth,random_state=2)
# 拟合
regr_rf.fit(X_train, y_train)
​
#预测
y_multirf = regr_multirf.predict(X_test)
y_rf = regr_rf.predict(X_test)

作图

plt.figure()
s = 50
a = 0.4
plt.scatter(y_test[:, 0], y_test[:, 1], edgecolor='k',c="navy", s=s, marker="s", alpha=a, label="Data")
plt.scatter(y_multirf[:, 0], y_multirf[:, 1], edgecolor='k',c="cornflowerblue", s=s, alpha=a,label="Multi RF score=%.2f" % regr_multirf.score(X_test, y_test))
plt.scatter(y_rf[:, 0], y_rf[:, 1], edgecolor='k',c="c", s=s, marker="^", alpha=a,label="RF score=%.2f" % regr_rf.score(X_test, y_test))
plt.xlim([-6, 6])
plt.ylim([-6, 6])
plt.xlabel("target 1")
plt.ylabel("target 2")
plt.title("Comparing random forests and the multi-output meta estimator")
plt.legend()
plt.show()

欢迎关注vx公众号遥感迷,更多东西静待发布

随机森林简单回归预测相关推荐

  1. Python+随机森林

    随机森林 随机森林定义 随机森林(Random Forest,简称RF),是在以决策树为基础学习器构建Bagging集成的基础上引入了随机属性选择.即由许多决策树随机构成,其中每棵决策树之间没有关联. ...

  2. python实现对森林生物量进行随机森林回归预测

    使用随机森林回归预测森林生物量(python) 随机森林算法的基本思想是基于多颗决策树的集成学习过程,使用场景广泛,一般的分类回归问题都可以使用.我们以光学影像为例,来估测森林生物量. 建立回归关系需 ...

  3. 随机森林随机回归预测_使用随机森林预测幸福

    随机森林随机回归预测 Why do we try to predict happiness? Being able to predict happiness means that we are abl ...

  4. ML之回归预测:利用十类机器学习算法(线性回归、kNN、SVM、决策树、随机森林、极端随机树、SGD、提升树、LightGBM、XGBoost)对波士顿数据集回归预测(模型评估、推理并导到csv)

    ML之回归预测:利用十类机器学习算法(线性回归.kNN.SVM.决策树.随机森林.极端随机树.SGD.提升树.LightGBM.XGBoost)对波士顿数据集[13+1,506]回归预测(模型评估.推 ...

  5. 随机森林回归预测r语言_R包 randomForest 进行随机森林分析

    randomForest 包提供了利用随机森林算法解决分类和回归问题的功能:我们这里只关注随机森林算法在分类问题中的应用 首先安装这个R包 install.packages("randomF ...

  6. 基于随机森林的分类算法的matlab简单实现

    说明 关于熵.信息增益.信息增益比.基尼指数的计算不再写出 决策树构建--使用最简单的ID3算法 1.输入:训练数据集D,特征集A,阈值(后面会说明数据集的内容) 2.输出:决策树T (1)若D中所有 ...

  7. 回归预测分析(RANSAC、多项式回归、残差图、随机森林)

    在本篇文章中,主要是介绍利用波士顿房价数据来掌握回归预测分析的一些方法.通过本篇文章你可以学习到: 1.可视化数据集的重要特征 2.估计回归模型的系数 3.使用RANSAC拟合高鲁棒性回归模型 4.如 ...

  8. 随机森林模型构建--在凯斯西储(CWRU)数据上的简单测试(1)

    随机森林模型构建测试–在凯斯西储(CWRU)数据上的简单测试(1) 文章目录 随机森林模型构建测试--在凯斯西储(CWRU)数据上的简单测试(1) 1. 实验数据集说明 2. 测试数据说明 3. 随机 ...

  9. 采用支持向量回归(SVR)和随机森林回归预测两种机器学习方法对房价进行预测(附完整代码)

    大家好,我是带我去滑雪,每天教你一个小技巧! 本文分别采用支持向量回归(SVR)和随机森林回归预测两种机器学习方法对房价进行预测.随机将数据分为训练集和测试集,比例为8:2,数据和代码均在文末. 1. ...

  10. 随机森林 (Random Forests) 简单介绍与应用

    1 集成方法(Ensemble methods) 1.1 什么是集成方法 简单来说,集成方法 就是组合多个模型,以获得更好效果. 1.2 两种集成方法 平均法(averaging methods):也 ...

最新文章

  1. 数组、字符串对象、Math对象
  2. 供应链金融服务平台:应收、预付和存货融资业务
  3. Linux虚拟机最小化安装后转换成图形界面(图文详解)
  4. 关于Visual Studio Code里进行SAP UI5开发的代码自动完成功能
  5. JLINK与JTAG的区别
  6. c#之task与thread区别及其使用
  7. python达内教程_达内教你如何零基础入门python编程
  8. 测试对于list的sort与sorted的效率
  9. 向爸爸借了500,向妈妈借了500,买了双皮鞋用了970。剩下30元,还爸爸10块,还妈妈10块,自己剩下了10块,欠爸爸490,欠妈妈490,490+490=980。加上自己的10块=990。还有1
  10. UML的类图中各箭头的含义
  11. 提高 分类器 准确率的几种方法总结
  12. 00004 死亡阴影.0001:配置文件的Unity包与修改
  13. Linux下的离线词典,Linux下星际译王离线词库
  14. 企业数字化转型:数字化成熟度评估模型
  15. Android原生态实现分享转发功能(分享图片到其他APP)
  16. 怎么尽可能将pdf文件压缩到最小
  17. Web网站模板-健身房宣传响应式网站模板(HTML+CSS+JavaScript)
  18. cjk-ext-e 字体
  19. 轻松理解 客户端和服务器端的区别
  20. DCDC开关电源电磁兼容(二)什么是LISN(有内部电路详细解释)

热门文章

  1. 5G系统中BBU与RRU之间前传接口(CPRI)带宽计算
  2. 中建政研马海顺-PPP项目EPC工程总承包全过程管控与风险防范
  3. svn和Git有什么关系
  4. python3网络爬虫-介绍
  5. Win10虚拟机性能优化
  6. android 点击按钮打开浏览器网页
  7. nc 单据模板公式
  8. 动图在线压缩怎么操作?教你快速压缩动图
  9. JS、H5调用手机相册摄像头以及文件夹
  10. Ruff自主研发的NB-IoT智能网关获得联通实验室测试通过