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 相关文章推荐
Python3中的json模块使用详解
May 05 Python
Vue的el-scrollbar实现自定义滚动
May 29 Python
Python返回数组/List长度的实例
Jun 23 Python
python操作excel的方法
Aug 16 Python
Python 利用pydub库操作音频文件的方法
Jan 09 Python
简单瞅瞅Python vars()内置函数的实现
Sep 27 Python
python实现超市商品销售管理系统
Nov 22 Python
python使用pygame实现笑脸乒乓球弹珠球游戏
Nov 25 Python
关于torch.optim的灵活使用详解(包括重写SGD,加上L1正则)
Feb 20 Python
使用Tensorflow-GPU禁用GPU设置(CPU与GPU速度对比)
Jun 30 Python
详解python程序中的多任务
Sep 16 Python
python的列表生成式,生成器和generator对象你了解吗
Mar 16 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 smarty截取中文字符乱码问题?gb2312/utf-8
2011/11/07 PHP
MySQL的FIND_IN_SET函数使用方法分享
2012/03/27 PHP
深入探讨<br />和 \r\n两者有什么区别??
2013/06/05 PHP
PHP禁止个别IP访问网站
2013/10/30 PHP
PHP抓取、分析国内视频网站的视频信息工具类
2014/04/02 PHP
33道php常见面试题及答案
2015/07/06 PHP
PHP使用PHPExcel删除Excel单元格指定列的方法
2016/07/06 PHP
php处理静态页面:页面设置缓存时间实例
2017/06/22 PHP
PHP实现的mysql读写分离操作示例
2018/05/22 PHP
JavaScript 页面坐标相关知识整理
2010/01/09 Javascript
关于firefox的ElementTraversal 接口 使用说明
2010/11/11 Javascript
你的 mixin 真的兼容 ECMAScript 5 吗?
2013/04/11 Javascript
Node.js中对通用模块的封装方法
2014/06/06 Javascript
node.js中的fs.writeFile方法使用说明
2014/12/14 Javascript
使用javascript获取页面名称
2014/12/23 Javascript
js实现跨域的方法实例详解
2015/06/24 Javascript
JS处理json日期格式化问题
2015/10/01 Javascript
学习使用bootstrap基本控件(table、form、button)
2016/04/12 Javascript
angularjs+bootstrap菜单的使用示例代码
2017/03/07 Javascript
XMLHttpRequest对象_Ajax异步请求重点(推荐)
2017/09/28 Javascript
react-native动态切换tab组件的方法
2018/07/07 Javascript
AngularJS 监听变量变化的实现方法
2018/10/09 Javascript
vue模仿网易云音乐的单页面应用
2019/04/24 Javascript
python将unicode转为str的方法
2017/06/21 Python
疯狂上涨的Python 开发者应从2.x还是3.x着手?
2017/11/16 Python
python opencv实现任意角度的透视变换实例代码
2018/01/12 Python
python 利用toapi库自动生成api
2020/10/19 Python
CSS3中的clip-path使用攻略
2015/08/03 HTML / CSS
Hertz荷兰:荷兰和全球租车
2018/01/07 全球购物
匡威英国官网:Converse英国
2018/12/02 全球购物
2014领导班子正风肃纪思想汇报
2014/09/18 职场文书
师德师风自我剖析材料
2014/09/27 职场文书
党员教师批评与自我批评发言稿
2014/10/15 职场文书
离婚起诉状范本
2015/05/19 职场文书
小学语文国培研修日志
2015/11/13 职场文书
MySQL中使用or、in与union all在查询命令下的效率对比
2021/05/26 MySQL