1.背景

      
      首先感谢这次博客的主办方CSDN以及在初赛为我投票的网友们,你们的支持是Garvin前进的动力。本文思路的依据来源于本次天猫大数据竞赛长达三个月的参赛体验。博主作为一个在校的学生,可能如果不是这次比赛,很难能够拥有一套完整的云环境来对TB级的数据进行分析和实践。下面是博主的一点心得,在此抛砖引玉,希望能给大家在云端大数据处理方面带来一点启示。

2.对于大数据和云的一些误区

(1)误区一:云的计算能力是无穷的,不用考虑效率?

      
       我们都知道,云计算的本质就是分布式计算,将现有的工作量,分割开来让n个不同的服务器协同完成。说白了云计算的计算能力虽然比我们的pc有优越许多,但是它是有计算成本的。当我们处理TB级数据的时候,我们还是尽量要考虑一下效率,否则会陷入漫长的等待。
ps:博主参加比赛的时候,因为一开始没有使用抽样算法,将整个训练集拿去训练,占用了大量的资源,常常一等就是24小时。

(2)误区二:数据量越大,预测效果越好?

大数据计算,顾名思义。就是需要一个很大的数据量,通过一些算法,找到它们和目标序列的特定规则和联系。这就容易造成一个误区,是不是数据量越大,结果准确。其实对于推荐系统来讲,当我们使用随机森林或是gbrt这些算法的时候,数据集在几百万的时候往往能得到比数据集在几千万的时候更好的计算效果。因为对于一个算法来讲,如果数据集过大,容易造成过拟合。

所以在面对一个真正的大数据集的时候,不要盲目的拿来全部训练,做好抽样和正负样本的比例调整,可能会得到更好的效果。

(3)误区三: 算法的参数是一成不变的?

       
        在对大数据进行处理的时候,我们往往使用一些已经比较成熟的算法。例如常用的分类算法有svm(支持向量机)、rf(随机森林)、lr(逻辑回归)等等。在使用这些算法的时候往往要面对一个比较头疼的问题就是调参。是否能调到一个理想的参数,对于最后的计算结果有着至关重要的作用。
      对于参数,我觉得没有最好的参数,只有最合适的参数。不要迷信论文或是网上的一些评论,如果你的训练集是独一无二的,就要静下心来,认真调试最适合自己的参数。影响一个算法的参数的因素很多,包括样本数量或是正负样本比例等。
      
  (4)误区四:特征越多越好么?
      
      特征重在质量而不是数量,好的特征对于结果的影响可能会比普通特征大100倍,所以千万不要随便的组合数据集的一些字段。有的时候一些不好的特征,会对结果产生消极的影响。区分特征对与结果的影响的方法有很多,下面给一个信息熵的方法:
def chooseBestFeatureToSplit(dataSet):numFeatures = len(dataSet[0]) - 1      #the last column is used for the labelsbaseEntropy = calcShannonEnt(dataSet)bestInfoGain = 0.0; bestFeature = -1for i in range(numFeatures):        #iterate over all the featuresfeatList = [example[i] for example in dataSet]#create a list of all the examples of this featureuniqueVals = set(featList)       #get a set of unique valuesnewEntropy = 0.0for value in uniqueVals:subDataSet = splitDataSet(dataSet, i, value)prob = len(subDataSet)/float(len(dataSet))newEntropy += prob * calcShannonEnt(subDataSet)     infoGain = baseEntropy - newEntropy     #calculate the info gain; ie reduction in entropyif (infoGain > bestInfoGain):       #compare this to the best gain so farbestInfoGain = infoGain         #if better than current best, set to bestbestFeature = ireturn bestFeature                      #returns an integer

3.大数据云处理步骤

   
  (1)首先要了解集成环境
              
       既然是大数据处理,那么一定是要有一个云环境作为依托。我觉得首先要了解自己的集成环境的基本使用方法,像是spark、hadoop或是odps,他们都有自己的特点。比如博主使用的odps,对于数据库的处理可以用命令行执行sql语句,也可以用MapReduce的方法将写好的jar文件放到云端处理。
   
   (2)数据集去噪
     
       对于一个比较大的数据集,肯定是存在一些噪声部分影响我们的计算操作。将这部分噪音去掉可以保证计算结果的准确性。去噪的方法有很多,这里举出一个常用的方法,就是将数值在   [均值-  3倍方差,均值 + 3倍方差] 以外的数据滤掉。下面是我写的一个实现以上去噪方法的代码,执行DenoisMat函数可以实现此功能。
