在 TensorFlow JS 中结合一个热编码类别数据和连续数据示例

combining one hot encoded category data and continuous data examples in TensorFlow JS

同时使用单热编码类别数据和数值可变数据时,如何组合这些不同类型的数据来拟合模型?

以前使用 TensorflowJS,这只是我用来了解更多关于 google 的 tf 的副项目,我只使用了 one-hot特征值和标签值的编码数据。所有特征的形状都与标签相同。我只是在为单热编码名称的特征构建一个预测模型,例如

"name1" = [1,0,0]
"name2" = [0,1,0]
...

结果也是单热编码的,例如

"outcome1" = [1,0,0]
"outcome2" = [0,1,0]
...

这工作得很好,我能够构建一个可爱的模型,在测试时工作得很好。

然而,一旦我想做一些特征工程并使用数值连续的数据,我就不知道如何结合类别和连续数据。

我想做的是使用一个额外的非类别变量数据。所以我的特征是

"name1" = [1,0,0]
"name2" = [0,1,0]
variablePieceOfInformation = 10

我最初没有看到在张量流中一起使用这些数据的方法。

最初,我所有的特征都是大小相同的一个热编码类别名称,我的标签是一个我想要预测的热编码结果。

现在我想使用一条连续可变的附加信息,但我没有看到有关如何组合这两种类型的示例。

我期待的是可能有一种方法可以将类别(onehot 编码)和连续可变数据结合起来。

my git repo

import getTrainingData, { TrainingData, getNames } from "./getModelData";
import save from "./saveModel";
import { numAllTimeTeams } from "@gvhinks/epl-constants";

const createModel = async (): Promise<tf.Sequential> => {
  const model: tf.Sequential = tf.sequential({
    name: "predict"
  });
  model.add(tf.layers.dense({inputShape: [2,numAllTimeTeams], units: 3, useBias: true, name:"teams_layer"}));
  model.add(tf.layers.flatten());
  model.add(tf.layers.dense({units: 3, useBias: true, name: "results_layer"}));
  model.compile({optimizer: tf.train.adam(0.001), loss: 'meanSquaredError'});
  const { labelValues, featureValues } = await getTrainingData();
  const numTeamsInLeague: number = (featureValues[0][0]).length;
  const featureTensors = tf.tensor3d(featureValues, [featureValues.length, 2, numTeamsInLeague], 'int32');
  const labelTensors = tf.tensor2d(labelValues, [labelValues.length, 3], 'int32');
  const fitArgs = {
    batchSize: 500,
    epochs: 200,
    verbose: 0
  };
  await model.fit(featureTensors, labelTensors, fitArgs);
  return model;
};

export { getTrainingData, createModel as default, TrainingData, getNames, save };```

组合一个张量以同时具有分类数据和连续数据本身并不是一项复杂的任务。需要连接(使用 tf.concat)两个张量,一个是分类数据,另一个是数值数据。

有了这样的输入,预测只能是分类数据或数值数据,但不能同时是两者 - 原因是数据类型会影响误差函数的选择。