这个例子只是对官方的决策树的几个例子进行解释,重点在于理解特征处理前的fit操作

from pyspark import SparkConf
from pyspark.ml.feature import VectorIndexer
from pyspark.sql import SparkSession
import traceback
from pyspark.sql.types import *
from pyspark.sql.functions import *
from pyspark.ml.regression import IsotonicRegression
from pyspark.ml import Pipeline
from pyspark.ml.regression import GBTRegressor
from pyspark.ml.feature import VectorIndexer
from pyspark.ml.evaluation import RegressionEvaluatorappname = "test"  # 任务名称
master = "local"  # 单机模式设置
'''
local: 所有计算都运行在一个线程当中,没有任何并行计算,通常我们在本机执行一些测试代码,或者练手,就用这种模式。
local[K]: 指定使用几个线程来运行计算,比如local[4]就是运行4个worker线程。通常我们的cpu有几个core,就指定几个线程,最大化利用cpu的计算能力
local[*]: 这种模式直接帮你按照cpu最多cores来设置线程数了。
'''
# spark_driver_host = "10.0.0.248"try:# conf = SparkConf().setAppName(appname).setMaster(master).set("spark.driver.host", spark_driver_host) # 集群from pyspark.sql import SparkSessionfrom pyspark.sql import functions as Ffrom pyspark.sql.functions import udffrom pyspark.sql.types import *spark = SparkSession.builder.appName('gbt').master('local').getOrCreate()# 读取数据datapath = '''D://spark/spark/spark-2.3.0-bin-hadoop2.7/''';data = spark.read.format("libsvm")\.load(datapath + "data/mllib/sample_libsvm_data.txt")# 把特征中的离散值数量大于4的认为是连续特征,小于4的认为是离散特征,这里最大的疑惑是为何提前进行fit操作,而不是等到pineline的时候在进行?后面解释featureIndexer =\VectorIndexer(inputCol="features", outputCol="indexedFeatures", maxCategories=4).fit(data)# 这里只是看一下具体的数据featureData = featureIndexer.transform(data)featureData.select('*').show(5, False)# 拆分训练和测试数据(trainingData, testData) = data.randomSplit([0.7, 0.3])# 训练一颗gbt回归树,回归树的数量是10颗gbt = GBTRegressor(featuresCol="indexedFeatures", maxIter=10)# 把特征处理和回归树组成一个pinelinepipeline = Pipeline(stages=[featureIndexer, gbt])# 使用pineline训练一个模型model = pipeline.fit(trainingData)# 使用模型对训练数据进行预测trainPredictions = model.transform(trainingData)# 使用模型对测试数据进行预测testPredictions = model.transform(testData)# 查看一下预测的结果trainPredictions.select("prediction", "label", "features").show(5, False)#使用回归评估模型评估预测的结果evaluator = RegressionEvaluator(labelCol="label", predictionCol="prediction", metricName="rmse")#训练误差trainrmse = evaluator.evaluate(trainPredictions)print("Root Mean Squared Error (RMSE) on trainPredictions data = %g" % trainrmse)#测试误差testrmse = evaluator.evaluate(testPredictions)print("Root Mean Squared Error (RMSE) on trainPredictions data = %g" % testrmse)#此处可以对比训练误差和测试误差,如果两者相差很大,那么表明发生了过拟合现象,需要减少树的颗树或者减少每颗树的高度#输出训练过程中使用的回归树的具体参数gbtModel = model.stages[1]print(gbtModel)spark.stop()print('计算成功!')
except:traceback.print_exc()  # 返回出错信息print('连接出错!')

代码里面有了一些详细的注释,值得注意的是梯度提升树每次训练出来的模型不一定都是一样的,也就是每次训练的结果有差异,这里其实最想解释的是indexfeature的提前fit操作的作用是什么,其实按照我们正常的理解,特征的各种归一化等的前置出来只需要一个evaculator评估器就可以了。不需要调用fit操作变成转换器transformer,因为pineline是可以处理评估器和转换器的,那么为什么这里需要提前调用fit操作转成transformer再放到pineline中呢,根本原因是VectorIndexer需要提前知道到底某一列都要哪些特征值,如果不这样做的话,后面训练的时候他遇到了没见过的特征值,比如对某个特征来说本来他fit的时候只遇到了3个离散特征值,所以他认为这是一个离散的特征,但是实际上等他时间训练数据的时候,训练数据中出现了超过4个的离散特征值,这时候就有问题了。因为这个特征其实属于连续特征,而不是一开始这个特征处理器以为的离散特征,所以就会报错,所以这里提前fit的目的是为了给特征处理器VectorIndexer提前认识所有的特征值,防止后面训练数据或者实际用来预测数据的时候遇到他没有见过的特征,这样就会导致程序出错.

参考文献:
https://blog.csdn.net/w28971023/article/details/8240756
https://blog.csdn.net/qq_34531825/article/details/52366265?spm=1001.2101.3001.6650.7&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromBaidu%7ERate-7.pc_relevant_antiscanv2&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromBaidu%7ERate-7.pc_relevant_antiscanv2&utm_relevant_index=11
https://blog.csdn.net/woniu201411/article/details/83114226

