实战淘宝穿衣搭配
实战淘宝穿衣搭配
#算法实战
1. 说明
《淘宝穿衣搭配》比赛是 2015
年的一个天池算法比赛,现已开放为新人赛,仍可下载数据,上传结果及计算排名。具体地址是:https://tianchi.aliyun.com/getStart/information.htm?spm=5176.100067.5678.2.78904065HrZLpP&raceId=231575
这是一个集图片、文字、数据挖掘于一体的比赛,可下载的数据是千万级的,在网上也可以找到冠军及一些选手的解题思路。新人可用来练手,通过评分定位自己的实力,也能从前人的思路中受到启发。
2. 具体问题
竞赛数据包含三部分,分别是:商品基本信息数据(分类、文本、图像);用户历史行为数据(用户、商品、购买时间);和专家提供的搭配套餐数据(商品组合)。任务是预测给定商品最佳搭配的前
200 个商品。具体计分公式是:
其中 n 表示答案集合中商品的数量,p(k) 表示在 k
截断之前的预测准确率,当第 k 个商品在答案集合中Δ(k) 为 1,否则为
0。从中可见:在答案中越靠前的商品权重越大。 购物表数据共 13 ...
TF-IDF算法
随笔 _ 从《芳华》影评到 TF/IDF
算法
前两天看好多《芳华》的影评说:为什么好人没好报?于是感叹一堆世态炎凉,人性丑陋什么的。我觉得这问题是:为什么中央空调(对谁都温暖)往往不被看好。
先说说 TF/IDF
算法,这是一种信息处理和数据挖掘的重要算法,属于统计类方法。比如说,找一篇文章的关键词,TF(词频)是某个词在这篇文章中出现的频率,频率越高越可能是关键字。IDF(逆向文件频率)是这个词出现在其它文章的频率,比如“的”字,它在任何文章都出现,因为必然不是关键字。把
TF 和 IDF 乘在一起,就是这个词在这篇文章中的重要程度。
我们对一个人的态度也往往取决于:他对大家的态度 IDF,和他对我的态度
TF。刘峰对谁都很好,因此 IDF
是一个固定值,他对所有人都好这是个加分项吗?很遗憾,看公式:
其中分子是所有人,分母是刘峰给几个人送过温暖。也就是说他送温暖的人越多,分母越大,IDF
值越低。不过也请注意 log,它把这个值影响力给降低了。比如说,他给 5
个人送过温暖,再给第 6 个人送温暖时,分母变大,IDF 降低,导致前 5
个人对他的好感度降低,不对呀 ...
Python海量数据处理之_Hadoop家族
Python 海量数据处理之
_Hadoop 家族
本篇是 hadoop 部分的最后一篇,主要介绍 Hadoop
家族的常用工具。以及解答学习过程中的一些疑问。
hadoop 家族
Pig 是上层封装了的数据流处理工具。
Mahout 是基于集群的数据挖掘工具。
Zookeeper
是集群管理工具,比如配置一些备用服务器,当重要的服务宕机时,及时补救。
其中黄色部分是 hadoop 安装包中自带的,HDFS
是文件系统支持,MapReduce 是计算支持。
绿色部分都是向上层提供类似数据库的数据访问,但方式不同。Hive 是基于
MapReduce 的封装,它向上层提供了类似 SQL 语言的 HQL,向下通过 MapReduce
方式访问数据。HBase 在对 HDFS 层的封装,它本质上是一种 key/value
系统,主要负责数据存储,解决的是 HDFS 随机存储方面的问题。
有了 mysql 为什么还要 Hadoop?
我们之前介绍搭建比特币矿池的时候,使用 zookeeper+kafka+mysql
建立集群,其中用 mysql 建构数据服务器,集群中其 ...
Python海量数据处理之_Hadoop&Spark
Python 海量数据处理之
_Hadoop&Spark
1. 说明
前篇介绍了安装和使用 Hadoop,本篇将介绍 Hadoop+Spark
的安装配置及如何用 Python 调用 Spark。
当数据以 TB,PB 计量时,用单机处理数据变得非常困难,于是使用 Hadoop
建立计算集群处理海量数据,Hadoop 分为两部分,一部分是数据存储
HDFS,另一部分是数据计算 MapReduce。MapReduce 框架将数据处理分成
map,reduce
两段,使用起来比较麻烦,并且有一些限制,如:数据都是流式的,且必须所有
Map 结束后才能开始 Reduce。我们可以引入 Spark 加以改进。
Spark 的优点在于它的中间结果保存在内存中,而非 HDFS
文件系统中,所以速度很快。用 Scala
语言可以像操作本地集合对象一样轻松地操作分布式数据集。虽然它支持中间结果保存在内存,但集群中的多台机器仍然需要读写数据集,所以它经常与
HDFS 共同使用。因此,它并非完全替代 Hadoop。
Spark 的框架是使用 Scala 语言编写的,Spark
的开发可 ...
Python海量数据处理之_Hadoop(三)程序调用
Python 海量数据处理之
_Hadoop(三)程序调用
1. 说明
前两篇分别介绍了 Hadoop
的配置方法和基本原理,本篇将介绍如何让程序借助 Hadoop
调用服务器集群中的算力。Hadoop 是 Java 语言实现的,它不仅支持
Java,还支持 C++,Python 等程序的分布计算。下面以 Python
为例介绍如何使用 Hadoop 的 MapReduce 功能。
2. 工作过程
在原理部分介绍过,Hadoop
分为两部分,一部分是存储,一部分是运算,而各个部分又可分为主控和局部实现。这里忽略细节,主要说明运算的主控部分是如何运作的。
从程序调用的角度看,程序员首先需要把待处理的文件复制到 HDFS
文件系统之中,然后调 Hadoop 提供的 java 程序执行分布计算,具体需要执行的
python 代码用参数的形式提供;最后在 HDFS
生成输出文件,程序员再将其拷回本地即可。
这里的分布计算主要指 MapReduce,MapReduce
框架将输入数据分割成数据块,传给 Mapper,然后 Map
任务在各个服务器上以完全并行的方式处理,接着 Ma ...
Python海量数据处理之_Hadoop(二)概念和原理
Python 海量数据处理之
_Hadoop(二)概念和原理
1. 说明
Hadoop
是个分布式的架构,它将海量数据处理工作分配到集群中的多个机器上运行。前篇介绍了
Hadoop 的安装,在安装过程中会产生一些疑问,比如 NameNode
是什么东西?本篇就以问题&解答的方式介绍 Hadoop
的相关概念及其原理。
2.
NameNode,DataNode,以及 Secondary NameNode
把 Hadoop 分为 HDFS 和 MapReduce。HDFS 为数据提供了存储,MapReduce
为数据提供了计算。
NameNode,DataNode 以及 Secondary NameNode
都是属于存储部分,NameNode
主要负责管理元信息,如文件名,目录结构,属性,数据块存储位置等等。DataNode
负责数据块的具体存取。SecondaryNameNode 是 NameNode
的辅助工具,有两个作用,一是镜像备份,二是日志与镜像的定期合并,注意:它并不是
NameNode 的备份。
3. ResourceManager 与
NodeManager ...
Python海量数据处理之_Hadoop(一)集群搭建
Python 海量数据处理之
_Hadoop(一)集群搭建
1. 说明
数据处理时,可能会遇到数千万以及上亿条数据的情况。如果一次性处理所有数据,就会遇到内存不够,计算时间太长等问题。上篇《Python
海量数据处理之 _
单机优化》讲述了单机的处理大数据的解决方案。下面将讲述如何利用服务器集群处理大数据,这里使用的工具是
Hadoop,内容太多,分为三部分介绍,本篇是第一部分集群搭建,后两部分分别是原理和
python 调用。
2. Hadoop 简介
如果有多台用于数据计算的机器,可以使用 Hadoop
框架建立集群,统一分配布属。Hadoop 是由 Apache
基金会所开发的分布式系统基础架构,最核心的设计是:HDFS 和
MapReduce。HDFS 为数据提供了存储,MapReduce 为数据提供了计算,其中
Mapper 指的就是拆分处理,Reducer
指的就是将结果合并。和单机一样,核心也是拆分,处理,再合并。
多台机器同时处理数据,相对更复杂,需要考虑:数据共享,同步,冲突,资源分析,计算顺序,以及主控宕机等等问题。
3. Hadoop 安装
首先, ...
Python海量数据处理之_单机优化
Python 海量数据处理之 _
单机优化
1. 说明
数据处理时,可能会遇到数千万以及上亿条数据的情况。一次处理所有数据,会遇到内存不够,计算时间太长等问题。一般的解法是:先拆分,再处理,最后将处理的结果合并(当然数据少的时候不需要这么麻烦)。本文将介绍在单机上,只使用
Python 如何处理大量数据。
2. 实例
本例是天池大数据竞赛中的“淘宝穿衣搭配”比赛,这是一个新人赛,只要注册参赛,即可下载数据。目标是根据商品信息,专家推荐,用户购物信息,计算出最佳商品组合。
本例中处理的是用户购物信息“表 1”:每条记录包含用户号 uid,商品号
mid,购物时间 time。
1234uid,mid,time4371603,8,201504188034236,8,201505166135829,8,20150405
需要统计每个用户都购买了什么物品,即生成“表 2”:记录包含用户号
uid,商品组合 mids。
123uid,mids15 "1795974,1852545,98106,654166"20 "2639977,79267" ...
Python之DataFrame数据处理
Python 之 DataFrame 数据处理
1. 说明
DataFrame 是 Pandas 库中处理表的数据结构,可看作是 python
中的类似数据库的操作,是 Python 数据挖掘中最常用的工具。下面介绍
DataFrame 的一些常用方法。
2. 遍历
1) 代码
12345678import pandas as pdimport mathdf=pd.DataFrame({'key':['a','b','c'],'data1':[1,2,3],'data2':[4,5,6]}) print(df)for idx,item in df.iterrows(): print(idx) print(item)
2) 结果
12345678910 data1 data2 key0 1 4 a1 2 5 b2 3 6 c0data1 1data2 ...
实战微博互动预测之三_xgboost答疑解惑
实战微博互动预测之三
_xgboost 答疑解惑
1. 说明
前两篇完成了特征工程的相关工作:加入用户的统计特征,分析文本信息内容,并作为新特征加入了数据集。
本篇我们来看看算法,实战微博互动预测(后简称本例)的评估算法如下:
公式中 f 代表转发,c 代表评论,l 代表赞,p 代表预测,r
代表真实值;deviation 是真实值与预测值的偏差,具体公式如下:
precision 是准确率,根据偏差算出:
sig 为符号函数,当 x>0 时 sig(x)=1,当 x<=0 时,sig(x) 为
0。Counti 为每篇的反馈总数,当 Counti>100 时,以按 100 计算。
与大多数评估算法不同,本例中每个实例有不同权重,反馈越多实例权重越大。而我们常用的算法比如
GBDT
是根据误差迭代改进的,默认情况下各实例权重是一样的,这块儿需要单独处理一下。
具体算法还是使用 xgboost 库,之前看到的大多数关于 xgboost
的文章,要么是讲数学原理,要么是参数的中文说明,xgboost
似乎还是一个黑盒,下面就结合具体问题看看 xgboo ...