Сопоставление преобразований между входными и выходными файлами с помощью машинного обучения - PullRequest
0 голосов
/ 04 августа 2020

У меня с собой два файла: входной и выходной. Входной файл проходит через logi преобразования c и создает выходной файл. Проблема здесь в том, что я не знаю о преобразовании logi c между входным и выходным файлом. Входной файл содержит 10 полей, а выходной файл - 7 полей. Эти 10 полей преобразуются в 7 полей с использованием логики преобразования c.

Есть ли способ с помощью какого-либо алгоритма машинного обучения построить модель, которая автоматически выводит взаимосвязь между вводом и выводом и сможет предсказать вывод на основе данных во входном файле?

1 Ответ

0 голосов
/ 04 августа 2020

Думаю, у меня есть кое-что, что могло бы помочь вам решить вашу проблему: у вас есть разные входные данные с разными типами данных. Также у вас есть разные выходы с разными типами данных. Давайте возьмем этот набор данных в качестве примера при работе с тензорным потоком и 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))

Постройте примерную модель, которая объединяет входные данные, имеет один слой, содержащий «logi c» для комбинации данных, и еще два уровня, которые имеют logi c для каждого выхода:

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 для классификации (для каждого класса вы получить вероятность) и один сигмоид для регрессии.

В конце просто начните обучение с:

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

Конечно, это не лучший способ сделать это, но он доказывает , то есть возможно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...