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

手写AdalineSGD模型测试时如何使用训练权重预测新输出

从零实现模型的新样本预测方法
  • 预测新样本必须使用训练阶段迭代收敛得到的权重(Weights)与偏置(Bias):这些参数是模型从训练数据中学习到的全部规律,若不使用训练好的参数,模型等价于随机初始化的随机猜测器,没有任何预测价值。
  • 对你编写的AdalineSGD代码而言,流程完全正确:先在训练集上调用fit(X_train, y_train)完成训练,之后传入与训练集维度、预处理方式一致的测试集,执行predict(X_test)即可得到分类结果。
无框架下预测流程的数学与代码逻辑

你实现的Adaline是最基础的线性二分类模型,整个预测过程没有任何框架封装,全部是基础数值运算,对应你代码的执行逻辑分三步:

  1. 参数锁定:训练完成后,存放在实例属性self.w_中的参数不再更新:其中self.w_[0]是偏置项,self.w_[1:]是对应每个输入特征的权重,这组数就是训练完成的模型本身。

    代码笔误提醒:你在__init__方法中写的属性名是self.w_initializaed(initialized拼写漏了字母t),但后续_initialize_weights、partial_fit方法中调用的是self.w_initialized,运行时会触发属性不存在的报错,建议把属性名统一修正。

  2. 净输入计算:对每个待预测样本,执行线性加权求和,对应你写的net_input方法:
    对输入特征矩阵$X$,计算每个样本的线性响应值 $z = X \cdot w_{1:} + w_0$,也就是每个特征值乘对应权重后求和,再加偏置项。
  3. 激活与决策输出:你实现的Adaline使用恒等激活函数(activation方法直接返回输入值),最后通过阈值规则输出分类结果:若净输入$z \ge 0$则判定为类别1,否则判定为类别0,和你predict方法中的np.where逻辑完全一致。
预测阶段的注意事项
  • 预测时绝对不能重新调用_initialize_weights方法,否则训练好的参数会被随机生成的新值覆盖,模型直接失效。如果需要持久化训练好的模型,直接用numpy的np.save把self.w_数组存为本地文件即可,下次使用时把加载的数组赋值给模型实例的w_属性,不需要重新训练就能直接预测。
  • 传入的测试集X_test必须和训练集保持完全一致的预处理规则:比如训练前对特征做了标准化,测试集必须使用训练集计算得到的均值、标准差做转换,不能用测试集自身的统计值,也不能传入特征维度和训练集不匹配的输入。
  • 预测过程不会修改模型参数:你代码里的样本打乱、权重更新逻辑仅在fit(全量训练)和partial_fit(增量训练)阶段生效,predict方法只做前向计算,反复调用预测不会改变模型的效果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 03:42:21