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 通过URL打开图片实例详解
Jun 01 Python
Python实现绘制双柱状图并显示数值功能示例
Jun 23 Python
如何基于python操作excel并获取内容
Dec 24 Python
python shutil文件操作工具使用实例分析
Dec 25 Python
Python+OpenCV实现将图像转换为二进制格式
Jan 09 Python
基于python 将列表作为参数传入函数时的测试与理解
Jun 05 Python
详解python UDP 编程
Aug 24 Python
关于Kotlin中SAM转换的那些事
Sep 15 Python
python调用摄像头的示例代码
Sep 28 Python
python中实现词云图的示例
Dec 19 Python
Python卷积神经网络图片分类框架详解分析
Nov 07 Python
利用Python多线程实现图片下载器
Mar 25 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
模拟OICQ的实现思路和核心程序(二)
2006/10/09 PHP
隐藏你的.php文件的实现方法
2007/03/19 PHP
PHP Global定义全局变量使用说明
2013/08/15 PHP
php使用GD创建保持宽高比缩略图的方法
2015/04/17 PHP
PHP5.4起内置web服务器使用方法
2016/08/09 PHP
PHP基于SPL实现的迭代器模式示例
2018/04/22 PHP
PHP7 错误处理机制修改
2021/03/09 PHP
用javascript父窗口控制只弹出一个子窗口
2007/04/10 Javascript
javascript qq右下角滑出窗口 sheyMsg
2010/03/21 Javascript
jquery得到font-size属性值实现代码
2013/09/30 Javascript
浏览器兼容console对象的简要解决方案分享
2013/10/24 Javascript
网页实时显示服务器时间和javscript自运行时钟
2014/06/09 Javascript
JavaScript中Cookie操作实例
2015/01/09 Javascript
分享经典的JavaScript开发技巧
2015/11/21 Javascript
AngularJS中的Directive自定义一个表格
2016/01/25 Javascript
javascript创建cookie、读取cookie
2016/03/31 Javascript
JS功能代码集锦
2016/05/04 Javascript
jquery mobile实现可折叠的导航按钮
2017/03/11 Javascript
JavaScript实现旋转轮播图
2020/08/18 Javascript
nodejs Assert中equal(),strictEqual(),deepEqual(),strictDeepEqual()比较
2017/09/18 NodeJs
es6系列教程_ Map详解以及常用api介绍
2017/09/25 Javascript
微信小程序开发之tabbar图标和颜色的实现
2018/10/17 Javascript
python错误:AttributeError: 'module' object has no attribute 'setdefaultencoding'问题的解决方法
2014/08/22 Python
Python中的is和id用法分析
2015/01/26 Python
Python中的__SLOTS__属性使用示例
2015/02/18 Python
python实现手机通讯录搜索功能
2018/02/22 Python
Python实现查找字符串数组最长公共前缀示例
2019/03/27 Python
如何在Django项目中引入静态文件
2019/07/26 Python
查询优化的一般准则有哪些
2015/03/08 面试题
党组织公开承诺书
2014/03/29 职场文书
警校毕业生自我评价
2014/04/06 职场文书
主题教育活动总结
2014/05/05 职场文书
2016年万圣节活动总结
2016/04/05 职场文书
MySQL 视图(View)原理解析
2021/05/19 MySQL
node.js使用express-fileupload中间件实现文件上传
2021/07/16 Javascript
MySQL约束超详解
2021/09/04 MySQL