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使用Flask框架同时上传多个文件的方法
Mar 21 Python
Python运用于数据分析的简单教程
Mar 27 Python
python开发环境PyScripter中文乱码问题解决方案
Sep 11 Python
Python内置函数reversed()用法分析
Mar 20 Python
浅谈python脚本设置运行参数的方法
Dec 03 Python
python django model联合主键的例子
Aug 06 Python
python利用datetime模块计算程序运行时间问题
Feb 20 Python
基于django micro搭建网站实现加水印功能
May 22 Python
Python Request类源码实现方法及原理解析
Aug 17 Python
Python自定义sorted排序实现方法详解
Sep 18 Python
django中ImageField的使用详解
Dec 21 Python
python之json文件转xml文件案例讲解
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的crc32函数使用时需要注意的问题(不然就是坑)
2015/04/21 PHP
PHP类型约束用法示例
2016/09/28 PHP
Laravel5.5 动态切换多语言的操作方式
2019/10/25 PHP
JavaScript 无符号右移运算符
2009/04/17 Javascript
提高jQuery性能的十个诀窍
2013/11/14 Javascript
JavaScript fontsize方法入门实例(按照指定的尺寸来显示字符串)
2014/10/17 Javascript
Javascript冒泡排序算法详解
2014/12/03 Javascript
JavaScript取得键盘按下方向键是哪个的方法
2015/08/04 Javascript
JS实现点击按钮控制Div变宽、增高及调整背景色的方法
2015/08/05 Javascript
三个js循环的关键字示例(for与while)
2016/02/16 Javascript
jQuery ajax调用后台aspx后台文件的两种常见方法(不是ashx)
2016/06/28 Javascript
很酷的星级评分系统原生JS实现
2016/08/25 Javascript
canvas 弹幕效果(实例分享)
2017/01/11 Javascript
基于Vuex无法观察到值变化的解决方法
2018/03/01 Javascript
Vue-不允许嵌套式的渲染方法
2018/09/13 Javascript
Vue监听一个数组id是否与另一个数组id相同的方法
2018/09/26 Javascript
微信小程序云开发实现增删改查功能
2019/05/17 Javascript
Vue实现导航栏点击当前标签变色功能
2020/08/19 Javascript
在elementui中Notification组件添加点击事件实例
2020/11/11 Javascript
探究Python中isalnum()方法的使用
2015/05/18 Python
Python实现模拟登录及表单提交的方法
2015/07/25 Python
Python实现基于二叉树存储结构的堆排序算法示例
2017/12/08 Python
Sanic框架安装与简单入门示例
2018/07/16 Python
Python3中_(下划线)和__(双下划线)的用途和区别
2019/04/26 Python
Python爬虫 批量爬取下载抖音视频代码实例
2019/08/16 Python
Pytorch抽取网络层的Feature Map(Vgg)实例
2019/08/20 Python
Python计算不规则图形面积算法实现解析
2019/11/22 Python
python 实现ping测试延迟的两种方法
2020/12/10 Python
HTML5 Canvas 起步(2) - 路径
2009/05/12 HTML / CSS
Proenza Schouler官方网站:纽约女装和配饰品牌
2019/01/03 全球购物
农救科工作职责
2013/11/27 职场文书
个人收入证明范本
2014/01/12 职场文书
档案检查欢迎词
2014/01/13 职场文书
巾帼文明岗事迹材料
2014/12/24 职场文书
原告离婚代理词
2015/05/23 职场文书
nginx 添加http_stub_status_module模块
2022/05/25 Servers