Spark mllib 随机森林算法的简单应用(附代码)

  此前用自己实现的随机森林算法,应用在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


下面给出详细的代码:



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里面的其他算法并比较效果,等等


欢迎大家与我交流!

  • 3
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值