我最近看了一段来自欧文·张·卡格尔(Owen Zhang kaggle)排名第一的竞争对手的视频:
https://youtu.be/LgLcfZjNF44
在这里,他解释了一种将分类特征编码为数字的技术,称之为漏掉一个编码。他对分类特征所做的是将一个值与每个观察值相关联,这是所有其他具有相同类别的观察值的响应的平均值。
我一直在尝试使用pandas在python中实现这个策略。虽然我已经成功地构建了一个代码,但事实上,我的数据集的大小是数千万,它的性能非常慢。
如果有人能提出一个更快的解决方案,我将非常感激。
到目前为止这是我的代码:

def categ2numeric(data, train=True):
    def f(series):
        indexes = series.index.values
        pomseries = pd.Series()
        for i, index in enumerate(indexes):
            pom = np.delete(indexes, i)
            pomseries.loc[index] = series[pom].mean()
        series = pomseries
        return series

    if train:
        categ = data.groupby(by=['Cliente_ID'])['Demanda_uni_equil'].apply(f)

我需要把这个系列:
            159812     28.0
            464556     83.0
            717223     45.0
            1043801    21.0
            1152917     7.0
            Name: 26, dtype: float32

对此:
            159812     39.00
            464556     25.25
            717223     34.75
            1043801    40.75
            1152917    44.25
            dtype: float64

或指数为159812的数学元素等于所有其他元素的平均值,或:
39=(83+45+21+7)/4

最佳答案

用级数和元素之和之间的差替换级数中的每个元素,然后除以级数的长度减去1。假设s是您的系列:

s = (s.sum() - s)/(len(s) - 1)

结果输出:
159812     39.00
464556     25.25
717223     34.75
1043801    40.75
1152917    44.25

关于python - Pandas 对分类特征的留一法编码的实现,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/39129085/

10-08 22:11