首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >热编码:缺少列

热编码:缺少列
EN

Stack Overflow用户
提问于 2017-07-30 14:15:42
回答 1查看 299关注 0票数 1

我有1000000份记录和100份测试记录的训练集。为了创建一个推荐系统,我创建了两个按如下方式组织的数据文件:

代码语言:javascript
运行
复制
[in]print(training_df.head(n=5))

[out]                     product_id
transaction_id                      
0000001                   [P06, P09]
0000002         [P01, P05, P06, P09]
0000003                   [P01, P06]
0000004                   [P01, P09]
0000005                   [P06, P09]

然后,我使用sklearn创建了一个矩阵,它包含product的as列和transaction_id的as行(索引)。

以下是代码:

代码语言:javascript
运行
复制
# Create a matrix for the transactions
from sklearn.preprocessing import MultiLabelBinarizer

mlb = MultiLabelBinarizer()
training_df1 = training_df.join(pd.DataFrame(mlb.fit_transform(training_df.pop('product_id')),
                          columns=mlb.classes_,
                          index=training_df.index))

产品id为P01-P10。问题是培训数据中没有P04和P08,所以我的training_df1只有8列,而不是10列。如何添加这两列并为所有事务填充0?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-07-30 14:31:36

在初始化P01-P10时,可以将预定义的产品ids作为类传递,因此输出将始终将这些类别作为列包括在内:

代码语言:javascript
运行
复制
from sklearn.preprocessing import MultiLabelBinarizer
​
product_ids = ['P{:02d}'.format(i+1) for i in range(10)]
print(product_ids)
# ['P01', 'P02', 'P03', 'P04', 'P05', 'P06', 'P07', 'P08', 'P09', 'P10']
​
mlb = MultiLabelBinarizer(classes=product_ids)
training_df.join(pd.DataFrame(mlb.fit_transform(training_df['product_id']),
                              columns=mlb.classes_,
                              index=training_df.index))

为了只拿回矩阵:

代码语言:javascript
运行
复制
training_df.drop('product_id', 1).join(
    pd.DataFrame(mlb.fit_transform(training_df['product_id']), columns=mlb.classes_, index=training_df.index)
)

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45400744

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档