CTR场景数据分析建模 问题汇总0-pandas及python操作

ctr deepfm

ctr广告点击率场景下使用deepfm模型进行收藏和购买预测。
github 大神的轮子
https://github.com/xxxmin/ctr_Keras/blob/master/deepfm_weight.py
使用keras实现,将遇到的理解不好的问题记录如下:

pd.DataFrame.values

https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.values.html
DataFrame.values
Return a Numpy representation of the DataFrame.
Only the values in the DataFrame will be returned, the axes labels will be removed.

Returns:
numpy.ndarray
The values of the DataFrame.

keras embedding层

https://juejin.im/entry/5acc23f26fb9a028d1416bb3 讲解的好
https://keras.io/zh/layers/embeddings/ 官方文档

它要求输入数据是整数编码的,所以每个字都用一个唯一的整数表示。这个数据准备步骤可以使用Keras提供的Tokenizer API来执行。

嵌入层被定义为网络的第一个隐藏层。它必须指定3个参数:

input_dim:这是文本数据中词汇的取值可能数。例如,如果您的数据是整数编码为0-9之间的值,那么词汇的大小就是10个单词;
output_dim:这是嵌入单词的向量空间的大小。它为每个单词定义了这个层的输出向量的大小。例如,它可能是32或100甚至更大,可以视为具体问题的超参数;
input_length:这是输入序列的长度,就像您为Keras模型的任何输入层所定义的一样,也就是一次输入带有的词汇个数。例如,如果您的所有输入文档都由1000个字组成,那么input_length就是1000。

举例子理解:
例如,下面我们定义一个词汇表为200的嵌入层(例如从0到199的整数编码的字,包括0到199,即总共有可能出现200个不一样的单词) input_dim
一个32维的向量空间(嵌入后的空间,将一个单词嵌入为一个32维的向量),其中将嵌入单词,以及输入文档 output_dim
每个句子有50个单词。input_length

e = Embedding(input_dim=200, output_dim=32, input_length=50)

画数值图和分布图

特征分析时,我需要了解部分特征的数值图(即y轴数值 x轴样本序号)和特征分布(y轴占比 x轴数值范围)
https://blog.csdn.net/jinruoyanxu/article/details/53390943

直接画数值图:

data_lxy['UserInfo_259'].plot()
plt.title("UserInfo_259")
plt.show()

直接dataframe后面加plot即可

画分布图

max_data = data_lxy['UserInfo_259'].max()
bins = np.linspace(0, max_data, max_data+1)

plt.hist(data_lxy['UserInfo_259'], bins, normed=True, color="#FF0000", alpha=.9, histtype="stepfilled")

plt.show()

我使用的直方图,bins理解就是下标的格子数,histtype="stepfilled"表示横格不那么长

画布设置

画布大小
plt.figure(figsize=(12,10))
分画布(类似matlab)
plt.subplot(2,1,1) :2x1 第一幅
plt.subplot(2,1,2):2x1 第二幅
画布清除
plt.clf()

plot组合

plt.figure(figsize=(12,10))
plt.subplot(2,1,1)
data_lxy['UserInfo_259'].plot()
plt.title("UserInfo_259")
#plt.show()
#plt.clf()
#画分布图
plt.subplot(2,1,2)
max_data = data_lxy['UserInfo_259'].max()
bins = np.linspace(0, max_data, max_data+1)
plt.hist(data_lxy['UserInfo_259'], bins, normed=True, color="#FF0000", alpha=.9, histtype="stepfilled")
plt.show()

在这里插入图片描述

pandas缺失值填补

在做特征分析时一直报错
Python Error1: ValueError: range parameter must be finite.

问题出在特征表中存在缺失值nan

pandas.DataFrame.fillna
https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.fillna.html#pandas-dataframe-fillna

这里有一个误区,并不是使用 a.fillna(0)就可以大功告成的
这个函数并不会默认替换原DataFrame,需要加一个参数inplace=True,才会覆盖原dataframe

data_lxy.fillna(method='ffill',inplace=True)

method='ffill’这句代表向上取值填补缺失值
http://www.voidcn.com/article/p-rohjupzu-bto.html

连续特征离散化 onehot

https://blog.csdn.net/tongjinrui/article/details/79679727
在这里插入图片描述
pd.cut(data,4)代表将数据划分为4段,该行代码将生成4个category型数据,分别是4个区间
pd.get_dummies函数解释:https://www.jianshu.com/p/c324f4101785
官方文档:https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.get_dummies.html 我的理解就是onehot化

其他方法介绍:
https://blog.csdn.net/u014135752/article/details/80789251

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值