pyspark 随机森林的实现


Posted in Python onApril 24, 2020

随机森林是由许多决策树构成,是一种有监督机器学习方法,可以用于分类和回归,通过合并汇总来自个体决策树的结果来进行预测,采用多数选票作为分类结果,采用预测结果平均值作为回归结果。

“森林”的概念很好理解,“随机”是针对森林中的每一颗决策树,有两种含义:第一种随机是数据采样随机,构建决策树的训练数据集通过有放回的随机采样,并且只会选择一定百分比的样本,这样可以在数据集合存在噪声点、异常点的情况下,有些决策树的构造过程中不会选择到这些噪声点、异常点从而达到一定的泛化作用在一定程度上抑制过拟合;第二种随机是特征随机,训练集会包含一系列特征,随机选择一部分特征进行决策树的构建。通过这些差异点来训练的每一颗决策树都会学习输入与输出的关系,随机森林的强大之处也就在于此。

废话不多说,直接上代码:

from pyspark import SparkConf
from pyspark.sql import SparkSession
from pyspark.ml.linalg import Vectors
from pyspark.ml.feature import StringIndexer
from pyspark.ml.classification import RandomForestClassifier
from pyspark.sql import Row
import pandas as pd
from sklearn import metrics
 
if __name__ == "__main__":
  appname = "RandomForestClassifier"
  master ="local[4]" 
  conf = SparkConf().setAppName(appname).setMaster(master) #spark配置        
  spark=SparkSession.builder.config(conf=conf).getOrCreate()#spark实例化
  
#读取数据
  data=spark.read.csv('良恶性乳腺癌数据.csv',header=True)
  
#构造训练数据集
  dataSet = data.na.fill('0').rdd.map(list)#用0填充空值  
  trainData, testData= dataSet.randomSplit([0.7, 0.3], seed=7)
  trainingSet = trainData.map(lambda x:Row(label=x[-1], features=Vectors.dense(x[:-1]))).toDF()  
  train_num = trainingSet.count()
  print("训练样本数:{}".format(train_num))
 
   
#使用随机森林进行训练
  stringIndexer = StringIndexer(inputCol="label", outputCol="indexed")
  si_model = stringIndexer.fit(trainingSet)
  train_tf = si_model.transform(trainingSet)
  train_tf.show(5)  
  rf = RandomForestClassifier(numTrees=100, labelCol="indexed", seed=7)
  rfModel = rf.fit(train_tf)
   
#输出模型特征重要性、子树权重
  print("模型特征重要性:{}".format(rfModel.featureImportances))
  print("模型特征数:{}".format(rfModel.numFeatures))
  
#预测测试集
  testSet = testData.map(lambda x:Row(label=x[-1], features=Vectors.dense(x[:-1]))).toDF()
  test_num=testSet.count()
  print("测试样本数:{}".format(test_num))  
  si_model = stringIndexer.fit(testSet)
  test_tf = si_model.transform(testSet)  
  predictResult = rfModel.transform(test_tf)
  predictResult.show(5)
  spark.stop()
 
#将预测结果转为python中的dataframe
  columns=predictResult.columns#提取强表字段
  predictResult=predictResult.take(test_num)#
  predictResult=pd.DataFrame(predictResult,columns=columns)#转为python中的dataframe
 
#性能评估
  y=list(predictResult['indexed'])
  y_pred=list(predictResult['prediction'])
  y_predprob=[x[1] for x in list(predictResult['probability'])]
  precision_score=metrics.precision_score(y, y_pred)#精确率
  recall_score=metrics.recall_score(y, y_pred)#召回率
  accuracy_score=metrics.accuracy_score(y, y_pred)#准确率
  f1_score=metrics.f1_score(y, y_pred)#F1分数
  auc_score=metrics.roc_auc_score(y, y_predprob)#auc分数
  print("精确率:",precision_score )#精确率
  print("召回率:",recall_score )#召回率
  print("准确率:",accuracy_score )#准确率
  print("F1分数:", f1_score)#F1分数
  print("auc分数:",auc_score )#auc分数

运行结果:

pyspark 随机森林的实现

