online/streaming 学习中的验证

Validation in online/streaming learning

我必须针对一些太大而无法放入内存的数据训练分类模型,我正在使用 scikit learn 和 pandas 进行分析。所以这是我的问题,如何在在线学习管道中使用验证来调整超参数?

我正在使用 pandas read_sql_query 和 chucksize 并使用 sklearn SGDClassifier partial_fit 从 sql 数据库流式传输数据。这是一个例子:

clf = SGDCClassifier()
for chunk in pd.read_sql_query("""
            select * 
            from table;
            """,
          con = conn,
          chunksize = n):

          preprocess chunk
          .
          .
          .
          clf.partial_fit(chunk)

我的问题是:在这种情况下进行验证的最佳方法是什么?

验证(用于调整或其他任何事情)对于流来说实际上是很自然的。

假设这是流的逻辑表示

|-------------------------------------------------------------------------->

它从左边开始,向右添加元素。由于这是一个流媒体设置,我们假设它不能全部放入内存。

在第 i 步 你在内存中有这个块

|--------------------(cccccccccccc)---------------------------------------->

所以你提前决定了火车(r)和测试(t)部分的大小,那么你就有了这样的东西:

|--------------------(rrrrrrrrrrrtt)---------------------------------------->

此时,您只能从 r 中学习,并在 t 中检查自己。

在第 i + 1 步,一些 t 变成 r,你必须丢弃一些旧的 rs(不过,存储数据的聚合是允许的)。

不要忘记留下一些数据以进行干净的测试。