本文紧接上文的随机森林分类器模型,实践的同样是分类算法模型,随机森林模型和GBDT模型是机器学习领域里面非常重要的两种集成学习模型,两种模型虽然均采用了集成策略来进一步提升基分类器模型的性能,但是本质上是有区别的,前者采用并行的训练方式,后者采用的是串行的训练方式。

同样,下面贴一下自己学习pyspark以来的记录笔记,具体如下:

pyspark顾名思义就是由python和spark组合使用的。Spark提供了一个Python_Shell,即pyspark,从而可以以交互的方式使用Python编写Spark程序。有关Spark的基本架构以及pyspark环境配置相关的内容本篇博客就不再多加阐述了,网络上也有很多不错的讲解。

pyspark里最核心的模块是SparkContext(简称sc),最重要的数据载体是RDD。RDD就像一个NumPy array或者一个Pandas Series,可以视作一个有序的item集合。只不过这些item并不存在driver端的内存里,而是被分割成很多个partitions,每个partition的数据存在集群的executor的内存中。parkSession是Spark 2.0引入的新概念。SparkSession为用户提供了统一的切入点,来让用户学习spark的各项功能。 在spark的早期版本中,SparkContext是spark的主要切入点,由于RDD是主要的API,我们通过sparkcontext来创建和操作RDD。对于每个其他的API,我们需要使用不同的context。例如,对于Streming,我们需要使用StreamingContext;对于sql,使用sqlContext;对于hive,使用hiveContext。但是随着DataSet和DataFrame的API逐渐成为标准的API,就需要为他们建立接入点。所以在spark2.0中,引入SparkSession作为DataSet和DataFrame API的切入点。SparkSession实质上是SQLContext和HiveContext的组合(未来可能还会加上StreamingContext),所以在SQLContext和HiveContext上可用的API在SparkSession上同样是可以使用的。SparkSession内部封装了SparkContext,所以计算实际上是由SparkContext完成的。
        任何Spark应用程序都会分离主节点上的单个驱动进程(包含若干个作业 ),然后将执行进程(包含若干个任务)分配给多个工作节点。驱动进程会确定任务进程的数量和组成,然后任务进程根据DAG(有向无环图)调度器的依赖关系将任务分配给执行节点。RDD(弹性分布式数据集,Resilient Distributed Datasets)是Spark中的抽象数据结构类型,任何数据在Spark中都被表示为RDD。RDD提供了一种高度受限的共享内存模型,即RDD是只读的记录分区的集合,只能通过在其他RDD执行确定的转换操作(如map、join和group by)而创建,其本质是不可变Java虚拟机(JVM)对象的分布式集合。在PySpark中,Python数据就是存储在这些JVM对象中的。

接下来回归正题,基于pyspark的GBDT分类模型实现如下:

#!usr/bin/env python
#encoding:utf-8
from __future__ import division'''
__Author__:沂水寒城
功能: pyspark 机器学习实践之【GBDT分类器模型】
'''import findspark
findspark.init()
import pyspark
from pyspark import SparkConf
from pyspark.ml import Pipeline
from pyspark.context import SparkContext
from pyspark.sql.session import SparkSession
from pyspark.ml.classification import DecisionTreeClassifier
from pyspark.ml.evaluation import MulticlassClassificationEvaluator
from pyspark.ml.feature import StringIndexer, VectorIndexer,IndexToStringconf=SparkConf().setAppName('MLDemo')
sc = SparkContext('local')
spark = SparkSession(sc)def gradientBoostedTreeClassifier(data="mllib/sample_libsvm_data.txt"):'''GBDT分类器'''#加载LIBSVM格式的数据集data = spark.read.format("libsvm").load(data)  labelIndexer = StringIndexer(inputCol="label", outputCol="indexedLabel").fit(data)#自动识别类别特征并构建索引,指定maxCategories,因此具有> 4个不同值的特征被视为连续的featureIndexer=VectorIndexer(inputCol="features", outputCol="indexedFeatures", maxCategories=4).fit(data)#训练集、测试集划分(trainingData, testData) = data.randomSplit([0.7, 0.3])gbt = GBTClassifier(labelCol="indexedLabel", featuresCol="indexedFeatures", maxIter=10)pipeline = Pipeline(stages=[labelIndexer, featureIndexer, gbt])model = pipeline.fit(trainingData)predictions = model.transform(testData)#展示前5行数据predictions.select("prediction", "indexedLabel", "features").show(5)#展示预测标签与真实标签,计算测试误差evaluator = MulticlassClassificationEvaluator(labelCol="indexedLabel", predictionCol="prediction", metricName="accuracy")accuracy = evaluator.evaluate(predictions)print("Test Error = %g" % (1.0 - accuracy))gbtModel = model.stages[2]print('gbtModelSummary: ',gbtModel)  #模型摘要if __name__=='__main__':gradientBoostedTreeClassifier(data="mllib/sample_libsvm_data.txt")

结果输出如下:

