我最近看了一段来自欧文·张·卡格尔(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/