Evernote Export
比赛题目介绍
- TalkingData是中国最大的第三方移动数据平台,移动设备用户日常的选择和行为用户画像。目前,TalkingData正在寻求每天在中国活跃的5亿移动设备70%以上的行为数据,帮助客户更好的了解与其用户互动。
- TalkingData提供了大约20万用户的数据(全部真实且经过脱敏处理),按照年龄和性别分成12个组,比如男性22到25岁,女性30到35岁,同时提供了用户行为属性,比如在什么样的时间点出现什么样的地理位置等等,选手通过这些信息去推测用户是分在哪一个性别年龄里面。
- 什么是用户画像
- 用户画像可以理解为就是为用户画标签,标签是不固定的,依照企业业务场景动态添加、删除等,有的标签是永久的,有的标签是可以动态变更的
- 用户画像可以看做是综合性的标签系统,在自身拥有(或从第三方获得)的原始数据中,从多个维度对用户进行产品进行刻画,提取出商业价值潜力的语义信息,是常见的企业级大数据应用
- 对于人常见标签与维度,地域、年龄、性别、文化、职业、收入、生活习惯、消费习惯等
- 对于产品常见刻画维度,产品类别、活跃频率、产品喜好、产品驱动、使用习惯、产品消费等
- 技术栈:无监督学习、半监督学习(技巧性很强),大多数是有监督学习
- 用户画像的作用
- 精准营销,分析产品潜在客户,针对特定群体利用短信邮件等方式进行营销
- 用户统计,比如中国大学购买书籍人数TOP10,全国分城市指数等
- 数据挖掘,构建智能推荐系统,利用关联规则计算,喜欢红酒的通常喜欢什么运动品牌,利用聚类算法分析,喜欢红酒的人的年龄段分布情况
- 进行效果评估,完善产品运用,提升服务质量,其实这也就是相当于市场调研、用户调研,迅速下定位服务群体,提供高水平的服务
- 对服务或产品进行私人定制,即个性化的服务某类群体甚至每一位用户(这是未来的消费趋势)比如,某公司退出一款5-10岁儿童的玩具,通过用户画像分析,发现某些特征的比重最大,就给产品提供了非常可观的决策依据
- 业务经营分析以及竞争分析,影响企业发展战略
人工神经网络原理
- 知识地图
- 从单层感知器到多层感知器
- 从多层感知器到自编码器
- 从多层感知器到卷积神经网络,再到深度残差网络
- 从多层感知器到递归神经网络,再到LSTM
- 从单层感知器到Hopfield神经网络,再到Bolazmann机和RBM
- 用RBM堆叠成DBN,DBN与多层自编码器结合成DBN-DNN
- 神经网络要素
- 网路结构(全连接、分层、有时滞回路、权值共享、激活函数)
- 运行机制(异步更新、同步更新、前馈)
- 训练算法,训练中使用的trick(mini batch BN drop out等),损失函数的定义
- 训练数据(数据的预处理,输入和输出的构成等)
- 单层感知器
- 输入节点
- 输出节点
- 权向量
- 偏置因子
- 激活函数
- 学习率
- 单层感知器学习算法
- 单层感知器的局限
激活函数
sng(w1x1+w2x2+w3x3)=0
单层感知器类比于线性分类器
感知器学习的规则
1958年,首先定义了一个具有单层计算单元的神经网络结构,称为感知器
感知器的学习规则规定,学习信号等于神经元期望输出(教师信号)与实际输出之差
r=dj−oj
式中,dj为期望的输出,oj=f(WjTX)感知器采用了与阈值转移函数类似的符号转移函数,其表达式为
f(WjTX)=sgn(WjTX)={1,−1,(WjT≥0)(WjT<0)
因此,权值调整公式为:
ΔWj=±2ηX
感知器学习规则只适用于二进制神经元,初始值可取任意值。
感知器学习规则代表一种有导师学习,由于感知器理论是研究其他神经网络的基础,该规则对于神经网络的有导师学习具有极为重要的意义。
多层前馈神经网络(BP网络)
- 隐藏层与隐藏节点
- 前馈-----每一层的节点仅和下一层节点相连
BP学习算法本质就是梯度下降法
神经网络的两个过程:1.训练过程 2.推断过程
小结:数学背景:梯度下降法(使用误差平方和构造误差函数)
梯度下降法给出权值,通过反向传播误差逐层训练,推断时误差往后走,构造完后给出权值,误差信号通过公式计算梯度,得出梯度对权值进行迭代改变,知道权值不再变化或者次数足够收敛,就结束整个训练过程
在python深度学习中,可以使用keras进行简单的神经网络等设计
keras框架是简单方便的,模块可以作为数据或序列的运算图等,keras中的各个设计环节都是单独的一个模块,所以需要根据自己的需求来设计
keras中文文档
keras默认使用tensorflow,如果使用theano需要修改文件中的路径内的json文件
keras的基本使用
- Sequential 模型构建
- 序贯模型是多个网络层的线性堆叠
- 可以通过向Sequential模型传递一个layer的list来构造该模型
from keras.models import Sequential
from keras.layers import Dense,Activation
model = Sequential([
Dense(32,units=784),
Activation('relu'),
Dense(10),
Activation('softmax'),])
- 也可以通过.add()方法一个个的将layer加入模型中
model = Sequential()
model.add(Dense(32,input_shape=(784,))
)model.add(Activation('relu'))
- 指定输入数据的shape
- input shape(元祖型数据)
- input dim
model = Sequential()
model.add(Dense(32,input_dim=784))
- input length
model = Sequentail()
model.add(Dense(32,input_shape=784))
- batch_size
评分标准
- 选手算出用户在不同分组上的概率,现实中一个用户只能在一个分组。理想状态下如果能算出这个概率是1,其他是0的话,这个答案就是没有任何损失的。一般来说,提交的答案中,某个用户会有或大或小的概率属于多个组别,这个时候就有概率上的损失,这个损失的高低代表答案的水平。我们优化函数或者说是评估指标就是下面的损失函数
logloss=−N1i=1∑Nj=1∑Myijlog(pij)
max(min(p,1−10−15),10−15)