首页 > 其他 > 详细

DeepFM(3) torch实现

时间:2021-04-01 18:51:50      阅读:12      评论:0      收藏:0      [点我收藏+]

1、数据加载

技术分享图片
原始数据,除去Id和lable列;13列数值特征前缀为I,26列类别特征前缀为C。

def load_data():
    # file_path = ‘../../DeepRecommendationModel/code/data/criteo_sample.txt‘
    file_path = ‘train.txt‘
    raw_data = pd.read_csv(file_path)
    raw_data.drop([‘Id‘], axis=1, inplace=True)
    cat_cols = [col for col in raw_data.columns.values if ‘C‘ in col] # 类别特征列列名列表
    num_cols = [col for col in raw_data.columns.values if ‘I‘ in col] # 数值特征列列名列表
    return raw_data, cat_cols, num_cols

2、数据预处理

第一步得到的数据,数值特征保留原始值,类别特征进行LabelEncoder编码。

def preprocess_data(df, cat_cols, num_cols):
    df_cp = df.copy()
    df_cp[num_cols] = df_cp[num_cols].fillna(0.0) # 数值特征缺失值填充为0
    for col in num_cols:
        df_cp[col] = df_cp[col].apply(lambda x: np.log(x + 1) if x > -1 else -1)

    df_cp[cat_cols] = df_cp[cat_cols].fillna("-1") # 类别特征缺失值填充为-1
    for col in cat_cols:
        encoder = LabelEncoder()
        df_cp[col] = encoder.fit_transform(df_cp[col]) # 对目标标签进行编码,值在0到n_class -1之间

train_data = preprocess_data(raw_data, cat_cols, num_cols)
train_data[‘label‘] = raw_data[‘Label‘]

3、类别特征

def get_cat_tuple_list(df, cat_cols):
    cat_tuple = namedtuple(‘cat_tuple‘, (‘name‘, ‘vocab_size‘)) # Returns a new subclass of tuple with named fields。该元组可以通过name和vocab_size获取对应数据。
    cat_tuple_list = [cat_tuple(name=col, vocab_size=df[col].nunique()) for col in cat_cols]
    return cat_tuple_list
cat_tuple_list = get_cat_tuple_list(train_data, cat_cols)

DeepFM(3) torch实现

原文:https://www.cnblogs.com/leimu/p/14606583.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!