原始数据,除去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
第一步得到的数据,数值特征保留原始值,类别特征进行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‘]
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)
原文:https://www.cnblogs.com/leimu/p/14606583.html