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脚本实现格式化css文件
Apr 08 Python
tensorflow输出权重值和偏差的方法
Feb 10 Python
python实现图书管理系统
Mar 12 Python
numpy中实现ndarray数组返回符合特定条件的索引方法
Apr 17 Python
python 基本数据类型占用内存空间大小的实例
Jun 12 Python
Python实现的连接mssql数据库操作示例
Aug 17 Python
详解python使用pip安装第三方库(工具包)速度慢、超时、失败的解决方案
Dec 02 Python
Python脚本利用adb进行手机控制的方法
Jul 08 Python
python3.5 cv2 获取视频特定帧生成jpg图片
Aug 28 Python
python 常见的反爬虫策略
Sep 27 Python
python 两种方法删除空文件夹
Sep 29 Python
解决python3中os.popen()出错的问题
Nov 19 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操作mysql函数详解,mysql和php交互函数
2011/05/19 PHP
php实现的简易扫雷游戏实例
2015/07/09 PHP
PHP字典树(Trie树)定义与实现方法示例
2017/10/09 PHP
PHP多维数组指定多字段排序的示例代码
2018/05/16 PHP
PHP实现单条sql执行多个数据的insert语句方法
2019/10/11 PHP
tbody元素支持嵌套的注意方法
2007/03/24 Javascript
javascript中有趣的反柯里化深入分析
2012/12/05 Javascript
javascript中的toFixed固定小数位数 简单实例分享
2013/07/12 Javascript
JavaScript操作Oracle数据库示例
2015/03/06 Javascript
JavaScript引用类型和基本类型详解
2016/01/06 Javascript
JavaScript String 对象常用方法总结
2016/04/28 Javascript
AngularJS监听路由变化的方法
2017/03/07 Javascript
angular.js+node.js实现下载图片处理详解
2017/03/31 Javascript
原生JS发送异步数据请求
2017/06/08 Javascript
react开发教程之React 组件之间的通信方式
2017/08/12 Javascript
mescroll.js上拉加载下拉刷新组件使用详解
2017/11/13 Javascript
vue 2.x 中axios 封装的get 和post方法
2018/02/28 Javascript
JS获取url参数,JS发送json格式的POST请求方法
2018/03/29 Javascript
JavaScript Canvas编写炫彩的网页时钟
2019/10/16 Javascript
《javascript设计模式》学习笔记一:Javascript面向对象程序设计对象成员的定义分析
2020/04/07 Javascript
利用Python的装饰器解决Bottle框架中用户验证问题
2015/04/24 Python
基于python实现的抓取腾讯视频所有电影的爬虫
2016/04/22 Python
Python 高级专用类方法的实例详解
2017/09/11 Python
Python基于identicon库创建类似Github上用的头像功能
2017/09/25 Python
Python3多线程操作简单示例
2018/05/22 Python
使用python的pexpect模块,实现远程免密登录的示例
2019/02/14 Python
Python远程视频监控程序的实例代码
2019/05/05 Python
Python用requests库爬取返回为空的解决办法
2021/02/21 Python
Skyscanner阿联酋:全球领先的旅游搜索平台
2017/11/25 全球购物
比较基础的php面试题及答案-编程题
2012/10/14 面试题
测控技术与通信工程毕业生自荐信范文
2013/12/28 职场文书
学习心得体会
2014/01/01 职场文书
五好家庭事迹材料
2014/12/20 职场文书
师德承诺书
2015/01/20 职场文书
Pytorch 如何加速Dataloader提升数据读取速度
2021/05/28 Python
Spring-cloud Config Server的3种配置方式
2021/09/25 Java/Android