此前用自己实现的随机森林算法,应用在titanic生还者预测的数据集上。事实上,有很多开源的算法包供我们使用。无论是本地的机器学习算法包sklearn 还是分布式的spark mllib,都是非常不错的选择。
  Spark是目前比较流行的分布式计算解决方案,同时支持集群模式和本地单机模式。由于其通过scala语言开发,原生支持scala,同时由于python在科学计算等领域的广泛应用,Spark也提供了python的接口。

Spark的常用操作详见官方文档:
http://spark.apache.org/docs/latest/programming-guide.html

在终端下面键入如下命令,切换到spark的目录,进入相应的环境:
cd $SPARK_HOME

cd ./bin

./pyspark

可以看到,出现了python 的版本号以及spark的logo

此时,仍然是输入一句,运行一句并输出。可以事先编辑好脚本保存为filename然后:

./spark-submit filename

下面给出详细的代码:

  1. import pandas as pd
  2. import numpy as np
  3. from pyspark.mllib.regression import LabeledPoint
  4. from pyspark.mllib.tree import RandomForest
  5. #将类别数量大于2的类别型变量进行重新编码,并把数据集变成labeledPoint格式
  6. #df=pd.read_csv('/home/kim/t.txt',index_col=0)
  7. #for col in ['Pclass','embrk']:
  8. #    values=df[col].drop_duplicates()
  9. #    for v in values:
  10. #        col_name=col+str(v)
  11. #        df[col_name]=(df[col]==v)
  12. #        df[col_name]=df[col_name].apply(lambda x:int(x))
  13. #df=df.drop(['Pclass','embrk'],axis=1)
  14. #df.to_csv('train_data')
  15. #读入数据集变成弹性分布式数据集RDD ,由于是有监督学习,需要转换为模型输入的格式LabeledPoint
  16. rdd=pyspark.SparkContext.textFile('/home/kim/train')
  17. train=rdd.map(lambda x:x.split(',')[1])
  18. train=train.map(lambda line:LabeledPoint(line[1],line[2:]))
  19. #模型训练
  20. model=RandomForest.trainClassifier\
  21. (train, numClasses=2, categoricalFeaturesInfo={},numTrees=1000,\
  22. featureSubsetStrategy="auto",impurity='gini', maxDepth=4, maxBins=32)
  23. #包含LabeledPoint对象的RDD,应用features方法返回其输入变量的值,label方法返回其真实类别
  24. data_p=train.map(lambda lp:lp.features)
  25. v=train.map(lambda lp:lp.label)
  26. prediction=model.predict(data_p)
  27. vp=v.zip(prediction)
  28. #最后输出模型在训练集上的正确率
  29. MSE=vp.map(lambda x:abs(x[0]-x[1]).sum())/vp.count()
  30. print("MEAN SQURE ERROR: "+str(MSE))
import pandas as pd
import numpy as np
from pyspark.mllib.regression import LabeledPoint
from pyspark.mllib.tree import RandomForest #将类别数量大于2的类别型变量进行重新编码,并把数据集变成labeledPoint格式
#df=pd.read_csv('/home/kim/t.txt',index_col=0)
#for col in ['Pclass','embrk']:
# values=df[col].drop_duplicates()
# for v in values:
# col_name=col+str(v)
# df[col_name]=(df[col]==v)
# df[col_name]=df[col_name].apply(lambda x:int(x))
#df=df.drop(['Pclass','embrk'],axis=1)
#df.to_csv('train_data') #读入数据集变成弹性分布式数据集RDD ,由于是有监督学习,需要转换为模型输入的格式LabeledPoint
rdd=pyspark.SparkContext.textFile('/home/kim/train')
train=rdd.map(lambda x:x.split(',')[1])
train=train.map(lambda line:LabeledPoint(line[1],line[2:])) #模型训练
model=RandomForest.trainClassifier\
(train, numClasses=2, categoricalFeaturesInfo={},numTrees=1000,\
featureSubsetStrategy="auto",impurity='gini', maxDepth=4, maxBins=32) #包含LabeledPoint对象的RDD,应用features方法返回其输入变量的值,label方法返回其真实类别
data_p=train.map(lambda lp:lp.features)
v=train.map(lambda lp:lp.label)
prediction=model.predict(data_p)
vp=v.zip(prediction) #最后输出模型在训练集上的正确率
MSE=vp.map(lambda x:abs(x[0]-x[1]).sum())/vp.count()
print("MEAN SQURE ERROR: "+str(MSE))

后面可以多加测试,例如:

使用更大规模的数据集;

将数据集划分为训练集测试集,在训练集上建模在测试集上评估模型性能;

使用mllib里面的其他算法并比较效果,等等

欢迎大家与我交流!

