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

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 labels
    baseEntropy = calcShannonEnt(dataSet)
    bestInfoGain = 0.0; bestFeature = -1
    for i in range(numFeatures):        #iterate over all the features
        featList = [example[i] for example in dataSet]#create a list of all the examples of this feature

        uniqueVals = set(featList)       #get a set of unique values

        newEntropy = 0.0
        for 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 entropy

        if (infoGain > bestInfoGain):       #compare this to the best gain so far
            bestInfoGain = infoGain         #if better than current best, set to best
            bestFeature = i
    return 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]*m
    for j in range(0,m):
           for i in mat:
              num[j]=num[j]+i[j]
           num[j]=num[j]/n
    return num

def width(lst):
    i=0
    for j in lst[0]:
       i=i+1
    return i

def 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]*m
    for 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]*m
    denoisMat=[]
    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 random

def RandomSampling(dataMat,number):
    try:
         slice = random.sample(dataMat, number)
         return slice
    except:
         print 'sample larger than population'

def SystematicSampling(dataMat,number):    

       length=len(dataMat)
       k=length/number
       sample=[]
       i=0
       if k>0 :
         while len(sample)!=number:
            sample.append(dataMat[0+i*k])
            i+=1
         return sample
       else :
         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

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

时间: 2024-10-24 17:54:24

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

实战 .Net 数据访问层 - 1

访问|数据 实战 .Net 数据访问层 l 特别说明 本篇实战共分23段,非作者有意如此,乃受CSDN发表文章之64K所限. 虽然有几段根本没有达到64K,但估计是HTML Source超过了这个范 围,所以也不得不单独分段(大都是源代码),请大家谅解. 如果有朋友需要完整文档,请发邮件给我: mailto:xuefeng.zhang@bearingpoint.com l 引言 这次的讨论是上一部分"剖析 .Net 下的数据访问层技术"的一个续,但也可独立成章,为突出主题,作者就特意换

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

前言      WHY 云:为什么我们需要云,大数据时代我们面对两个问题,一个是大数据的存储,一个是大数据的计算.由于数据量过大,在单个终端上运行效率过差,所以人们用云来解决这两个问题.      WHAT IS 云:云得益于分布式计算的思想.举个简单的例子,执行一千万个数据每个数据都乘以10并输出,在个人pc上需要大概20分钟.如果是100台电脑做这个工作,可能只用几十秒就可以完成.云就是我们将复杂的工作通过一定的算法分配给云端的n个服务器,这样可以大大提高运算效率.     How 云:云的

深刻!阿里、宝洁大数据实战

虎嗅F&M;创新节的"如何洞察用户:阿里与宝洁的大数据实战"专场里,阿里巴巴数据委员会会长车品觉.宝洁中国市场研究部总经理李霈.英特尔中国研究院首席工程师吴甘沙和股票雷达创始人冯月聊到一个很有趣的话题:作为传统公司,宝洁很羡慕阿里能够轻易收集到真实.实时.全面的的数据,但车品觉却说,大数据公司对数据处理同样存在两个难点: 第一大数据太大,大数据公司跟传统公司一样需要做"采样"的工作. 第二是很难还原真实需求."用户研究上来讲,大数据给予的力量就是还

拨开云雾:破除大数据的四大常见误区

文章讲的是拨开云雾:破除大数据的四大常见误区,大数据概念自诞生以来,与之相关的争论之声就不绝于耳.如今似乎每一家软件供应商.咨询服务企业以及意见领袖都在以自己的理解为其进行"正确"定义.尽管笔者一直认为这种所谓"正确"的定义根本不存在,本文将专注于为大家破除最常见的大数据认识误区. 误区一:所有数据都将尽在掌握 从很多方面来看,我们目前生活的时代都前所未有的,过去从未面对过如此庞大的数据量.把MB和PB的概念抛在脑后吧,现在EB(即艾字节)级别的数据已经真实存在.笔

如何洞察用户:阿里与宝洁的大数据实战

昨天的虎嗅F&M创新节的"如何洞察用户:阿里与宝洁的大数据实战"专场里_a href="http://zdb.pedaily.cn/Enterprise/阿里巴巴/" target=_blank>阿里巴巴数据委员会会长车品觉.宝洁中国市场研究部总经理李霈.英特尔中国研究院首席工程师吴甘沙和股票雷达创始人冯月聊到一个很有趣的话题:作为传统公司,宝洁很羡慕阿里能够轻易收集到真实.实时.全面的的数据,但车品觉却说,大数据公司对数据处理同样存在两个难点: 第一

再谈大数据行业里的两大误区

之前在虎嗅发了一篇文章<大数据行业里的两大误区>,很多朋友评价还不错,受此激励,结合最近目睹.经历的项目,想多写一些.经过笔者总结,发现大数据的误区还真是不少,尤其是国内,很多人以讹传讹,造成了很多基本概念的偏差.接上一篇文章,再来谈谈大数据中的一部分误区,供大家拍砖. 误区三:数据量特别大才叫大数据 在 "数据界"存在这样有一波人,他们认为"只有Peta级以上的才叫大数据,甚至到了Zeta以上才叫大数据,目前还没有到真正的大数据时代!",每次听到这样的

大数据的5个误区:破解误区方能挖掘数据价值

大数据并不会给你带来大麻烦,事实上,大数据能够帮助你尽量减少业务问题,还能帮助你作出战略性决策.但如果不搞清楚对大数据的一些误区,也可能会给你带来不必要的麻烦.下面就让我们来看看大家对大数据的5个误区: #误区1:它是新的 作为一个企业用户,你仍然面对着相同的问题,有所改变的是你解决这些问题的方式,现在这些问题的解决办法来自一个不太可能的来源:你http://www.aliyun.com/zixun/aggregation/14294.html">的大数据.超过85%的企业正在执行或者准备

台湾云端运算产业协会王玮:云计算大数据在台湾的发展

作为http://www.aliyun.com/zixun/aggregation/13637.html">云计算产业内具有一定影响力的第六届中国云计算大会今天召开了,在下午的演讲环节中,台湾云端运算产业协会副理事长王玮带来了主题演讲,延续去年的风格,他谈到了两岸在云计算大数据发展方面的合作,区别去年的演讲内容,他突出强调了云计算大数据在台湾发展的一些重点领域. 王玮谈到网络.社群.行动还有电子商务激素的发展,再加上物联网的趋势造成了快速多样的数据环境,驱动了大数据时代的来临.但其中大部分

《企业大数据系统构建实战:技术、架构、实施与应用》——第2章 企业大数据职能规划 2.1 大数据组织架构体系

第2章 企业大数据职能规划 第1章我们介绍了企业大数据在宏观和微观层面的定位,立足于解答企业大数据的商业模式.市场机会.延伸价值.内部功能定义等问题.当企业已经确定要实施大数据战略时,应该如何针对性地建立职能架构体系以保证企业大数据的有效实施和落地?各个职能部门的职责范畴如何定义?不同体系和部门间如何协同和流程化工作? 本章将详细讲解企业大数据职能规划体系,包括如何定义大数据部门在企业中的角色,常见的大数据职能及职责分工,不同职位的职责划分以及大数据制度和流程建设等问题. 2.1 大数据组织架构