自学内容网 自学内容网

【推荐系统】特征交叉

用户对item的点击行为。用户关联用户特征,item关联item特征。

用户特征*item特征,例如用户年纪*item类目,将其进行编码,构成交叉特征。

交叉特征:哪个年龄段的人更偏爱哪个商品类目。

代码如下

import pandas as pd

# 用户表
user_data = {
    'UserID': [1, 2, 3],
    'Age': [24, 30, 22],
    'Gender': ['M', 'F', 'M']
}

# 商品表
item_data = {
    'ItemID': [101, 102, 103],
    'Category': ['Electronics', 'Clothing', 'Books'],
    'Price': [299, 49, 15]
}

# 转换为DataFrame
user_df = pd.DataFrame(user_data)
item_df = pd.DataFrame(item_data)


# 定义年龄段
def age_group(age):
    if 20 <= age <= 25:
        return 'Young'
    elif 26 <= age <= 35:
        return 'Adult'
    else:
        return 'Other'

# 添加年龄段列
user_df['AgeGroup'] = user_df['Age'].apply(age_group)
user_df

# 生成交叉特征
def cross_feature(row):
    return f"{row['AgeGroup']}_{row['Category']}"


# 假设有一个购买记录表
purchase_data = {
    'UserID': [1, 1, 2, 3],
    'ItemID': [101, 103, 102, 101]
}

purchase_df = pd.DataFrame(purchase_data)
purchase_df


purchase_df.merge(user_df, on='UserID')

# 合并数据
merged_df = purchase_df.merge(user_df, on='UserID').merge(item_df, on='ItemID')
merged_df

# 生成交叉特征
merged_df['AgeGroup_Category'] = merged_df.apply(cross_feature, axis=1)
merged_df

print(merged_df[['UserID', 'ItemID', 'AgeGroup_Category']])

# # 是将其进行编码?
# Young_Electronics : 0
# Young_Books :1
# Adult_Clothing : 2


原文地址:https://blog.csdn.net/weixin_31866177/article/details/145266986

免责声明:本站文章内容转载自网络资源,如侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!