python - 平均(似然)编码

标签 python machine-learning scikit-learn data-science

我有一个名为“data”的数据集,其中包含我想使用平均(可能性/目标)编码而不是标签编码进行编码的分类值。

我的数据集如下所示:

data.head()

ID  X0  X1  X10 X100    X101    X102    X103    X104    X105    ... X90 X91 X92 X93 X94 X95 X96 X97 X98 X99
0   0   k   v   0   0   0   0   0   0   0   ... 0   0   0   0   0   0   0   0   0   0
1   6   k   t   0   1   1   0   0   0   0   ... 0   0   0   0   0   0   1   0   1   0
2   7   az  w   0   0   1   0   0   0   0   ... 0   0   0   0   0   0   1   0   1   0
3   9   az  t   0   0   1   0   0   0   0   ... 0   0   0   0   0   0   1   0   1   0
4   13  az  v   0   0   1   0   0   0   0   ... 0   0   0   0   0   0   1   0   1   0
5 rows × 377 columns

我已经尝试过:

# Select categorical features
cat_features = data.dtypes == 'object'

# Define function
def mean_encoding(df, cols, target):

    for c in cols:
        means = df.groupby(c)[target].mean()
        df[c].map(means)

    return df

# Encode
data = mean_encoding(data, cat_features, target)

这会引发:

KeyError: False

我也尝试过:

# Define function
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,...

我已将训练和测试数据集连接到一个名为“数据”的数据集,并在将训练目标放入数据集之前将其保存为:

target = train.y
split = len(train)

data = pd.concat(objs=[train, test])
data = data.drop('y', axis=1)
data.shape

如果有帮助,我们将不胜感激。谢谢。

最佳答案

我认为您没有正确选择分类列。通过执行cat_features = data.dtypes == 'object',您不会获得列名称,而是获得显示列类型是否为分类的 bool 值。导致 KeyError: False

您可以选择分类列作为

mycolumns = data.columns
numerical_columns = data._get_numeric_data().columns
cat_features= list(set(mycolumns) - set(numerical_columns))

cat_features = df.select_dtypes(['object']).columns

其余的代码将是相同的

  # Define function
  def mean_encoding(df, cols, target):

     for c in cols:
        means = df.groupby(c)[target].mean()
        df[c].map(means)

    return df

# Encode
data = mean_encoding(data, cat_features, target)

关于python - 平均(似然)编码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57555085/

相关文章:

python - NLTK SklearnClassifier 错误

python - 用于交叉列列表的一致 ColumnTransformer

python - 用于数据过滤的 TF-IDF

python - 我想从 log.txt 文件中获取这个字符串怎么办

python - 处理 XML 数据的理想数据结构

matlab - 如何从classregtree中查找使用过的特征

xcode - CoreML:iOS:如何获取检测到的模型中心的二维坐标

python - 将日期列转换为时间戳列 + 小时的最有效方法

python - 是否可以从 Python Boto 同步调用 AWS Lambda 函数?

python-3.x - 100 个训练示例是否足以使用 spacy 训练自定义 NER?