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