背景:
上一篇推荐系统实战中LR模型训练(一) 中完成了LR模型训练的代码部分。本文中将详细讲解数据准备部分,即将文本数据数值化为稀疏矩阵的形式。
- 文本数据:
- 稀疏矩阵:
实现过程:
文本数据格式如下:
用户ID / 物品ID / 收听时长 / 收听的时间点 / 性别 / 年龄段 / 收入 / 籍贯 / 物品名称 / 物品总时长 / 物品标签
LR模型在此处的目的是用户对某个物品(音乐)的点击率,本文中将通过用户对物品(音乐)的收听时长占比来表示用户对物品的喜好程度。本文中抽取的特征分为两类:
- 用户特征(user_feature):性别、年龄段、收入
- 物品特征(item_feature):物品名称
1.从原始数据中抽取相应的特征部分,得到dataset.tmp
代码如下:(1_fromMetaDataTofeatureData.py)
#coding=utf-8
import sys
meta_data = sys.argv[1]
with open(meta_data, 'r') as fd:
for line in fd:
ss = line.strip().split('^A')
if len(ss) != 11:
continue
user_id = ss[0].strip()
item_id = ss[1].strip()
watch_time = ss[2].strip()
total_time = ss[9].strip()
#用户特征
gender = ss[4].strip()
age = ss[5].strip()
income = ss[6].strip()
#物品特征
item_name = ss[8].strip()
user_feature = '^A'.join([user_id, gender, age, income])
item_feature = '^A'.join([item_id, item_name])
label = round((float(watch_time) / float(total_time)), 1)
final_label = '0'
if label >= 1.0:
final_label = '1'
print '^B'.join([final_label, user_feature, item_feature])
得到的dataset.tmp部分数据如下图所示:
2.对dataset.tmp进行操作,数值化用户(user)特征,得到user_feature.data
代码如下:(gen_user_feature.py)