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获取指定目录下所有文件名列表的方法
May 20 Python
浅谈Python的垃圾回收机制
Dec 17 Python
python 读取txt中每行数据,并且保存到excel中的实例
Apr 29 Python
基于Python List的赋值方法
Jun 23 Python
python字典值排序并取出前n个key值的方法
Oct 17 Python
python将txt文档每行内容循环插入数据库的方法
Dec 28 Python
在python中利用numpy求解多项式以及多项式拟合的方法
Jul 03 Python
python3格式化字符串 f-string的高级用法(推荐)
Mar 04 Python
django表单中的按钮获取数据的实例分析
Jul 31 Python
Python发送邮件实现基础解析
Aug 14 Python
python exit出错原因整理
Aug 31 Python
linux centos 7.x 安装 python3.x 替换 python2.x的过程解析
Dec 14 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计算两个路径的相对路径
2013/06/14 PHP
PHP实现通用alert函数的方法
2015/03/11 PHP
PHP文件上传问题汇总(文件大小检测、大文件上传处理)
2015/12/24 PHP
如何用javascript控制上传文件的大小
2006/10/26 Javascript
jQuery对象和DOM对象使用说明
2010/06/25 Javascript
javascript定时保存表单数据的代码
2011/03/17 Javascript
基于jQuery的可用于选项卡及幻灯的切换插件
2011/03/28 Javascript
ExtJS4 组件化编程,动态加载,面向对象,Direct
2011/05/12 Javascript
如何让DIV可编辑、可拖动示例代码
2013/09/18 Javascript
jquery删除数据记录时的弹出提示效果
2014/05/06 Javascript
jQuery中appendTo()方法用法实例
2015/01/08 Javascript
js制作带有遮罩弹出层实现登录注册表单特效代码分享
2015/09/05 Javascript
js实现简单的验证码
2015/12/25 Javascript
js对字符串进行编码的方法总结(推荐)
2016/11/10 Javascript
[58:18]2018DOTA2亚洲邀请赛3月29日 小组赛B组 iG VS Mineski
2018/03/30 DOTA
详解如何使用Python编写vim插件
2017/11/28 Python
shell命令行,一键创建 python 模板文件脚本方法
2018/03/20 Python
python中的不可变数据类型与可变数据类型详解
2018/09/16 Python
python使用folium库绘制地图点击框
2018/09/21 Python
Python设计模式之代理模式实例详解
2019/01/19 Python
Python英文文本分词(无空格)模块wordninja的使用实例
2019/02/20 Python
python 画出使用分类器得到的决策边界
2019/08/21 Python
Python连接Oracle之环境配置、实例代码及报错解决方法详解
2020/02/11 Python
详解Python中第三方库Faker
2020/09/25 Python
澳大利亚药房在线:ThePharmacy
2017/10/04 全球购物
香港零食网购:上仓胃子
2020/06/08 全球购物
Java如何获得ResultSet的总行数
2016/09/03 面试题
办理退休介绍信
2014/01/09 职场文书
应用英语专业自荐信
2014/01/26 职场文书
小学秋季运动会通讯稿
2015/11/25 职场文书
《折线统计图》教学反思
2016/02/22 职场文书
2016年六一文艺汇演开幕词
2016/03/04 职场文书
Python中使用Lambda函数的5种用法
2021/04/01 Python
Python中文纠错的简单实现
2021/07/07 Python
java如何实现socket连接方法封装
2021/09/25 Java/Android
vue报错function () { [native code] },无法出现我们想要的内容 Unknown custom element
2022/04/11 Vue.js