当训练数据被标准化时,你如何预测新实例的值?

机器算法验证 正常化 预言 偏最小二乘法
2022-03-25 02:54:03

我估计了 X 矩阵具有归一化列的偏最小二乘模型。现在我想预测一个新实例的值(这是一个总和为 1 的频率向量。)我假设如果我只使用原始频率值,预测值将不会与我的场景处于相同的比例“新”实例取自标准化 X 矩阵。(即比较模型的拟合值与新实例的预测值。)

我正在考虑将新实例添加为原始非归一化 X 矩阵的底行,进行归一化,然后使用这个新底行中的值进行预测。

或者,我可以使用原始非标准化 X 的列均值和标准差进行标准化。

一种方法优于另一种方法吗?有没有更好的办法?

2个回答

标准化通过以下步骤进行:

  1. 从该变量中减去每个变量的平均值。
  2. 然后将每个变量除以该变量的标准偏差(stddev)

所以你有来自非标准化 X 的 mean 和 stddev。最常见的方法是使用这个 mean 和 stddev 以相同的步骤对新数据进行标准化,但要预测你的新数据。因此,您的最后一个建议既正确又普遍。

此外,您还可以将截距项添加到从 PLS 模型获得的 BETA 矩阵/向量中,以表示均值居中步骤。此外,您还可以再次重新计算 BETA 以提供具有 stddev 效果的除法。

但是,将新数据添加到训练集(您的原始 X 矩阵)然后对其进行归一化并不是正确的方法。这使得缩放,更重要的是你的平均值,它就像一个截距项,取决于训练数据和你的新数据组合。这将导致不可靠的结果。您还可以测试并查看这两种方法产生不同的结果。

我根据训练数据集中的值对样本数据进行了标准化:

sample_data['col1'] = (sample_data['col1'] - training_data['col1'].min()) / (training_data['col1'].max() - training_data['col1'].min())
sample_data['col2'] = (sample_data['col2'] - training_data['col2'].min()) / (training_data['col2'].max() - training_data['col2'].min())
sample_data['col3'] = (sample_data['col3'] - training_data['col3'].min()) / (training_data['col3'].max() - training_data['col3'].min())
... an so on.

您的样本数据将根据您的训练数据进行标准化,您可以开始进行预测。