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之有容乃大的list(1)
Sep 14 Python
Python实现包含min函数的栈
Apr 29 Python
Python基于回溯法子集树模板解决选排问题示例
Sep 07 Python
JS设计模式之责任链模式实例详解
Feb 03 Python
python使用selenium登录QQ邮箱(附带滑动解锁)
Jan 23 Python
python使用Paramiko模块实现远程文件拷贝
Apr 30 Python
python添加菜单图文讲解
Jun 04 Python
TensorFlow MNIST手写数据集的实现方法
Feb 05 Python
Python自定义聚合函数merge与transform区别详解
May 26 Python
python os模块在系统管理中的应用
Jun 22 Python
python 多进程和协程配合使用写入数据
Oct 30 Python
Django模板报TemplateDoesNotExist异常(亲测可行)
Dec 18 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你的验证码安全码?
2007/01/02 PHP
生成卡号php代码
2008/04/09 PHP
PHP5与MySQL数据库操作常用代码 收集
2010/03/21 PHP
php在服务器执行exec命令失败的解决方法
2012/03/03 PHP
Session 失效的原因汇总及解决丢失办法
2015/09/30 PHP
php 数组处理函数extract详解及实例代码
2016/11/23 PHP
javascript 设置某DIV区域内的checkbox复选框
2009/11/30 Javascript
JavaScript中yield实用简洁实现方式
2010/06/12 Javascript
jQuery在IE下使用未闭合的xml代码创建元素时的Bug介绍
2012/01/10 Javascript
Extjs中使用extend(js继承) 的代码
2012/03/15 Javascript
关于JS管理作用域的问题
2013/04/10 Javascript
jquery 无限级下拉菜单的简单实现代码
2014/02/21 Javascript
邮箱下拉自动填充选择示例代码附图
2014/04/03 Javascript
JavaScript通过字典进行字符串翻译转换的方法
2015/03/19 Javascript
基于javascript代码实现通过点击图片显示原图片
2015/11/29 Javascript
js获取当前时间(昨天、今天、明天)
2016/11/23 Javascript
详解nodejs 文本操作模块-fs模块(一)
2016/12/22 NodeJs
bootstrap table表格客户端分页实例
2017/08/07 Javascript
JS数组交集、并集、差集的示例代码
2017/08/23 Javascript
JS实现百度搜索接口及链接功能实例代码
2018/02/02 Javascript
Node爬取大批量文件的方法示例
2019/06/28 Javascript
vue中改变滚动条样式的方法
2020/03/03 Javascript
[02:23]完美世界全国高校联赛街访DOTA2第一期
2019/11/28 DOTA
详解如何在Apache中运行Python WSGI应用
2019/01/02 Python
详解Python 解压缩文件
2019/04/09 Python
python二维码操作:对QRCode和MyQR入门详解
2019/06/24 Python
解决Jupyter Notebook使用parser.parse_args出现错误问题
2020/04/20 Python
在keras下实现多个模型的融合方式
2020/05/23 Python
学python爬虫能做什么
2020/07/29 Python
python利用opencv保存、播放视频
2020/11/02 Python
html5教你做炫酷的碎片式图片切换 (canvas)
2017/07/28 HTML / CSS
英国奢侈品在线精品店:Hervia
2020/09/03 全球购物
三严三实对照检查材料
2014/09/22 职场文书
k-means & DBSCAN 总结
2021/04/27 Python
Nginx虚拟主机的搭建的实现步骤
2022/01/18 Servers
vue中的可拖拽宽度div的实现示例
2022/04/08 Vue.js