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可跨平台实现获取按键的方法
Mar 05 Python
解析Python中while true的使用
Oct 13 Python
Python内置模块turtle绘图详解
Dec 09 Python
Python使用Phantomjs截屏网页的方法
May 17 Python
pyqt5 实现多窗口跳转的方法
Jun 19 Python
Python pandas.DataFrame调整列顺序及修改index名的方法
Jun 21 Python
Pytorch中index_select() 函数的实现理解
Nov 19 Python
python return逻辑判断表达式实现解析
Dec 02 Python
python读取ini配置文件过程示范
Dec 23 Python
小白教你PyCharm从下载到安装再到科学使用PyCharm2020最新激活码
Sep 25 Python
Numpy中np.random.rand()和np.random.randn() 用法和区别详解
Oct 23 Python
Python开发五子棋小游戏
May 02 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 Token(令牌)设计
2008/03/15 PHP
PHP 高级课程笔记 面向对象
2009/06/21 PHP
关于PHP的相似度计算函数:levenshtein的使用介绍
2013/04/15 PHP
PHP中的流(streams)浅析
2015/07/02 PHP
php+ajax无刷新分页实例详解
2015/12/07 PHP
PHP时间戳格式全部汇总 (获取时间、时间戳)
2016/06/13 PHP
Mac版PhpStorm之XAMPP整合apache服务器配置的图文教程详解
2016/10/13 PHP
简明json介绍
2008/09/28 Javascript
javascript学习笔记(三)BOM和DOM详解
2014/09/30 Javascript
Javascript实现网络监测的方法
2015/07/31 Javascript
jquery实现简单的二级导航下拉菜单效果
2015/09/07 Javascript
jQuery实现选中行变色效果(实例讲解)
2017/07/06 jQuery
vue获取dom元素注意事项
2017/12/28 Javascript
Vue 将后台传过来的带html字段的字符串转换为 HTML
2018/03/29 Javascript
JavaScript继承与多继承实例分析
2018/05/26 Javascript
如何使用JavaScript实现栈与队列
2019/06/24 Javascript
CountUp.js数字滚动插件使用方法详解
2019/10/17 Javascript
node.JS事件机制与events事件模块的使用方法详解
2020/02/06 Javascript
浅析JS中NEW的实现原理及重写
2020/02/20 Javascript
测试、预发布后用python检测网页是否有日常链接
2014/06/03 Python
Python中unittest模块做UT(单元测试)使用实例
2015/06/12 Python
Python基于pandas实现json格式转换成dataframe的方法
2018/06/22 Python
python将txt文档每行内容循环插入数据库的方法
2018/12/28 Python
python绘制双Y轴折线图以及单Y轴双变量柱状图的实例
2019/07/08 Python
django 连接数据库 sqlite的例子
2019/08/14 Python
python打造爬虫代理池过程解析
2019/08/15 Python
Python实现把类当做字典来访问
2019/12/16 Python
什么是WEB控件?使用WEB控件有哪些优势?
2012/01/21 面试题
创业计划书模版
2014/02/05 职场文书
财务人员的自我评价范文
2014/03/03 职场文书
文明演讲稿范文
2014/05/12 职场文书
党支部党的群众路线对照检查材料
2014/09/24 职场文书
2014年高校辅导员工作总结
2014/12/09 职场文书
PHP控制循环操作的时间
2021/04/01 PHP
浅谈react useEffect闭包的坑
2021/06/08 Javascript
CSS Transition通过改变Height实现展开收起元素
2021/08/07 HTML / CSS