You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PassiveAggressiveClassifier调用partial_fit预测结果始终为最后训练类别

问题分析与解决

问题现象

使用PassiveAggressiveClassifier的partial_fit做增量训练时,每次训练完新的材料类别后,预测旧类别样本都会返回最后训练的类别:

  • 训练5个KAMIEN #1样本后,预测该类别样本结果正确;
  • 训练1个stone样本后,再预测KAMIEN #1样本,结果变成stone;
  • 再训练1个wood样本后,预测结果又变成wood。

问题原因

每次调用partial_fit时都传入classes参数,会强制模型重新初始化类别权重,直接覆盖之前学习到的旧类别信息。classes参数仅需在**第一次调用partial_fit**时传入,后续增量训练必须省略该参数。

修复方案

1. 首次训练(初始化类别)

第一次调用partial_fit时,传入所有待训练的类别列表,后续训练不再传入该参数:

import pandas as pd
from sklearn.linear_model import PassiveAggressiveClassifier

# 初始化模型
clf = PassiveAggressiveClassifier()

# 第一次训练KAMIEN #1样本,传入所有类别
df = pd.read_csv("KamienSample_001.csv")
flatten_df = df.to_numpy().reshape(1, -1)
all_classes = ['KAMIEN #1', 'stone', 'wood']
clf.partial_fit(flatten_df, ['KAMIEN #1'], classes=all_classes)

2. 增量训练其他类别

新增stone、wood样本时,仅传入特征和对应标签:

# 训练stone样本
df = pd.read_csv("stoneSample_001.csv")
flatten_df = df.to_numpy().reshape(1, -1)
clf.partial_fit(flatten_df, ['stone'])

# 训练wood样本
df = pd.read_csv("woodSample_001.csv")
flatten_df = df.to_numpy().reshape(1, -1)
clf.partial_fit(flatten_df, ['wood'])

3. 预测代码(保持不变)

df = pd.read_csv("KamienSample_001.csv")
flatten_df = df.to_numpy().reshape(1, -1)
class_code = clf.predict(flatten_df)
print("Class code", class_code)

额外注意事项

  • 确保所有样本扁平化后的特征维度一致(400×80000=32000000维);
  • PassiveAggressiveClassifier对样本不均衡敏感,建议各类别样本数量尽量均衡,避免单类样本过少导致模型偏向;
  • 训练过程中可定期用各类别验证样本测试模型,确认多类别预测稳定性。

内容的提问来源于stack exchange,提问作者Bat Man

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.27 18:23:07