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 相关文章推荐
Python2.5/2.6实用教程 入门基础篇
Nov 29 Python
在Python的Django框架中实现Hacker News的一些功能
Apr 17 Python
使用Python求解最大公约数的实现方法
Aug 20 Python
Python 专题三 字符串的基础知识
Mar 19 Python
基于Python3 逗号代码 和 字符图网格(详谈)
Jun 22 Python
python批量查询、汉字去重处理CSV文件
May 31 Python
Python中 map()函数的用法详解
Jul 10 Python
selenium3+python3环境搭建教程图解
Dec 07 Python
python实现五子棋小程序
Jun 18 Python
python3 selenium自动化 下拉框定位的例子
Aug 23 Python
python multiprocessing多进程变量共享与加锁的实现
Oct 02 Python
Python异常原理及异常捕捉实现过程解析
Mar 25 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
DOTA2 无惧惊涛骇浪 昆卡大型水友攻略
2020/04/20 DOTA
ThinkPHP使用Ueditor的方法详解
2016/05/20 PHP
PHP面向对象之里氏替换原则简单示例
2018/04/08 PHP
laravel自定义分页的实现案例offset()和limit()
2019/10/15 PHP
php实现的证件照换底色功能示例【人像抠图/换背景图】
2020/05/29 PHP
XMLHTTPRequest的属性和方法简介
2010/11/23 Javascript
js页面跳转的常用方法整理
2013/10/18 Javascript
js中同步与异步处理的方法和区别总结
2013/12/25 Javascript
IE8下Jquery获取select选中的值post到后台报错问题
2014/07/02 Javascript
基于jQuery实现下拉框
2014/11/24 Javascript
AngularJS优雅的自定义指令
2016/07/01 Javascript
学习vue.js计算属性
2016/12/03 Javascript
微信小程序实现图片自适应(支持多图)
2017/01/25 Javascript
关于ES6的六个小特性(二)
2017/02/20 Javascript
zTree树形插件异步加载方法详解
2017/06/14 Javascript
Node.js中流(stream)的使用方法示例
2017/07/16 Javascript
浅谈mint-ui loadmore组件注意的问题
2017/11/08 Javascript
Angular学习教程之RouterLink花式跳转
2018/05/03 Javascript
如何正确理解vue中的key详解
2019/11/02 Javascript
vue quill editor 使用富文本添加上传音频功能
2020/01/14 Javascript
python list转dict示例分享
2014/01/28 Python
python+django+sql学生信息管理后台开发
2018/01/11 Python
详解PyTorch批训练及优化器比较
2018/04/28 Python
对Python 2.7 pandas 中的read_excel详解
2018/05/04 Python
在Python中关于使用os模块遍历目录的实现方法
2019/01/03 Python
使用python制作一个为hex文件增加版本号的脚本实例
2019/06/12 Python
python批量下载抖音视频
2019/06/17 Python
Python列表的切片实例讲解
2019/08/20 Python
django2.2 和 PyMySQL版本兼容问题
2020/02/17 Python
HTML5 表单验证失败的提示语问题
2017/07/13 HTML / CSS
Spotahome意大利:公寓和房间出租
2020/02/21 全球购物
优秀三好学生事迹材料
2014/08/31 职场文书
实习协议书范本
2014/09/25 职场文书
医院领导班子查摆问题对照检查材料思想汇报
2014/10/08 职场文书
安全生产工作汇报材料
2014/10/28 职场文书
主题班会开场白
2015/06/01 职场文书