hadoop集群使用sklearn进行模型训练
来源:互联网 发布:windows源代码谁写的 编辑:程序博客网 时间:2024/06/06 02:29
为了证实sklearn可以放到hadoop上使用,特别进行了本次试验,但试验中遇到一个疑问,就是reducer节点只能设置为1,那么跟单机训练是否一样了,这个问题目前无法解答。但是,sklearn确实可以通过hadoop方式进行模型训练。
一、安装环境
服务器默认python版本
[root@hadooptest77 ~]# python -V
Python 2.6.6
需要在所有nodemanager节点上安装这些包。
安装pip
wget https://bootstrap.pypa.io/get-pip.py
python get-pip.py
[root@hadooptest ~]# pip -V
pip 9.0.1 from /usr/lib/python2.6/site-packages (python 2.6)
yum install -y gcc gcc-c++
pip install numpy==1.6.2
pip install scipy==0.16.1
pip install scikit-learn==0.16
(Python 2.6.6只能安装0.16,安装0.17或以上的会报错)
pip install setuptools --upgrade
pip install pandas==0.10.0
(Python 2.6.6只能安装0.10.0,安装新版本会报错)
二、准备数据
训练的数据:
三、代码:
四、输出的结果:
[[10, 80], [7, 300], [9, 0], [6, 330], [8, 0], [8, 230], [7, 40], [8, 200], [9, 180], [5, 200]],[469, 246, 436, 198, 366, 297, 363, 371, 364, 208]
0.945235852682
[ 442.96160353]
[ 442.96160353 858.09638609]
[ 41.51347826 -0.34088269]
65.3239163889
此结果和单机版本运行的结果一致。
五、注意:
1、无法使用import pandas 会报错
2、map的数量问题,设置多个map后,数据到reducer阶段需要按照之前数据顺序排列这样训练才正确,所以map阶段加入了一个序列号,这样到reducer之前会排序好。
3、预测放到reducer中进行,reducer只能设置为1
一、安装环境
服务器默认python版本
[root@hadooptest77 ~]# python -V
Python 2.6.6
需要在所有nodemanager节点上安装这些包。
安装pip
wget https://bootstrap.pypa.io/get-pip.py
python get-pip.py
[root@hadooptest ~]# pip -V
pip 9.0.1 from /usr/lib/python2.6/site-packages (python 2.6)
yum install -y gcc gcc-c++
pip install numpy==1.6.2
pip install scipy==0.16.1
pip install scikit-learn==0.16
(Python 2.6.6只能安装0.16,安装0.17或以上的会报错)
pip install setuptools --upgrade
pip install pandas==0.10.0
(Python 2.6.6只能安装0.10.0,安装新版本会报错)
二、准备数据
训练的数据:
$ cat test.txt10,80,4698,0,3668,200,3715,200,2087,300,2468,230,2977,40,3639,0,4366,330,1989,180,364
三、代码:
1、mapper、reducer代码
$ cat test_sklearn.py#!/usr/bin/python# -*- coding: utf-8 -*-import osimport sys#import pandas //使用pandas会报错from sklearn.linear_model import LinearRegressionx = []y = []def mapper(): c = 1 for line in sys.stdin: item = line.rstrip('\n').split(',') print "%s,%s,%s,%s" %(c,item[0],item[1],item[2]) #增加一个序列号,为了reducer之前排序数据 c += 1def reducer(): for line in sys.stdin: item = line.rstrip('\n').split(',') x.append([eval(item[1]),eval(item[2])]) y.append(eval(item[3])) print "%s,%s"%(x,y) lrModel = LinearRegression() lrModel.fit(x, y) print lrModel.score(x, y) print lrModel.predict([10, 110]) print lrModel.predict([[10, 110],[20, 110]]) print lrModel.coef_ print lrModel.intercept_d = {'mapper': mapper, 'reducer': reducer} if sys.argv[1] in d: d[sys.argv[1]]()
2、shell执行脚本:
$ cat test_sklearn.shhdfs_input_path="/user/hdfs/test_sklearn"hdfs_output_path="/user/hdfs/test_output"hadoop fs -rmr ${hdfs_output_path}hadoop jar /usr/lib/hadoop-mapreduce/hadoop-streaming.jar \-D mapreduce.job.queuename=default \-D mapred.map.tasks=3 \-D mapred.reduce.tasks=1 \-input ${hdfs_input_path} \-output ${hdfs_output_path} \-file test_sklearn.py \-mapper "python test_sklearn.py mapper" \-reducer "python test_sklearn.py reducer"
3、执行
$sh test_sklearn.sh
四、输出的结果:
[[10, 80], [7, 300], [9, 0], [6, 330], [8, 0], [8, 230], [7, 40], [8, 200], [9, 180], [5, 200]],[469, 246, 436, 198, 366, 297, 363, 371, 364, 208]
0.945235852682
[ 442.96160353]
[ 442.96160353 858.09638609]
[ 41.51347826 -0.34088269]
65.3239163889
此结果和单机版本运行的结果一致。
五、注意:
1、无法使用import pandas 会报错
2、map的数量问题,设置多个map后,数据到reducer阶段需要按照之前数据顺序排列这样训练才正确,所以map阶段加入了一个序列号,这样到reducer之前会排序好。
3、预测放到reducer中进行,reducer只能设置为1
阅读全文
0 0
- hadoop集群使用sklearn进行模型训练
- xgboost调用sklearn的交叉验证,并且使用自定义的训练集、验证集进行模型的调参
- sklearn训练后使用pickle、joblib保存与恢复模型
- 使用MapReduce对svm模型进行训练
- 对sklearn训练结果进行保存(joblib或pickle或cPickle的使用问题记录)
- python+sklearn利用特征文件来训练和测试模型并使用joblib方法持久化存储模型
- 使用sklearn进行增量学习
- 使用sklearn进行数据挖掘
- 使用sklearn进行数据挖掘
- 使用sklearn进行数据挖掘
- 在sklearn.model_selection.GridSearchCV中使用自定义验证集进行模型调参
- 使用caffe训练好的模型进行分类
- 使用判别训练的部件模型进行目标检测
- 使用Keras预训练模型ResNet50进行图像分类
- 使用预训练模型对图像进行分类
- 使用 Shell 脚本进行 Hadoop Spark 集群的批量安装
- 机器学习-训练模型的保存与恢复(sklearn)
- 利用sklearn训练LDA主题模型及调参详解
- Tensorflow CIFAR-10训练例子报错解决
- PLC编程时三个注意事项
- 安装DPDK
- 垂直居中
- JavaScript深拷贝和浅拷贝数组
- hadoop集群使用sklearn进行模型训练
- OpenGL蓝宝书源码学习(十八)第六章——ADS光照模型
- 解决SVN造成的桌面图标问号
- 一些重要的连接
- idea列操作快捷键
- 临时对象和局部对象以及函数返回值优化
- TextBox中只能输入数字的几种常用方法(C#)
- 移动端Vin码识别技术发展应用
- Makefile笔记01之error:"No rule to make target 'count_words', needed by '-lfl'. Stop."