连续到来的训练数据怎么处理?用 SGDClassifier 分批更新并检查预测

训练数据连续到来时,SGDClassifier 的 partial_fit 可以在同一模型上分批更新。关键是第一批明确全部类别、之后保持特征列和预处理一致。下面使用固定的初始标准化器,分六批更新分类器,并核对更新计数和独立演示输入的预测。

训练数据连续到来时,SGDClassifier 的 partial_fit 可以在同一模型上分批更新。关键是第一批明确全部类别、之后保持特征列和预处理一致。下面使用固定的初始标准化器,分六批更新分类器,并核对更新计数和独立演示输入的预测。

环境与运行方法

本文代码在 Windows、Python 3.11 的本地独立环境执行通过。以下数据全部为人为构造的教学样本,不是客户数据,也不是业务效果测试。

连续到来的训练数据怎么处理?用 SGDClassifier 分批更新并检查预测

新建一个空目录,在终端执行安装命令,把后面的完整代码保存为 demo.py,再执行 python demo.py。文件输出均保存在运行目录,请先在空目录练习。

python -m pip install numpy==2.4.6 scikit-learn==1.9.1

固定类别和预处理状态

第一次 partial_fit 传 classes=[0,1],即使首批只出现一种标签,也告诉分类器完整类别空间。后续批次不能突然增加第三类;要重新设计模型和类别迁移。标签必须已经由可靠流程取得,partial_fit 不会自动给未标注记录赋真值。

本例只在前20条训练记录上拟合 StandardScaler,并在后续批次使用同一均值和尺度。它不是最优统计估计,只是让示例特征坐标保持固定。如果每批重新 fit 一个标准化器,却保留已有分类器权重,权重对应的坐标会变化。

更新后核对状态与独立输入

生成120条训练记录和20条独立演示输入,标签由第一列正负决定。分类器使用 loss=log_loss、固定学习率和种子,每批20条;t_ 的增长用于检查更新有没有累计,并不是准确率指标。

程序结束打印 t_、演示准确率和前三条预测。独立演示输入只用于检查本次小样例,不参与拟合或标准化;真实流数据还应考虑时间顺序、漂移、批次失败恢复和模型版本。

可复制的完整代码

import numpy as np
from sklearn.preprocessing import StandardScaler
from sklearn.linear_model import SGDClassifier
rng = np.random.default_rng(4)
X = rng.normal(size=(120, 2)); y = (X[:, 0] > 0).astype(int)
X_check = rng.normal(size=(20, 2)); y_check = (X_check[:, 0] > 0).astype(int)
scaler = StandardScaler().fit(X[:20])
model = SGDClassifier(loss="log_loss", learning_rate="constant", eta0=0.05, random_state=0)
updates = []
for start in range(0, len(X), 20):
    model.partial_fit(scaler.transform(X[start:start+20]), y[start:start+20], classes=np.array([0, 1]))
    updates.append(int(model.t_))
pred = model.predict(scaler.transform(X_check))
print("update_t", updates)
print("toy_check_accuracy", round(float((pred == y_check).mean()), 3))
print("first_three_predictions", pred[:3].tolist())
assert updates == [21, 41, 61, 81, 101, 121]
assert len(pred) == len(X_check)
assert model.classes_.tolist() == [0, 1]

运行结果与核对方法

下面是本文教学代码在上述本地环境中的实际输出。浮点数末位可能随依赖版本变化。

update_t [21, 41, 61, 81, 101, 121]
toy_check_accuracy 0.95
first_three_predictions [1, 1, 1]

update_t 应依次为21、41、61、81、101、121,说明同一模型累计处理了六批。核对 classes 为 [0,1]、预测有20条,再用你实际的带标签历史数据设计按时间的验证;不能把教学准确率直接当作业务性能。

使用边界与常见问题

数据是随机生成且标签由简单规则构造,没有模拟真实漂移或上线吞吐量。固定首批标准化也可能不适合后续分布;程序没有保存恢复检查点,不能直接承担生产流任务。

每次 partial_fit 等于完整训练很多轮吗?

不是。SGDClassifier 的 partial_fit 对提供的数据执行一次更新轮次,需要你管理批次与轮数。不断重复同一批数据也不是获得新证据,应结合独立验证决定是否继续。

官方资料

接口与参数依据以下官方资料核对(2026年10月1日)。示例验证只覆盖本文输入和步骤。

Ai菜鸟网。发布者:AI小管家,转载请注明出处:https://www.alyyhw.com/30767.html

赞 (0)
AI小管家的头像AI小管家
用 ChatGPT 理解数据相关性:本地核对相关系数与混杂因素
上一篇 1天前
回归模型的残差怎么检查?画预测值与残差图定位未建模模式
下一篇 1天前

相关推荐

联系我们

联系我们

1

在线咨询: QQ交谈

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信
关注微信
分享本页
返回顶部