到此这篇关于pyspark 随机森林的实现的文章就介绍到这了,更多相关pyspark 随机森林内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
Python工程师面试题 与Python Web相关
Jan 14 Python
Python使用修饰器执行函数的参数检查功能示例
Sep 26 Python
通过Python 接口使用OpenCV的方法
Apr 02 Python
pandas数据处理基础之筛选指定行或者指定列的数据
May 03 Python
Python 中的Selenium异常处理实例代码
May 03 Python
Python tkinter label 更新方法
Oct 11 Python
深入浅析python 协程与go协程的区别
May 09 Python
pandas读取CSV文件时查看修改各列的数据类型格式
Jul 07 Python
PIL图像处理模块paste方法简单使用详解
Jul 17 Python
Python序列对象与String类型内置方法详解
Oct 22 Python
pytorch查看网络参数显存占用量等操作
May 12 Python
详解python网络进程
Jun 15 Python
Jupyter打开图形界面并画出正弦函数图像实例
Apr 24 #Python
pyspark给dataframe增加新的一列的实现示例
Apr 24 #Python
Pandas将列表(List)转换为数据框(Dataframe)
Apr 24 #Python
python实现飞船大战
Apr 24 #Python
解决安装新版PyQt5、PyQT5-tool后打不开并Designer.exe提示no Qt platform plugin的问题
Apr 24 #Python
pycharm下pyqt4安装及环境配置的教程
Apr 24 #Python
python中读入二维csv格式的表格方法详解(以元组/列表形式表示)
Apr 24 #Python
You might like
PHP实现图片简单上传
2006/10/09 PHP
Linux下安装PHP MSSQL扩展教程
2014/10/24 PHP
laravel5.6 框架操作数据 Eloquent ORM用法示例
2020/01/26 PHP
JavaScript判断两种格式的输入日期的正确性的代码
2007/03/25 Javascript
JSON 客户端和服务器端的格式转换
2009/08/27 Javascript
使用JavaScript检测Firefox浏览器是否启用了Firebug的代码
2010/12/28 Javascript
JavaScript 的继承
2011/10/01 Javascript
jquery教程限制文本框只能输入数字和小数点示例分享
2014/01/13 Javascript
jQuery中scrollLeft()方法用法实例
2015/01/16 Javascript
JavaScript基本数据类型及值类型和引用类型
2015/08/25 Javascript
JavaScript基础篇(3)之Object、Function等引用类型
2015/11/30 Javascript
js匿名函数作为函数参数详解
2016/06/01 Javascript
javascript超过容器后显示省略号效果的方法(兼容一行或者多行)
2016/07/14 Javascript
Angularjs在360兼容模式下取数据缓存问题的解决办法
2017/06/22 Javascript
jQuery实现腾讯信用界面(自制刻度尺)样式
2017/08/15 jQuery
vue2导航根据路由传值,而改变导航内容的实例
2017/11/10 Javascript
echarts学习笔记之箱线图的分析与绘制详解
2017/11/22 Javascript
vue实现动态添加数据滚动条自动滚动到底部的示例代码
2018/07/06 Javascript
微信小程序实现搜索历史功能
2020/03/26 Javascript
js实现无限瀑布流实例方法
2019/09/16 Javascript
使用Vue调取接口,并渲染数据的示例代码
2019/10/28 Javascript
使用IronPython把Python脚本集成到.NET程序中的教程
2015/03/31 Python
Queue 实现生产者消费者模型(实例讲解)
2017/11/13 Python
Python 中的Selenium异常处理实例代码
2018/05/03 Python
Python解压 rar、zip、tar文件的方法
2019/11/19 Python
python 实现方阵的对角线遍历示例
2019/11/29 Python
Python configparser模块配置文件过程解析
2020/03/03 Python
python 比较字典value的最大值的几种方法
2020/04/17 Python
python和c语言哪个更适合初学者
2020/06/22 Python
通过Canvas及File API缩放并上传图片完整示例
2013/08/08 HTML / CSS
Crocs波兰官方商店:女鞋、男鞋、童鞋、洞洞鞋
2019/10/08 全球购物
递归计算如下递归函数的值(斐波拉契)
2012/02/04 面试题
市政施工员自我鉴定
2014/01/15 职场文书
工程专业求职自荐书范文
2014/02/08 职场文书
庆元旦演讲稿
2014/09/15 职场文书
2019年作为一名实习生的述职报告
2019/09/29 职场文书