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通过自定义isnumber函数判断字符串是否为数字的方法
Apr 23 Python
python设计模式大全
Jun 27 Python
浅谈Python数据类型判断及列表脚本操作
Nov 04 Python
对python中的xlsxwriter库简单分析
May 04 Python
Python计算一个给定时间点前一个月和后一个月第一天的方法
May 29 Python
Python 字符串与二进制串的相互转换示例
Jul 23 Python
基于Tensorflow批量数据的输入实现方式
Feb 05 Python
windows、linux下打包Python3程序详细方法
Mar 17 Python
tensorflow安装成功import tensorflow 出现问题
Apr 16 Python
500行python代码实现飞机大战
Apr 24 Python
python中remove函数的踩坑记录
Jan 04 Python
Python&Matlab实现灰狼优化算法的示例代码
Mar 21 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
40年前的这部特摄片恐龙特级克塞号80后的共同回忆
2020/03/08 日漫
php下使用SimpleXML 处理XML 文件
2010/02/27 PHP
浅谈php扩展imagick
2014/06/02 PHP
PHP curl伪造IP地址和header信息代码实例
2015/04/27 PHP
php设计模式之策略模式实例分析【星际争霸游戏案例】
2020/03/26 PHP
详解使用php-cs-fixer格式化代码
2020/09/16 PHP
Jquery 高亮显示文本中重要的关键字
2009/12/24 Javascript
javascript tips提示框组件实现代码
2010/11/19 Javascript
jQuery 淡出一个图像到另一个图像的实现代码
2013/06/12 Javascript
JS仿百度搜索自动提示框匹配查询功能
2013/11/21 Javascript
js获取ajax返回值代码
2014/04/30 Javascript
关于JavaScript中name的意义冲突示例介绍
2014/05/29 Javascript
js事件监听机制(事件捕获)总结
2014/08/08 Javascript
Node.js的Express框架使用上手指南
2016/03/12 Javascript
JavaScript中push(),join() 函数 实例详解
2016/09/06 Javascript
JS数字千分位格式化实现方法总结
2016/12/16 Javascript
基于cookie实现zTree树刷新后展开状态不变
2017/02/28 Javascript
利用Ionic2 + angular4实现一个地区选择组件
2017/07/27 Javascript
webpack分离css单独打包的方法
2018/06/12 Javascript
浅谈webpack性能榨汁机(打包速度优化)
2019/01/09 Javascript
js中对象与对象创建方法的各种方法
2019/02/27 Javascript
Vue实现将数据库中带html标签的内容输出(原始HTML(Raw HTML))
2019/10/28 Javascript
微信小程序自定义tabbar custom-tab-bar 6s出不来解决方案(cover-view不兼容)
2019/11/01 Javascript
Python通过解析网页实现看报程序的方法
2014/08/04 Python
python实现爬取千万淘宝商品的方法
2015/06/30 Python
Python使用爬虫猜密码
2016/02/19 Python
linux环境下的python安装过程图解(含setuptools)
2017/11/22 Python
Python编写通讯录通过数据库存储实现模糊查询功能
2019/07/18 Python
Python3实现打印任意宽度的菱形代码
2020/04/12 Python
纯CSS3实现给头像加个光芒四射且旋转的背景动画效果
2014/05/07 HTML / CSS
Windows和Linux动态库应用异同
2016/07/28 面试题
财务人员担保书
2014/05/13 职场文书
有子女的离婚协议书怎么写(范本)
2014/09/29 职场文书
css3 利用transform-origin 实现圆点分布在大圆上布局及旋转特效
2021/04/29 HTML / CSS
PyTorch 如何检查模型梯度是否可导
2021/06/05 Python
人工智能深度学习OpenAI baselines的使用方法
2022/05/20 Python