鉴于DataFrame
生成:
import numpy as np
import pandas as pd
from datetime import timedelta
np.random.seed(0)
rng = pd.date_range('2015-02-24', periods=14, freq='9H')
ids = [1]*5 + [2]*2 + [3]*7
df = pd.DataFrame({'id': ids, 'time_entered': rng, 'val': np.random.randn(len(rng))})
Run Code Online (Sandbox Code Playgroud)
df
:
id time_entered val
0 1 2015-02-24 00:00:00 1.764052
1 1 2015-02-24 09:00:00 0.400157
2 1 2015-02-24 18:00:00 0.978738
3 1 2015-02-25 03:00:00 2.240893
4 1 2015-02-25 12:00:00 1.867558
5 2 2015-02-25 21:00:00 -0.977278
6 2 2015-02-26 06:00:00 0.950088
7 3 2015-02-26 15:00:00 …
Run Code Online (Sandbox Code Playgroud) 我正在为推荐系统(项目推荐)进行多类分类,我目前正在使用sparse_categorical_crossentropy
损失训练我的网络。因此,EarlyStopping
通过监控我的验证损失来执行是合理的,val_loss
例如:
tf.keras.callbacks.EarlyStopping(monitor='val_loss', patience=10)
Run Code Online (Sandbox Code Playgroud)
它按预期工作。然而,网络(推荐系统)的性能是由 Average-Precision-at-10 来衡量的,并在训练期间作为一个指标进行跟踪,如average_precision_at_k10
. 因此,我还可以使用此指标执行提前停止:
tf.keras.callbacks.EarlyStopping(monitor='average_precision_at_k10', patience=10)
Run Code Online (Sandbox Code Playgroud)
这也按预期工作。
我的问题: 有时验证损失会增加,而 10 的平均精度正在提高,反之亦然。因此,当且仅当两者都在恶化时,我需要监控两者并提前停止。我想做什么:
tf.keras.callbacks.EarlyStopping(monitor=['val_loss', 'average_precision_at_k10'], patience=10)
Run Code Online (Sandbox Code Playgroud)
这显然不起作用。任何想法如何做到这一点?
删除相邻重复项之前已讨论过,但仅就直接相邻项(上方/下方一行)而言。
我有以下数据框:
df = pd.DataFrame(data={"item_no": [11, 4, 4, 4, 7, 8, 7, 11, 11, 5, 5, 6, 4], "time": [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13]})
Run Code Online (Sandbox Code Playgroud)
df
:
item_no time
0 11 1
1 4 2
2 4 3
3 4 4
4 7 5
5 8 6
6 7 7
7 11 8
8 11 9
9 5 10
10 5 11
11 6 12
12 4 13
Run Code Online (Sandbox Code Playgroud)
它按time
列排序(将其想象为时间序列)。我需要删除 …