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中在脚本中引用其他文件函数的实现方法
Jun 23 Python
Python实现ssh批量登录并执行命令
Oct 25 Python
Python下的Softmax回归函数的实现方法(推荐)
Jan 26 Python
基于Python的文件类型和字符串详解
Dec 21 Python
python3.5绘制随机漫步图
Aug 27 Python
Python提取特定时间段内数据的方法实例
Apr 01 Python
PyCharm中代码字体大小调整方法
Jul 29 Python
Anaconda3中的Jupyter notebook添加目录插件的实现
May 18 Python
浅谈tensorflow使用张量时的一些注意点tf.concat,tf.reshape,tf.stack
Jun 23 Python
利用Python pandas对Excel进行合并的方法示例
Nov 04 Python
Python 中的单分派泛函数你真的了解吗
Jun 22 Python
关于Python中*args和**kwargs的深入理解
Aug 07 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 防止单引号,双引号在接受页面转义
2008/07/10 PHP
php实现通过soap调用.Net的WebService asmx文件
2017/02/27 PHP
js类中的公有变量和私有变量
2008/07/24 Javascript
jquery关于图形报表的运用实现代码
2011/01/06 Javascript
JS调用CS里的带参方法实例
2013/08/01 Javascript
javascript中打印当前的时间实现思路及代码
2013/12/18 Javascript
网页右下角弹出窗体实现代码
2014/06/05 Javascript
禁止iframe脚本弹出的窗口覆盖了父窗口的方法
2014/09/06 Javascript
jq实现左侧显示图片右侧文字滑动切换效果
2015/08/04 Javascript
JavaScript操作 url 中 search 部分方法函数
2016/06/15 Javascript
javascript实现的上下无缝滚动效果
2016/09/19 Javascript
js实现动态显示时间效果
2017/03/06 Javascript
详解在vue-cli项目中安装node-sass
2017/06/21 Javascript
微信小程序实现图片上传放大预览删除代码
2020/06/28 Javascript
vue实现抖音时间转盘
2019/09/08 Javascript
如何用vue-cli3脚手架搭建一个基于ts的基础脚手架的方法
2019/12/12 Javascript
vue项目中使用多选框的实例代码
2020/07/22 Javascript
vue中全局路由守卫中替代this操作(this.$store/this.$vux)
2020/07/24 Javascript
Python2.x中文乱码问题解决方法
2015/06/02 Python
一篇文章入门Python生态系统(Python新手入门指导)
2015/12/11 Python
如何通过python画loss曲线的方法
2019/06/26 Python
python3 实现的对象与json相互转换操作示例
2019/08/17 Python
完美解决pycharm 不显示代码提示问题
2020/06/02 Python
CSS3 实现图形下落动画效果
2020/11/13 HTML / CSS
车库门开启器、遥控器和零件:Chamberlain
2019/04/09 全球购物
生物专业个人自荐信范文
2013/11/29 职场文书
户外用品商店创业计划书
2014/01/29 职场文书
企业授权委托书范本
2014/04/02 职场文书
师范类求职信
2014/06/21 职场文书
单位授权委托书范文
2014/08/02 职场文书
同意迁入证明模板
2014/10/26 职场文书
小学语文继续教育研修日志
2015/11/13 职场文书
大学生饮品店创业计划书范文
2019/07/10 职场文书
Python字符串对齐方法使用(ljust()、rjust()和center())
2021/04/26 Python
vue如何批量引入组件、注册和使用详解
2021/05/12 Vue.js
JavaScript选择器函数querySelector和querySelectorAll
2021/11/27 Javascript