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生成随机验证码(中文验证码)示例
Apr 03 Python
python3+PyQt5+Qt Designer实现扩展对话框
Apr 20 Python
利用python和百度地图API实现数据地图标注的方法
May 13 Python
python时间序列按频率生成日期的方法
May 14 Python
Python Numpy计算各类距离的方法
Jul 05 Python
解决pycharm下os.system执行命令返回有中文乱码的问题
Jul 07 Python
Django后端发送小程序微信模板消息示例(服务通知)
Dec 17 Python
Python关于__name__属性的含义和作用详解
Feb 19 Python
django xadmin中form_layout添加字段显示方式
Mar 30 Python
如何学习Python time模块
Jun 03 Python
解决python便携版无法直接运行py文件的问题
Sep 01 Python
Jupyter Notebook 如何修改字体和大小以及更改字体样式
Jun 03 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
一个简单的自动发送邮件系统(一)
2006/10/09 PHP
如何在PHP中使用Oracle数据库(3)
2006/10/09 PHP
基于php冒泡排序算法的深入理解
2013/06/09 PHP
php利用smtp类实现电子邮件发送
2015/10/30 PHP
总结PHP删除字符串最后一个字符的三种方法
2016/08/30 PHP
用PHP的反射实现委托模式的讲解
2019/03/22 PHP
laravel ORM关联关系中的 with和whereHas用法
2019/10/16 PHP
JavaScript入门教程(2) JS基础知识
2009/01/31 Javascript
js控制div及网页相关属性的代码
2009/12/19 Javascript
js function定义函数使用心得
2010/04/15 Javascript
Google Map V3 绑定气泡窗口(infowindow)Dom事件实现代码
2013/04/26 Javascript
一个通过script自定义属性传递配置参数的方法
2014/09/15 Javascript
10个JavaScript中易犯小错误
2016/02/14 Javascript
JavaScript+CSS实现的可折叠二级菜单实例
2016/02/29 Javascript
jfinal与bootstrap的登出实战详解
2017/11/27 Javascript
vue slot 在子组件中显示父组件传递的模板
2018/03/02 Javascript
react组件基本用法示例小结
2020/04/27 Javascript
在vue中封装方法以及多处引用该方法详解
2020/08/14 Javascript
python使用pil生成缩略图的方法
2015/03/26 Python
详解Python中的序列化与反序列化的使用
2015/06/30 Python
python 时间戳与格式化时间的转化实现代码
2016/03/23 Python
浅谈pymysql查询语句中带有in时传递参数的问题
2020/06/05 Python
基于python计算滚动方差(标准差)talib和pd.rolling函数差异详解
2020/06/08 Python
Python正则表达式高级使用方法汇总
2020/06/18 Python
Python如何执行精确的浮点数运算
2020/07/31 Python
Python爬虫代理池搭建的方法步骤
2020/09/28 Python
PyChon中关于Jekins的详细安装(推荐)
2020/12/28 Python
美国求婚钻戒网站:Super Jeweler
2016/08/27 全球购物
StubHub西班牙:购买和出售全球活动门票
2017/06/05 全球购物
ReVive利维肤美国官网:RéVive Skincare
2018/04/18 全球购物
旅游管理毕业生自荐信
2013/11/05 职场文书
项目经理任命书内容
2014/06/06 职场文书
教师师德表现自我评价
2015/03/05 职场文书
2015年“世界无车日”活动方案
2015/05/06 职场文书
祝福语集锦:送给闺蜜的生日祝福语
2019/10/08 职场文书
Python编程中Python与GIL互斥锁关系作用分析
2021/09/15 Python