Spark mllib 随机森林算法的简单应用(附代码)的更多相关文章

  1. spark 随机森林算法案例实战

    随机森林算法 由多个决策树构成的森林,算法分类结果由这些决策树投票得到,决策树在生成的过程当中分别在行方向和列方向上添加随机过程,行方向上构建决策树时采用放回抽样(bootstraping)得到训练数 ...

  2. 随机森林算法demo python spark

    关键参数 最重要的,常常需要调试以提高算法效果的有两个参数:numTrees,maxDepth. numTrees(决策树的个数):增加决策树的个数会降低预测结果的方差,这样在测试时会有更高的accu ...

  3. 使用基于Apache Spark的随机森林方法预测贷款风险

    使用基于Apache Spark的随机森林方法预测贷款风险   原文:Predicting Loan Credit Risk using Apache Spark Machine Learning R ...

  4. Bagging与随机森林算法原理小结

    在集成学习原理小结中,我们讲到了集成学习有两个流派,一个是boosting派系,它的特点是各个弱学习器之间有依赖关系.另一种是bagging流派,它的特点是各个弱学习器之间没有依赖关系,可以并行拟合. ...

  5. R语言︱决策树族——随机森林算法

    每每以为攀得众山小,可.每每又切实来到起点,大牛们,缓缓脚步来俺笔记葩分享一下吧,please~ --------------------------- 笔者寄语:有一篇<有监督学习选择深度学习 ...

  6. R语言︱机器学习模型评估方案(以随机森林算法为例)

    笔者寄语:本文中大多内容来自<数据挖掘之道>,本文为读书笔记.在刚刚接触机器学习的时候,觉得在监督学习之后,做一个混淆矩阵就已经足够,但是完整的机器学习解决方案并不会如此草率.需要完整的评 ...

  7. Python机器学习笔记——随机森林算法

    随机森林算法的理论知识 随机森林是一种有监督学习算法,是以决策树为基学习器的集成学习算法.随机森林非常简单,易于实现,计算开销也很小,但是它在分类和回归上表现出非常惊人的性能,因此,随机森林被誉为“代 ...

  8. 随机森林算法-Deep Dive

    0-写在前面 随机森林,指的是利用多棵树对样本进行训练并预测的一种分类器.该分类器最早由Leo Breiman和Adele Cutler提出.简单来说,是一种bagging的思想,采用bootstra ...

  9. 随机森林算法原理及OpenCV应用

    随机森林算法是机器学习.计算机视觉等领域内应用较为广泛的一个算法.它不仅可以用来做分类(包括二分类和多分类),也可用来做回归预测,也可以作为一种数据降维的手段. 在随机森林中,将生成很多的决策树,并不 ...

随机推荐

  1. hdu 2167 题解

    题目 题意 一个数字正方形(所有数都是两位的正整数),取了一个数后,它的周围 $ 8 $ 个数都不能被选,问最大取数总和. 注意数据范围 $ 3=< n <=15 $ 我们可能一开始会去想 ...

  2. Python13之元组(带上枷锁的列表)

    一.元组定义 元组一旦建立,元组内的元素不允许修改和删除,这就是元组和列表最大的区别 当元组中仅有一个元素时,需要将元素后面加上逗号,或者不用括号也可以. tuple1 = (12,3234,5435 ...

  3. 在做爬虫或者自动化测试时新打开一个新标签页,必须使用windows切换

    在做爬虫或者自动化测试时,有时会打开一个新的标签页或者新的窗口,直接使用xpath定位元素会发现找不到元素,在firefox中定位了元素还是找不到, 经过多次发现,在眼睛视野内看到这个窗口是在最前面, ...

  4. Scala Map与Tuple

    创建Map // 创建一个不可变的Map val ages = Map("Leo" -> 30, "Jen" -> 25, "Jack&q ...

  5. ArcGIS JS之 applyEdits之后要素符号更新

    ArcGIS JS版本 ArcGIS JS 4.11 最近做一个地图服务,通过FeatureLayer.applyEdits()方法,更新唯一值的渲染字段,实现地图渲染根据用户的配置实时更新. 由于A ...

  6. The Preliminary Contest for ICPC Asia Xuzhou 2019 E XKC's basketball team [单调栈上二分]

    也许更好的阅读体验 \(\mathcal{Description}\) 给n个数,与一个数m,求\(a_i\)右边最后一个至少比\(a_i\)大\(m\)的数与这个数之间有多少个数 \(2\leq n ...

  7. CentOS7安装firewall防火墙

    CentOS7之后 , 系统已经推荐了firewall防火墙 , 而不是iptables 主要 : firewall 和 iptables冲突 , 需要禁用其中一个. #停止iptables服务 sy ...

  8. Suricata Rules

    Suricata Rules https://redmine.openinfosecfoundation.org/projects/suricata/wiki/Suricata_Rules https ...

  9. 命令行参数 && json 协议 && 自定义 error 类型

    命令行参数 在写代码的时候,在运行程序做一些初始化操作的时候,往往会通过命令行传参数到程序中,那么就会用到命令行参数 例如,指定程序运行的模式和级别: go run HTTPServer.go --m ...

  10. 遇到 GLFW 我的demo可以运行 但是公司的程序调用我的so运行不起来

    //to do 原       因:  发现 自身demo的程序的shaders更新了  但是公司程序却没有更新 解决办法:更新公司程序的shaders 为最新版本 吸取的教训: 不仅仅要更新公司程序 ...