from __future__ import division
def GetAverage(mat):n=len(mat)m= width(mat) num = [0]*mfor j in range(0,m): for i in mat:num[j]=num[j]+i[j]           num[j]=num[j]/n   return numdef width(lst):i=0for j in lst[0]:i=i+1return idef GetVar(average,mat):    ListMat=[]for i in mat:    ListMat.append(list(map(lambda x: x[0]-x[1], zip(average, i))))n=len(ListMat)m= width(ListMat) num = [0]*mfor j in range(0,m): for i in ListMat:num[j]=num[j]+(i[j]*i[j])       num[j]=num[j]/n   return num def DenoisMat(mat):average=GetAverage(mat)variance=GetVar(average,mat)section=list(map(lambda x: x[0]+x[1], zip(average, variance)))    n=len(mat)m= width(mat) num = [0]*mdenoisMat=[]    for i in mat:for j in range(0,m):if i[j]>section[j]:i[j]=section[j]denoisMat.append(i)  return denoisMat  

(3)训练集采样

            
      上文中已经提到了,正确的采样可以提高计算的准确性。常用的采样的方法有随机采样、系统采样、分层采样。
随机采样:根据样本的编号random出来需要的样本数量。
系统采样:即先将总体的观察单位按某一顺序号分成n个部分,再从第一部分随机抽取第k号观察单位,依次用相等间距,从每一部分各抽取一个观察 单位组成样本。
分层采样:先按对观察指标影响较大的某种特征,将总体分为若干个类别,再从每一层内随机抽取一定数量的观察单位,合起来组成样本。有按比例 分配和最优分配两种方案。
        效果的比较是,分层采样>系统采样>随机采样。以下代码实现了系统采样和随机采样,分层采样可以根据自己的数据集结合聚类算法来实现。如果是监督学习的话,记得调整正副样本的比例哦。
'''
Sampling archive@author: Garvin Li
'''
import randomdef RandomSampling(dataMat,number):try:slice = random.sample(dataMat, number)    return sliceexcept:print 'sample larger than population'def SystematicSampling(dataMat,number):    length=len(dataMat)k=length/numbersample=[]     i=0if k>0 :       while len(sample)!=number:sample.append(dataMat[0+i*k])i+=1            return sampleelse :return RandomSampling(dataMat,number)
  (4)选择算法训练样本
  
         上面已经提到了很多的算法。针对不同的数据集,应该选用不同的算法。举个例子,这次比赛在线下赛的时候,因为数据集比较小,我们使用的逻辑回归算法就取得了不错的成绩。但是到了线上比赛,随着数据量增加到TB级别,发现逻辑回归已经不给力了。使用GBRT可以取得更理想的效果,具体用法可以参考阿里大数据比赛sesson2_RF&GBRT.一些常用的算法也可以clone我的github代码库(不断更新中),本文最下方给出地址。
图  3-1 My git-repo
   (5)模型融合
   
       模型融合的概念也是这次参加比赛第一次听说的。其实原理很简单,每种算法因为自身的收敛方式不同、对特征的调配方式不同,在结果上是有比较大的差异的。如果将不同的模型计算结果加权求和的话,可以充分体现每个算法的长处,对于结果的提升是有比较大帮助的。

4.总结

      
       我始终坚信大数据和云计算可以改变我们的生活方式甚至我们的意识形态。在进行大数据处理的过程中,看着自己的成绩一点一滴的提升,内心会有极大的满足感。希望有相同志趣的朋友可以留言讨论,大家一起学习进步,谢谢大家。
我的Github页:点击打开链接
本文参加了csdn博客大赛,请为我投票!
本文参考了:《机器学习与算法》和 csdn

u010691898的专栏

/********************************

* 本文来自博客  “李博Garvin“

* 转载请标明出处:http://blog.csdn.net/buptgshengod

******************************************/

