我有一个名为“data”的数据集,其中包含分类值,我希望使用均值(可能性/目标)编码而不是标签编码来对其进行编码。
我的数据集看起来像这样:
data.head()ID X0 X1 X10 X100 X101 X102 X103 X104 X105 ... X90 X91 X92 X93 X94 X95 X96 X97 X98 X990 0 k v 0 0 0 0 0 0 0 ... 0 0 0 0 0 0 0 0 0 01 6 k t 0 1 1 0 0 0 0 ... 0 0 0 0 0 0 1 0 1 02 7 az w 0 0 1 0 0 0 0 ... 0 0 0 0 0 0 1 0 1 03 9 az t 0 0 1 0 0 0 0 ... 0 0 0 0 0 0 1 0 1 04 13 az v 0 0 1 0 0 0 0 ... 0 0 0 0 0 0 1 0 1 05 rows × 377 columns
我尝试过:
# 选择分类特征cat_features = data.dtypes == 'object'# 定义函数def mean_encoding(df, cols, target): for c in cols: means = df.groupby(c)[target].mean() df[c].map(means) return df# 编码data = mean_encoding(data, cat_features, target)
这会引发以下错误:
KeyError: False
我也尝试过:
# 定义函数def mean_encoding(df, target): for c in df.columns: if df[c].dtype == 'object': means = df.groupby(c)[target].mean() df[c].map(means) return df
这会引发以下错误:
KeyError: ‘Columns not found: 87.68, 87.43, 94.38, 72.11, 73.7, 74.0, 74.28, 76.26,…
我已经将训练集和测试集合并成一个名为“data”的数据集,并在数据集中删除目标变量之前保存了训练集的目标变量,如下所示:
target = train.ysplit = len(train)data = pd.concat(objs=[train, test])data = data.drop('y', axis=1)data.shape
希望能得到帮助。谢谢。
回答:
我认为您没有正确选择分类列。通过执行cat_features = data.dtypes == 'object'
,您并没有得到列名,而是得到一个布尔值,显示列类型是否为分类类型。因此会导致KeyError: False
您可以这样选择分类列:
mycolumns = data.columnsnumerical_columns = data._get_numeric_data().columnscat_features= list(set(mycolumns) - set(numerical_columns))
或者
cat_features = df.select_dtypes(['object']).columns
其余代码保持不变
# 定义函数 def mean_encoding(df, cols, target): for c in cols: means = df.groupby(c)[target].mean() df[c].map(means) return df# 编码data = mean_encoding(data, cat_features, target)