【问题标题】:Transformation mapping between input and output files using Machine Learning使用机器学习在输入和输出文件之间进行转换映射
【发布时间】:2020-08-04 18:50:35
【问题描述】:

我有两个文件,一个输入文件和一个输出文件。输入文件经过转换逻辑并生成输出文件。这里的问题是,我不知道输入和输出文件之间的转换逻辑。 输入文件包含 10 个字段,输出文件包含 7 个字段。使用转换逻辑将这 10 个字段转换为 7 个字段。

有没有办法使用一些机器学习算法,建立一个模型,自动推断输入和输出之间的关系,并能够根据输入文件中的数据预测输出?

【问题讨论】:

  • 您可能想多写一些有关您拥有的数据结构的信息,尤其是字段具有哪些数据类型。所以我可以告诉你,是的,这是可能的,但如果没有更多信息,它可能会相当“简单”或困难
  • 两个文件中的值都是混合类型的,包括分类的和连续的,并且是空格分隔的。
  • 简短地回答您的问题:是的。你可以在下面找到我更长的答案

标签: machine-learning


【解决方案1】:

我想我有一些东西可以帮助您解决问题: 您有不同数据类型的各种输入。此外,您还有不同数据类型的不同输出。让我们在使用 tensorflow 和 keras 时以这个数据集为例:

x_categorical=[1,2,3,4,5]
x_categorical_2=np.random.choice(x_categorical, len(x_categorical))
x_continuus=np.random.random_sample(len(x_categorical))

y_categorical = [0,2,3,4,5]
y_continuus = np.random.random_sample(len(x_categorical))

创建 tf.data.Datasets 并将 x 和 y 值压缩在一起,使其适合模型输入:

ds_x = tf.data.Dataset.from_tensor_slices(x_categorical)
ds_x1 = tf.data.Dataset.from_tensor_slices(x_categorical_2)
ds_x2 = tf.data.Dataset.from_tensor_slices(x_continuus)

dataset_x = tf.data.Dataset.zip((ds_x,ds_x1,ds_x2))

ds_y = tf.data.Dataset.from_tensor_slices(y_categorical)
ds_y1 = tf.data.Dataset.from_tensor_slices(y_continuus)

dataset_y = tf.data.Dataset.zip((ds_y,ds_y1))

dataset_train = tf.data.Dataset.zip((dataset_x, dataset_y))

构建一个连接输入的示例模型,其中一层包含数据组合的“逻辑”,另外两层包含每个输出的逻辑:

from tensorflow.keras import layers as layer
layer_input_categorical = layer.Input(shape=(1),name="x_categorical", dtype=tf.float32)
layer_input_categorical_2 = layer.Input(shape=(1),name="x_categorical_2", dtype=tf.float32)
layer_input_continuus = layer.Input(shape=(1),name="x_continuus", dtype=tf.float32)

concat_layer = layer.Concatenate()([layer_input_categorical,layer_input_categorical_2, layer_input_continuus])

dense_layer = layer.Dense(100)(concat_layer)

dense_layer_out_cat = layer.Dense(50)(dense_layer)

dense_layer_out_con = layer.Dense(50)(dense_layer)

output_categorical = layer.Dense(5, activation="softmax")(dense_layer_out_cat)

output_continuus = layer.Dense(1, activation="sigmoid")(dense_layer_out_con)

model = tf.keras.Model(inputs=[layer_input_categorical, layer_input_categorical_2, layer_input_continuus], \
                       outputs=[output_categorical, output_continuus])

model.compile(optimizer="Nadam", loss=["mse","sparse_categorical_crossentropy"])

请注意使用两个损失函数(mse 用于回归,sparse_categorical_crossentropy 用于分类。

另请注意,两个输出层具有不同的激活函数,softmax 用于分类(对于每个类,您得到概率)和一个 sigmoid 用于回归。

最后,只需使用以下命令开始训练:

model.fit(dataset_train.batch(1), epochs=20)

当然,这不是最好的方法,但事实证明,这是可能的。

【讨论】:

    猜你喜欢
    • 2016-04-11
    • 2015-08-04
    • 2017-04-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-04
    • 2018-03-23
    • 1970-01-01
    相关资源
    最近更新 更多