【云端大数据实战】大数据误区、大数据处理步骤分析相关推荐

  1. python中显示第三行数据_Python从零开始第三章数据处理与分析①python中的dplyr(1)...

    前言 我经常使用R的dplyr软件包进行探索性数据分析和数据处理. dplyr除了提供一组可用于解决最常见数据操作问题的一致函数外,dplyr还允许用户使用管道函数编写优雅的可链接的数据操作代码. 现 ...

  2. 【观点见解】解读大数据的5个误区

    [观点见解]解读大数据的5个误区 大数据并不会给你带来大麻烦,事实上,大数据能够帮助你尽量减少业务问题,还能帮助你作出战略性决策.但如果不搞清楚对大数据的一些误区,也可能会给你带来不必要的麻烦.下面就 ...

  3. Python微博地点签到大数据实战(二)POI与坐标

    原文:http://m.blog.csdn.net/article/details?id=49018193 什么是POI? 无奈网上关于POI的解释大多是"只是白露级驱逐舰'夕立'的一个口癖 ...

  4. 大数据【Java开发转大数据学习路线分解】(不断细化ing)

    技术点: 将基础的数仓搭建沉淀成自己的实践方法论 提高大数据实时处理平台的稳定性和高效性 提升自己分析定位及解决问题的能力 既懂得平台开发又懂得算法原理和应用 注重风控系统,监控大数据平台安全 前后端 ...

  5. 「数据ETL」从数据民工到数据白领蜕变之旅(六)-将Python的能力嫁接到SSIS中...

    前一篇推文中,给大家演示了在SSIS上使用dotNET脚本,实现一些原生SSIS难以实现的功能,并冠以无限可能的说法. 充分复用python的现有优势 python的确是一门非常优秀的编程语言,特别是 ...

  6. 云端大数据实战记录-大数据推荐

    前言 WHY 云:为什么我们需要云,大数据时代我们面对两个问题,一个是大数据的存储,一个是大数据的计算.由于数据量过大,在单个终端上运行效率过差,所以人们用云来解决这两个问题. WHAT IS 云:云 ...

  7. 工资8000以下的程序员注意了:《零coding数据大屏实战宝典.pdf》

    马云曾说:"整个世界将变成数据,这还只是数据时代的开始.新浪潮即将来临,很多就业机会将被夺走.有些人会赶上潮流,变得富有和成功.但是对那些落后的人,未来将是痛苦的. 大数据从2013年一路发 ...

  8. R语言ggplot2可视化使用不连续的y轴、中断的Y轴来可视化数值分布差异很大的数据实战:把数据轴分为两个区间或者多个区间来匹配不同区间数据的可视化(因为有的数据可能10附近,有的数值可能1W附近)

    R语言ggplot2可视化使用不连续的y轴.中断的Y轴来可视化数值分布差异很大的数据实战:把数据轴分为两个区间或者多个区间来匹配不同区间数据的可视化(因为有的数据可能10附近,有的数值可能1W附近) ...

  9. 《企业大数据系统构建实战:技术、架构、实施与应用》——第3章 企业大数据解决方案 3.1 企业大数据解决方案实现方式...

    本节书摘来自华章计算机<企业大数据系统构建实战:技术.架构.实施与应用>一书中的第3章,第3.1节,作者 吕兆星 郑传峰 宋天龙 杨晓鹏,更多章节内容可以访问云栖社区"华章计算机 ...

最新文章

  1. [试卷]古诗文背诵(七年级上学期)
  2. 处理中文乱码_为什么PDF转换成Word后是乱码?这种PDF要怎么转换?
  3. update 后面能接子查询吗_只用身份证能查询CPA成绩吗?查询步骤不能忘
  4. Caffe+UbuntuKylin14.04_X64+CUDA 6.5配置
  5. oracle 9 插入日期,oracle date日期类型 精析
  6. centos7 mysql
  7. springcloud是如何进行服务治理的
  8. JavaScript重难点解析3(原型与原型链、执行上下文与执行上下文栈)
  9. 027_编写MapReduce的模板类Mapper、Reducer和Driver
  10. 【BZOJ4837】LRU算法 [模拟]
  11. MySQL 批量插入,如何不插入重复数据?
  12. springboot-20-全局异常处理
  13. 契约测试工具的思考(一)
  14. WiFi相关知识介绍
  15. PDP Context 激活流程(UE发起)
  16. 车辆身份特征识别引擎
  17. vios aix_为AIX或VIOS选择多路径路径控制模块的指南
  18. 怎样使用轻快pdf阅读器
  19. 【数据分析】系列-Python分析淘宝4200款Bra(没错,就是文胸)后,发现最好卖的款式居然是。。。
  20. 阿里达摩院数学竞赛新一轮考题曝光,李永乐老师曾给出第一题详细解答

热门文章

  1. c语言原始,[蓝桥杯][历届试题]回文数字 最原始的方法(C语言代码)
  2. php5ts.dll 注册码,修复php5ts.dll
  3. android没有捂脸表情,Emoji神器 | 如果你也喜欢[捂脸]表情
  4. matlab把每次循环的结果保存idx,来自Matlab的循环Python
  5. 多核处理器_手机处理器性能排行:骁龙865第四,麒麟9000拿下第二
  6. linux如何时间更新最新版本,桌面应用|Linux有问必答:如何更新过期版本的Ubuntu...
  7. php yaf框架模块化,基于yaf的模块化开发方案
  8. 列联表分析程序,以卢淑华书上的例子为例
  9. linux 指定时间加3天,Linux系统的定时任务和延时任务
  10. java nginx tomcat_Nginx + Tomcat (java )服务器部署