从测试结果的错误率来看结果是非常好的,由于上文中的随机森林模型,在实际的工作使用中,经常的一个现象就是经过参数的优化处理后GBDT模型往往效果是由于随机森林的,这个可能也跟模型的构建策略有比较密切的关系。上面的GBDT模型中一共使用了10个基分类器模型效果就已经很好了。

pyspark分类算法之梯度提升决策树分类器模型GBDT实践【gradientBoostedTreeClassifier】相关推荐

  1. 机器学习之路:python 集成分类器 随机森林分类RandomForestClassifier 梯度提升决策树分类GradientBoostingClassifier 预测泰坦尼克号幸存者...

    python3 学习使用随机森林分类器 梯度提升决策树分类 的api,并将他们和单一决策树预测结果做出对比 附上我的git,欢迎大家来参考我其他分类器的代码: https://github.com/l ...

  2. 【机器学习】深入剖析梯度提升决策树(GBDT)分类与回归

    1. 梯度提升决策树概述 梯度提升决策树(Gradient Boosting Decision Tree,GBDT)是以决策树为基学习器的一种Boosting算法,它在每一轮迭代中建立一个决策树,使当 ...

  3. 复盘:GBDT,梯度提升决策树,Gradient Boosting Decision Tree,堪称最好的算法之一

    复盘:GBDT,梯度提升决策树,Gradient Boosting Decision Tree,堪称最好的算法之一 提示:系列被面试官问的问题,我自己当时不会,所以下来自己复盘一下,认真学习和总结,以 ...

  4. 简单易学的机器学习算法——梯度提升决策树GBDT

    梯度提升决策树(Gradient Boosting Decision Tree,GBDT)算法是近年来被提及比较多的一个算法,这主要得益于其算法的性能,以及该算法在各类数据挖掘以及机器学习比赛中的卓越 ...

  5. [机器学习算法]GBDT梯度提升决策树

    参考:https://blog.csdn.net/google19890102/article/details/51746402/ 一.回顾 1.有监督学习方法 (1).模型:给定自变量和因变量进行预 ...

  6. 梯度提升决策树(GBDT)与XGBoost、LightGBM

    20211224 [机器学习算法总结]XGBoost_yyy430的博客-CSDN博客_xgboost xgboost参数 默认:auto.XGBoost中使用的树构造算法.可选项:auto,exac ...

  7. [机器学习]梯度提升决策树--GBDT

    概述 GBDT(Gradient Boosting Decision Tree) 又叫 MART(Multiple Additive Regression Tree),是一种迭代的决策树算法,该算法由 ...

  8. 机器学习-集成学习-梯度提升决策树(GBDT)

    目录 1. GBDT算法的过程 1.1 Boosting思想 1.2 GBDT原理 需要多少颗树 2. 梯度提升和梯度下降的区别和联系是什么? 3. GBDT的优点和局限性有哪些? 3.1 优点 3. ...

  9. 3. 梯度提升决策树(GBDT)详解

    一.提升树 以决策树为基函数的提升方法称为提升树.其中,分类问题采用二叉分类树,回归问题采用二叉回归树.sklearn中的提升树采用的是CART树.模型可以表示为决策树的加法模型: 其中,表示决策树, ...

  10. GBDT:梯度提升决策树

    From http://blog.csdn.net/suranxu007/   AND     http://www.jianshu.com/p/005a4e6ac775 综述   GBDT(Grad ...

最新文章

  1. 配置phpmyadmin连接远程 MySQL数据库
  2. java 张龙_张龙 JAVA5新特性学习笔记
  3. java 自适应响应式 网站 源码 SSM 生成 静态化 手机 平板 PC
  4. LinuxMint(Ubuntu)安装文泉驿家族黑体字
  5. ElasticSearch出现java.lang.IllegalStateException: duplicate plugin: - Plugin information:
  6. js动态获取时间的方式
  7. MySQL MHA配置常见问题
  8. 设计师面试提前准备好这10个面试问题,助你面试成功
  9. android 步骤view,笔记20170530--自定义一个显示步骤的View(android)
  10. 常用的功率半导体器件汇总
  11. foxmail 设置签名和信纸
  12. C/C++ 16bit转8bit
  13. Mysql占用CPU过高排查过程及可能优化方案
  14. 等级保护二、三、四级内容及对比
  15. 【Wi-Fi 802.11协议】管理帧 之 Beacon帧详解
  16. 台式计算机的辐射,台式电脑哪个部分辐射比较大?
  17. android系统firefox,Android平台Firefox——Fennec编译手记
  18. 小鸟云产品/服务初体验
  19. 互动游戏对战平台推荐:盘点很火的互动小游戏多人对战平台
  20. 流量思维:拉新、留存、转化、裂变-运营设计(0)

热门文章

  1. 「腾讯地图」小程序插件
  2. Spring Cloud Hystrix - 服务容错
  3. Handler深入(分析源码,手写一套Handler)
  4. 数据库专家:MySQL分片水很深
  5. linux文件管理命令详解
  6. SVM-线性可分支持向量机
  7. 一些有意思的博客收藏
  8. applicationhostconfig
  9. 学科前沿技术专题第九章
  10. 更新Sogou代理服务器程序,支持HTTPS