gpt4 book ai didi

Keras 聚合目标函数

转载 作者:行者123 更新时间:2023-12-02 00:37:02 25 4
gpt4 key购买 nike

如何将聚合误差添加到keras模型?
有表:

   g  x  y 
0 1 1 1
1 1 2 2
2 1 3 3
3 2 1 2
4 2 2 1

我希望能够最小化 sum((y - y_pred) ** 2) 错误以及sum((sum(y) - sum(y_pred)) ** 2) 每组。
我可以接受较大的个体样本误差,但获得正确的总数对我来说至关重要。

SciPy 示例:

import pandas as pd
from scipy.optimize import differential_evolution
df = pd.DataFrame({'g': [1, 1, 1, 2, 2], 'x': [1, 2, 3, 1, 2], 'y': [1, 2, 3, 2, 1]})
g = df.groupby('g')
def linear(pars, fit=False):
a, b = pars
df['y_pred'] = a + b * df['x']
if fit:
sample_errors = sum((df['y'] - df['y_pred']) ** 2)
group_errors = sum((g['y'].sum() - g['y_pred'].sum()) ** 2)
total_error = sum(df['y'] - df['y_pred']) ** 2
return sample_errors + group_errors + total_error
else:
return df['y_pred']

pars = differential_evolution(linear, [[0, 10]] * 2, args=[('fit', True)])['x']
print('SAMPLES:\n', df, '\nGROUPS:\n', g.sum(), '\nTOTALS:\n', df.sum())


输出:

SAMPLES:
g x y y_pred
0 1 1 1 1.232
1 1 2 2 1.947
2 1 3 3 2.662
3 2 1 2 1.232
4 2 2 1 1.947
GROUPS:
x y y_pred
g
1 6 6 5.841
2 3 3 3.179
TOTALS:
g 7.000
x 9.000
y 9.000
y_pred 9.020

最佳答案

对于分组,只要你在整个训练过程中保持相同的组,你的损失函数就不会出现不可微的问题。

作为一种简单的分组形式,您可以简单地分离批处理。

我建议为此使用一个生成器。

#suppose you have these three numpy arrays:
gTrain
xTrain
yTrain

#create this generator
def grouper(g,x,y):
while True:
for gr in range(1,g.max()+1):
indices = g == gr
yield (x[indices],y[indices])

对于损失函数,您可以自己创建:

import keras.backend as K

def customLoss(yTrue,yPred):
return K.sum(K.square(yTrue-yPred)) + K.sum(K.sum(yTrue) - K.sum(yPred))

model.compile(loss=customLoss, ....)

如果你有负值,请小心第二项。

现在您使用 fit_generator 方法进行训练:

model.fit_generator(grouper(gTrain,xTrain, yTrain), steps_per_epoch=gTrain.max(), epochs=...)

关于Keras 聚合目标函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46647008/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com