You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何获取Scikit-learn中OrdinalEncoder各特征取值的笛卡尔积

问题原因

itertools.product 要求传入多个独立的可迭代对象作为笛卡尔积的计算维度,你直接传入 oe.categories_(本质是包含3个numpy数组的列表)时,函数会将整个列表视为单个可迭代对象,仅遍历列表内的3个数组生成结果,不会对数组内部的取值做组合计算。

解决方法

给传入的 oe.categories_ 加上解包符*,将列表内的3个数组拆分为3个独立参数传给itertools.product即可。
修改后的代码片段如下:

import itertools
import pandas as pd
from sklearn import preprocessing

data = pd.read_csv("data.csv")
feature_cols = ['country', 'city', 'pay_type']
X = data[feature_cols]
y = data.label
oe = preprocessing.OrdinalEncoder()
X = oe.fit_transform(X)
print(oe.categories_)
# 仅修改这一行,添加*解包
for element in itertools.product(*oe.categories_):
    print(element)

修改后会输出162=12组符合要求的笛卡尔积结果,格式如下:

('Saudi Arabia', 'Dammam', 'COD')
('Saudi Arabia', 'Dammam', 'PREPAID')
('Saudi Arabia', 'Jeddah', 'COD')
...后续其他组合

如果需要将生成的笛卡尔积直接转为DataFrame使用,可以用以下代码:

cross_df = pd.DataFrame(itertools.product(*oe.categories_), columns=feature_cols)

内容的提问来源于stack exchange,提问作者Sayalic

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.23 14:45:00