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中用Spark模块的使用教程
Apr 13 Python
Python 制作糗事百科爬虫实例
Sep 22 Python
python字符串,数值计算
Oct 05 Python
python with提前退出遇到的坑与解决方案
Jan 05 Python
tornado 多进程模式解析
Jan 15 Python
Tensorflow 利用tf.contrib.learn建立输入函数的方法
Feb 08 Python
python Selenium实现付费音乐批量下载的实现方法
Jan 24 Python
django框架防止XSS注入的方法分析
Jun 21 Python
pytorch实现线性拟合方式
Jan 15 Python
python实现ssh及sftp功能(实例代码)
Mar 16 Python
Python3爬虫中关于Ajax分析方法的总结
Jul 10 Python
python通过函数名调用函数的几种场景
Sep 23 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中判断文件空目录是否有读写权限的函数代码
2012/08/07 PHP
PHP命名空间(Namespace)简明教程
2014/06/11 PHP
PHP实现图片压缩的两则实例
2014/07/19 PHP
PHP面向对象详解(三)
2015/12/07 PHP
PHP自动载入类文件函数__autoload的使用方法
2019/03/25 PHP
javascript html 静态页面传参数
2009/04/10 Javascript
基于jQuery的图片大小自动适应实现代码
2010/11/17 Javascript
javascript实现汉字转拼音代码分享
2015/04/20 Javascript
动态加载js文件简单示例
2016/04/21 Javascript
浅析ES6的八进制与二进制整数字面量
2016/08/30 Javascript
浅谈javascript的闭包
2017/01/23 Javascript
Javascript操作dom对象之select全面解析
2017/04/24 Javascript
node.js操作mysql简单实例
2017/05/25 Javascript
Angular2关于@angular/cli默认端口号配置的问题
2017/07/15 Javascript
vue使用微信JS-SDK实现分享功能
2019/08/23 Javascript
JavaScript实现PC端横向轮播图
2020/02/07 Javascript
vue 实现超长文本截取,悬浮框提示
2020/07/29 Javascript
删除目录下相同文件的python代码(逐级优化)
2012/05/25 Python
Python ORM框架SQLAlchemy学习笔记之数据添加和事务回滚介绍
2014/06/10 Python
跟老齐学Python之有容乃大的list(4)
2014/09/28 Python
Python 出现错误TypeError: ‘NoneType’ object is not iterable解决办法
2017/01/12 Python
简单易懂的python环境安装教程
2017/07/13 Python
Python算法之图的遍历
2017/11/16 Python
python编写朴素贝叶斯用于文本分类
2017/12/21 Python
Python cookbook(数据结构与算法)将序列分解为单独变量的方法
2018/02/13 Python
python-itchat 获取微信群用户信息的实例
2019/02/21 Python
Python日志处理模块logging用法解析
2020/05/19 Python
Python使用Chrome插件实现爬虫过程图解
2020/06/09 Python
CSS3感应鼠标的背景闪烁和图片缩放动画效果
2014/05/14 HTML / CSS
css3 clip实现圆环进度条的示例代码
2018/02/07 HTML / CSS
科颜氏香港官方网店:Kiehl’s香港
2021/03/07 全球购物
机电专业个人自荐信格式模板
2013/09/23 职场文书
生产厂长岗位职责
2014/02/21 职场文书
房屋买卖协议书范本
2014/04/10 职场文书
2015财务年度工作总结范文
2015/05/04 职场文书
Nginx中break与last的区别详析
2021/03/31 Servers