前言

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

WHAT IS 云:云得益于分布式计算的思想。举个简单的例子,执行一千万个数据每个数据都乘以10并输出,在个人pc上需要大概20分钟。如果是100台电脑做这个工作,可能只用几十秒就可以完成。云就是我们将复杂的工作通过一定的算法分配给云端的n个服务器,这样可以大大提高运算效率。

How 云:云的实现也就是分步式计算的过程。分布式的思想起源于MapReduce,是google最先发表的一篇论文中提到的,现在很多的分布式计算方法都是从中演变过来的。大体的思路是,将任务通过map分离——计算——合并——reduce——输出。

云的价值不光是存储数据,更是用来分析和处理数据,得益于云,更多的算法可以快捷的实现,所以说云计算和大数据倔是不可分割的,可能大家在平时的学习过程中还没有机会在云端接触大数据运算,下面就分享一下本人的一次云计算的经历。

1.背景

    这是博主第一次大数据实战的经历,之前都是自己写一些算法然后测试很小的数量级。这次是真正接触到TB集的数据,而且完全是在云端处理。下面就把这次的经历简单分享一下。  
首先简单介绍一下这次比赛的环境吧:
1.云:采用的是阿里云
2.数据:从四月十五号到八月十五号期间,用户两千多万的购买行为(包括时间,购买、收藏、购物车的次数)
3.工具:阿里提供的xlab(里面有很多算法,随机森林、逻辑回归、knn等)、odps(也就是sql数据库)、mapreduce环境(java分布式计算)、udf(主要是提供sql的一些function功能)。
4.目的:预测八月十五号之后的用户行为。

2.工具的简单说明

  (1)odps
      这个主要是sql数据库的一些简单操作。sql玩的溜的大神们都可以用sql语句实现很多的算法,当然博主只能用sql合并表、简单查询之类的。比如我们实现一个简单的查询去重的功能,odps可以通过分布式计算将任务量分不给很多云端服务器,然后快速的执行大数据的查询工作。差不多三百多万的数据查询只用一分钟就解决的,如果要是离线测试,估计得几十分钟,这就是云的魅力。

select distinct * from table_name;

(2)mapreduce
    mapreduce简称mr,主要是实现一些复杂的逻辑的时候使用,比如说像是一些算法。我们使用mr实现算法,可以通过配置文件设置一些分布式的规则,然后将jar文件post到云端就实现了云计算。上一张mr的图片。

3.TRY

      因为这次比赛的奖金很高,阿里组织的也很靠谱,所以参赛的队伍实力都很强的。看眼排行榜就知道了。博主码农大学(北邮)还在两百多名徘徊
 (1)第一次尝试-尿布与啤酒的幻想破灭
     做推荐系统的应该都知道尿布与啤酒的故事。这是一个协同过滤的问题,很多大的电商网站都是通过icf也就是关于商品的协同过滤来进行推荐的。博主最早也是通过聚类算法,找出了一些志趣相投的人(买相同品牌的商品的人),具体的实现是通过xlab里的聚类算发还有udf实现的。结果是准确率不到百分之一,不知道是我的方法不对还是本来这种数据集不适合用cf。
(2)利用规则
     因为博主是金牌买家,所以将心比心,我们可以轻易的得出几个规则可能准确率比较高。
      规则一:用户每个月都会购买的商品
      规则二:用户最后一个月点击n次的商品
      规则三:用户购买次数超过k的商品
      利用这些规则推荐,虽然也能取得一个相对不错的结果,但是想更进一步就要通过算法了。
(3)算法:随机森林
       什么是随机森林,就是用很对决策树来实现的数据集的分类预测,具体的算法如下。
      算法的主要思想就是将数据集按照特征对目标指数的影响由高到低排列。行成一个二叉树序列,进行分类。现在的问题关键就是,当我们有很多特征值时,哪些特征值作为父类写在二叉树的上面的节点,哪下写在下面。我们可以直观的看出上面的特征值节点应该是对目标指数影响较大的一些特征值。那么如何来比较哪些特征值对目标指数影响较大呢。这里引出一个概念,就是信息熵。

信息理论的鼻祖之一Claude E. Shannon把信息(熵)定义为离散随机事件的出现概率。说白了就是信息熵的值越大就表明这个信息集越混乱。

信息熵的计算公式,(建议去wiki学习一下)

这里我们通过计算目标指数的熵和特征值得熵的差,也就是熵的增益来确定哪些特征值对于目标指数的影响最大。

第一部分-计算熵:函数主要是找出有几种目标指数,根据他们出现的频率计算其信息熵。

[python] view plaincopy
  1. def calcShannonEnt(dataSet):
  2. numEntries=len(dataSet)
  3. labelCounts={}
  4. for featVec in dataSet:
  5. currentLabel=featVec[-1]
  6. if currentLabel not in labelCounts.keys():
  7. labelCounts[currentLabel]=0
  8. labelCounts[currentLabel]+=1
  9. shannonEnt=0.0
  10. for key in labelCounts:
  11. prob =float(labelCounts[key])/numEntries
  12. shannonEnt-=prob*math.log(prob,2)
  13. return shannonEnt