随机森林回归树官方例子小结相关推荐

  1. R语言使用caret包构建随机森林模型(random forest)构建回归模型、通过method参数指定算法名称、通过ntree参数指定随机森林中树的个数

    R语言使用caret包构建随机森林模型(random forest)构建回归模型.通过method参数指定算法名称.通过ntree参数指定随机森林中树的个数 目录

  2. Python实现Stacking回归模型(随机森林回归、极端随机树回归、AdaBoost回归、GBDT回归、决策树回归)项目实战

    说明:这是一个机器学习实战项目(附带数据+代码+文档+视频讲解),如需数据+代码+文档+视频讲解可以直接到文章最后获取. 1.项目背景 Stacking通常考虑的是异质弱学习器(不同的学习算法被组合在 ...

  3. 机器学习系列(10)_决策树与随机森林回归

    注:本篇文章接上一篇文章>>机器学习系列(9)_决策树详解01 文章目录 一.决策树优缺点 二.泰坦尼克号幸存者案例 三.随机森林介绍 1.随机森林的分类 2.重要参数 [1]n_esti ...

  4. LESSON 9.1 随机森林回归器的实现

    目录 三 随机森林RandomForest   1 RamdomForestRegressor的实现   2 随机森林回归器的参数    2.1 弱分类器结构    2.2 弱分类器数量    2.3 ...

  5. predict函数 R_R包randomForest的随机森林回归模型以及对重要变量的选择

    R包randomForest的随机森林回归模型以及对重要变量的选择关于随机森林(random forest),前文"随机森林分类以及对重要变量的选择"中已经对其基本原理作了简单概括 ...

  6. 多元随机森林回归(Multivariate Random Forest Regreesor)经验总结

    多元随机森林回归(Multivariate Random Forest Regreesor)经验总结 随机森林 多元回归问题 是否需要分析自变量相关性 最近在使用随机森林解决多元回归问题,本文涉及一些 ...

  7. Python数据分析案例-利用多元线性回归与随机森林回归算法预测笔记本新品价格

    1.前言 目的: 本文通过多元线性回归与随机森林算法预测笔记本新品的发售价 工具: 语言:Python 3.8 软件:Jupyter Notebook 库:pandas.numpy.matplotli ...

  8. sklearn线性回归,支持向量机SVR回归,随机森林回归,神经网络回归参数解释及示例

    1.sklearn线性回归 线性回归,其中目标值 y 是输入变量 x 的线性组合. 在数学概念中,如果  是预测值. 在整个模块中,我们定义向量  作为 coef_ ,定义  作为 intercept ...

  9. 为葡萄酒数据集构造SVM分类器和使用随机森林回归模型预测葡萄酒质量

    目录 前言 一.实验目的 二.实验环境 三.实验内容与结果 1.SVM(support vector Machine)是什么? 2.SVM能干什么? 3.SVM如何实现? 4.独热编码:独热编码(On ...

  10. 随机森林 html5,利用随机森林回归算法预测总有机碳含量

    受美国"页岩气革命"的影响,页岩气勘探受到了大量的关注( 现有利用测井曲线预测TOC的方法有4类:①利用单曲线或多曲线建立回归关系的预测方法,如利用密度曲线(DEN)预测TOC.利 ...

最新文章

  1. Hadoop核心机制详细解析
  2. 使用OpenGL绘制圆环体(Torus)
  3. Eclipse 安装Spring tool suite 解决官网下载jar文件无法安装/安装过程出错,及如何下载对应版本zip文件等问题,避坑
  4. SQL with(nolock)详解
  5. 关于An association from the tablea refers to an unmapped classB
  6. android循环滚动textview,Android 循环上下滚动
  7. mysql5.7 备份恢复_RDS for MySQL 5.7 备份恢复为本地实例-阿里云开发者社区
  8. ElasticSearch 2 (18) - 深入搜索系列之控制相关度
  9. Flink on K8s 在京东的持续优化实践
  10. 全网首发:GB18030中,蒙文的错误
  11. cakephp2.X教程第一部分(基于cakephp1.3.4在线教程的改编)
  12. 模糊综合评价法——解决评价指标模糊、难以量化的问题
  13. 我的世界超能物质纳米机器人_我的世界超能物质攻略
  14. 【Web技术】662- 玩转前端 Video 播放器
  15. python火车抢票_春运火车票太难抢?不如试试这个python开源工具吧
  16. 什么是BGP,一般机房的BGP是什么意思?
  17. Emmaus Life Sciences宣布《新英格兰医学杂志》发表 Endari™(左旋谷氨酰胺口服粉剂)治疗镰状细胞病3期试验结果
  18. 鱼眼镜头行业调研报告 - 市场现状分析与发展前景预测
  19. 正则表达式(含范例)
  20. php如何获取下拉列表的值,php 获取select下拉列表框的值

热门文章

  1. endnotex9切换中文_EndNote9简明教程中文版
  2. 腾达路由器设置成中继模式
  3. 嵌入式软件高频面试题
  4. 燃气灶电气线路图及原理_燃气灶工作原理及部件构造
  5. 使用电信光猫+华为路由器实现内网穿透,外网访问内网 之 光猫超级管理员密码获取并设置桥接模式
  6. 基于KMP与Levenshtein模糊匹配算法的银行联行号查询
  7. 信息安全-网络安全应急响应技术原理与应用(一)
  8. 概率论基础知识整理(一)
  9. Glide库里,藏了一套你心心念念的GIF压缩工具集
  10. 一招搞定时间序列数据,手把手教你绘制时间序列图