第二部分-分割数据 因为要每个特征值都计算相应的信息熵,所以要对数据集分割,将所计算的特征值单独拿出来。

[python] view plaincopy
  1. def splitDataSet(dataSet, axis, value):
  2. retDataSet = []
  3. for featVec in dataSet:
  4. if featVec[axis] == value:
  5. reducedFeatVec = featVec[:axis]     #chop out axis used for splitting
  6. reducedFeatVec.extend(featVec[axis+1:])
  7. retDataSet.append(reducedFeatVec)
  8. return retDataSet

第三部分-找出信息熵增益最大的特征值

[python] view plaincopy
  1. def chooseBestFeatureToSplit(dataSet):
  2. numFeatures = len(dataSet[0]) - 1      #the last column is used for the labels
  3. baseEntropy = calcShannonEnt(dataSet)
  4. bestInfoGain = 0.0; bestFeature = -1
  5. for i in range(numFeatures):        #iterate over all the features
  6. featList = [example[i] for example in dataSet]#create a list of all the examples of this feature
  7. uniqueVals = set(featList)       #get a set of unique values
  8. newEntropy = 0.0
  9. for value in uniqueVals:
  10. subDataSet = splitDataSet(dataSet, i, value)
  11. prob = len(subDataSet)/float(len(dataSet))
  12. newEntropy += prob * calcShannonEnt(subDataSet)
  13. infoGain = baseEntropy - newEntropy     #calculate the info gain; ie reduction in entropy
  14. if (infoGain > bestInfoGain):       #compare this to the best gain so far
  15. bestInfoGain = infoGain         #if better than current best, set to best
  16. bestFeature = i
  17. return bestFeature                      #returns an integer

第四部分-建立决策树

[python] view plaincopy
  1. def createTree(dataSet,labels):
  2. #把所有目标指数放在这个list里
  3. classList = [example[-1] for example in dataSet]
  4. #下面两个if是递归停止条件,分别是list中都是相同的指标或者指标就剩一个。
  5. if classList.count(classList[0]) == len(classList):
  6. return classList[0]
  7. if len(dataSet[0]) == 1:
  8. return majorityCnt(classList)
  9. #获得信息熵增益最大的特征值
  10. bestFeat = chooseBestFeatureToSplit(dataSet)
  11. bestFeatLabel = labels[bestFeat]
  12. #将决策树存在字典中
  13. myTree = {bestFeatLabel:{}}
  14. #labels删除当前使用完的特征值的label
  15. del(labels[bestFeat])
  16. featValues = [example[bestFeat] for example in dataSet]
  17. uniqueVals = set(featValues)
  18. #递归输出决策树
  19. for value in uniqueVals:
  20. subLabels = labels[:]       #copy all of labels, so trees don't mess up existing labels
  21. myTree[bestFeatLabel][value] = createTree(splitDataSet(dataSet, bestFeat, value),subLabels)
  22. return myTree

4.具体实现

        以上是用python写的决策树算法,在比赛中xlab工具已经提供这些底层的算法,主要的工作是要特征值选择和调试参数。    
     除了数据集提供的基本的几个参数以外,主要是通过一些特征间的组合又找出了十个左右的特征。
     

(1)特征提取

     
     我的经验是在特征组合的时候,如果某个值的区间特别大,我们可以使用log函数来处理。比如说data的数值是1-100,而click的数值是0-3。如果这个时候我们直接提取特征data_click=click/data的话,可能会造成曲线波动比较大。这个时候可以用log函数,data_click=ln(1+data)来提取特征,会使曲线变得更加平滑。
    特征值得平方是个不错的选择。因为y=x+1是一条直线。而如果是,就会变为一条曲线,更容易实现拟合。

(2)随机森林参数调试

    
     主要是设置树的数量和深度。数量就是使用决策树的数量,这个一般来讲数量较大效果比较好,我是用了100棵。深度是指每棵决策树的深度,这个特征值如果多就多设置一些。我是有15个特征值,深度设为4。秀一下我的决策树:

5.总结

    
     推荐一些学习的材料吧。
     有一本书叫机器学习与实战,感觉挺不错的,自己用代码实现算法会加深理解。
     也可以访问我的github(github.com/jimenbian,里面有很多算法的实现。
     斯坦福的机器学习公开课也非常好。
     
 (最后如果您觉得有收获,请为我投票)

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

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

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

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

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

  1. 大数据推荐(个性化推荐)

    大数据推荐分享.三场讲座系统的讲解了关于基于大数据的个性化推荐的体系和针对模型的探索.作为讲师主讲了关于个性化推荐的一些流程和算法. 转载于:https://www.cnblogs.com/wenBl ...

  2. 视频教程-全新大数据企业电商数据仓库项目实战教程-大数据

    全新大数据企业电商数据仓库项目实战教程 张长志技术全才.擅长领域:区块链.大数据.Java等.10余年软件研发及企业培训经验,曾为多家大型企业提供企业内训如中石化,中国联通,中国移动等知名企业.拥有丰 ...

  3. 小白都能学会的Python基础 第六讲:综合实战2 - 大数据分词与词云图绘制

    1.华小智系列 - Python基础(案例版) <Python基础>目录 第六讲:综合实战2 - 大数据分词与词云图绘制 1.大数据分词技巧 2.词频统计技巧 3.词云图绘制 4.微博词云 ...

  4. 视频教程-大数据分析师实战课-大数据

    大数据分析师实战课 任老师,Cloudera管理/开发/分析认证讲师,华为高级特聘讲师,新华三大学高级特聘讲师,中国大数据技术与应用联盟高级讲师,全国高校大数据联盟特聘讲师,中国移动高级讲师,前IBM ...

  5. 视频教程-finereport从入门到实战视频教程-大数据

    finereport从入门到实战视频教程 阿里云大学,腾讯云特骋讲师,曾任光华电子大数据项目总监,精通数据采集,处理,可视化全流程技术,具有极强的数据思维及数据变现能力. 孟光焱 ¥128.00 立即 ...

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

    1.背景              首先感谢这次博客的主办方CSDN以及在初赛为我投票的网友们,你们的支持是Garvin前进的动力.本文思路的依据来源于本次天猫大数据竞赛长达三个月的参赛体验.博主作为 ...

  7. CSDN学霸课表——从应用解析到基础实战,大数据入门、晋级课程推荐

    [大数据]Splunk企业级运维智能&大数据分析平台新手入门视频课程 讲师:张文星 本课程系Splunk入门系列课程,实战为主,实战中穿插相关概念和理论.课程包括Splunk基础知识.安装部署 ...

  8. hadoop+Spark实战基于大数据技术之电视收视率企业项目实战

    课程简介 本课程将通过一个电视收视率项目实战驱动讲解,项目案例是国内的一家广电企业作为非洲国家的一个运营商,以用户收视行为数据作为基础数据,通过对频道和节目的分析,采用多维度统计分析的方法挖掘用户的收 ...

  9. 大数据推荐算法概念简述

    Table of Contents 1.协同过滤 概念 如何协同过滤,来对用户A进行电影推荐? 2.内容推荐 概念 如何通过基于内容的推荐,来对求职者A进行职位推荐? 3.相似性推荐 概念 在给新用户 ...

最新文章

  1. Windows Phone 网络HttpWebRequest用法
  2. 2011软考软件设计师:C语言代码规范问题(1
  3. checkVector()
  4. html vue分页,Vue.js bootstrap前端实现分页和排序
  5. 前端学习(2586):如何设计高扩展路由
  6. 计算机与编程导论,计算机科学与编程导论
  7. OpenGL:显示一些立体图形示例程序(真不错)
  8. Practical JAVA(三)关于final
  9. 小米,红米手机miui安装谷歌服务框架GMS三件套安,安装Google Play商店
  10. java初级项目 小说_webmagic项目实战(爬小说网站)
  11. 30天自制操作系统第1天 - Hello World
  12. html涟漪效果,涟漪效果.html
  13. Word如何操作压缩图片?干货经验!怎么在Word中压缩图片?
  14. git安装、使用、建立github远程仓库、克隆远程仓库
  15. 如何构建虚拟机Hadoop集群,搭建3台ubuntu虚拟机集群
  16. 【控制理论】滑模控制最强解析
  17. 台式计算机用u盘给电脑安装系统,电脑台式机用u盘装系统教程
  18. 【LOJ6247】九个太阳(单位根反演)(二项式定理)
  19. Android studio 光标变粗的解决方法
  20. linux机器上crontab定时任务将日志输出到以日期命名的log文件

热门文章

  1. linux内核色彩管理,如何在Linux的色彩管理中获得标准结果
  2. 苹果11怎么关掉横屏_苹果手机这些常规操作你可能不会!教你省电又省心?
  3. C 语言读写中文出现乱码
  4. html页面多个按钮点击事件监听事件,HTML Button.onclick 事件汇总
  5. python中系列的含义_一篇文章让你彻底搞清楚Python中self的含义
  6. python的迭代器指向第一个字符_python(七)字符串格式化、生成器与迭代器
  7. 列出mongodb里的所有表的名字,合并所有表到一个大表,用pandas
  8. 分析linux系统的运行性能,Linux系统如何分析CPU的性能瓶颈
  9. vb.net限制datagridview不能选择_事业单位考试有哪些条件限制?
  10. 西工大与东北大学计算机,国内世界高水平大学排名:西北工业大学位居第一,东北大学排第二...