Как сохранить предсказания TensorFlow в DataFrame?

Вопрос или проблема

Я новичок в Tensorflow. Я обучил модель Tensorflow, но мне нужно взять предсказания модели и добавить их в мой оригинальный тестовый набор в качестве столбца. Как я могу это сделать?

def model(self, layers_dims, X_train, Y_train, X_test, Y_test, learning_rate=0.00001,
          num_epochs=1000, print_cost=True):
    """
    Реализует трехслойную нейронную сеть tensorflow: LINEAR->RELU->LINEAR->RELU->LINEAR->SOFTMAX.

    Аргументы:
    X_train -- тренировочный набор, размер (входной размер = 12288, количество примеров в обучающем наборе = 1080)
    Y_train -- тестовый набор, размер (выходной размер = 6, количество примеров в тестовом наборе = 1080)
    X_test -- тренировочный набор, размер (входной размер = 12288, количество примеров в обучающем наборе = 120)
    Y_test -- тестовый набор, размер (выходной размер = 6, количество примеров в тестовом наборе = 120)
    learning_rate -- скорость обучения оптимизации
    num_epochs -- количество эпох в цикле оптимизации
    minibatch_size -- размер минипакета
    print_cost -- True, чтобы выводить стоимость каждые 100 эпох

    Возвращает:
    parameters -- параметры, изученные моделью. Они могут быть использованы для предсказания.
    """

    ops.reset_default_graph()  # чтобы иметь возможность повторно запускать модель без перезаписи переменных tf
    tf.set_random_seed(1)  # чтобы результаты были консистентными
    seed = 3  # чтобы результаты были консистентными
    (n_x, m) = X_train.shape  # (n_x: входной размер, m: количество примеров в обучающем наборе)

    n_y = Y_train.shape[0]  # n_y: выходной размер
    #print('Ytrain shape', Y_train.shape)
    costs = []  # Для отслеживания стоимости

    # Создать заполнители размером (n_x, n_y)
    X, Y = self.create_placeholders(n_x, n_y)

    # Инициализация параметров
    parameters = NN_predict_trading_decisions.initialize_parameters(layers_dims)

    # Прямая прогпация: Построить прямую прогпацию в графе tensorflow
    ZL = NN_predict_trading_decisions.forward_propagation(X, parameters)

    # Функция стоимости: Добавить функцию стоимости в граф tensorflow
    cost = NN_predict_trading_decisions.compute_cost(ZL, Y)


    # Обратное распространение: Определить оптимизатор tensorflow. Использовать AdamOptimizer.
    #optimizer = tf.train.AdamOptimizer(learning_rate=learning_rate).minimize(cost)
    optimizer = tf.train.GradientDescentOptimizer(learning_rate).minimize(cost)

    # Инициализация всех переменных
    init = tf.global_variables_initializer()

    # Начать сессию для вычисления графа tensorflow
    with tf.Session() as sess:

        # Запустить инициализацию
        sess.run(init)

        # Выполнить цикл обучения
        for epoch in range(num_epochs):

            epoch_cost = 0.  # Определить стоимость, связанную с эпохой
            current_cost = sess.run([optimizer, cost], feed_dict= {X: X_train, Y: Y_train})
            epoch_cost +=  current_cost[1]

            # Выводить стоимость каждую эпоху
            if print_cost == True and epoch % 100 == 0:
                print("Cost after epoch %i: %f" % (epoch, epoch_cost))
            if print_cost == True and epoch % 5 == 0:
                costs.append(epoch_cost)

        # построить график стоимости
        plt.plot(np.squeeze(costs))
        plt.ylabel('cost')
        plt.xlabel('iterations (per tens)')
        plt.title("Learning rate =" + str(learning_rate))
        plt.show()

        # сохранить параметры в переменной
        parameters = sess.run(parameters)
        print("Parameters have been trained!")

        # Рассчитать правильные предсказания
        correct_prediction = tf.equal(tf.argmax(ZL), tf.argmax(Y))



        # Рассчитать точность на тестовом наборе
        accuracy = tf.reduce_mean(tf.cast(correct_prediction, "float"))

        print("Train Accuracy:", accuracy.eval({X: X_train, Y: Y_train}))
        print("Test Accuracy:", accuracy.eval({X: X_test, Y: Y_test}))

        return parameters

Благодаря Ankit Seth я нашел ответ.

# это возвращает выходной слой прямой прогпации с обученными параметрами модели.
pred = forward_propagation(X, parameters)
predictions_sigm = pred.eval(feed_dict = {X: X_test})
predictions_sigm = sigmoid(predictions)

# pred.eval возвращает слой линейной регрессии для каждого класса отдельно, поэтому нам нужно выбрать индекс максимального из них. Я не использую softmax слой, так как выход должен быть таким же.

# инициализация списка классов
y_list = []

for i in range(predictions_sigm.shape[1]):
    class_list = []
    class_list.append(predictions_sigm[0][i])   
    class_list.append(predictions_sigm[1][i])
    class_list.append(predictions_sigm[2][i])
    class_list.append(predictions_sigm[3][i])

    # получить индекс максимального значения сигмоиды. он будет соответствовать классу
    y = np.argmax(class_list)
    y_list.append(y)

   # затем добавить y_list в dataframe
   df['predicted_y'] = y_list

Создайте список входных данных, пропустите каждый вход через вашу модель и сохраните предсказание в список, затем вы можете запустить следующий код.

preds = YOUR_LIST_OF_PREDICTION_FROM_NN
result = pd.DataFrame(data={'Id': YOUR_TEST_DATAFRAME['Id'], 'PREDICTION_COLUM_NAME': preds})
result.to_csv(path_or_buf="submittion.csv", index = False, header = True)

Затем извлеките предсказание из тензора в Tensorflow.
Это извлечет данные из Tensor:

pred = forward_propagation(X, parameters) 
predictions = pred.eval(feed_dict = {X: X_test})

.

Ответ или решение

Теория

TensorFlow — это мощный инструмент для разработки и тренировки моделей машинного обучения. Однако после того, как модель обучена, необходимо иметь возможность извлекать прогнозы и работать с ними в удобном формате для последующего анализа, визуализации или использования в бизнес-процессах. В вашем случае цель — сохранить предсказания в формате DataFrame и добавить их в исходный тестовый набор данных.

pandas — это библиотека Python, которая предоставляет структуры данных и инструменты для простого анализа данных, наиболее часто используемой структурой данных является DataFrame. Эта структура данных позволяет легко манипулировать данными, выполнять различные операции и экспортировать результаты в удобные форматы (например, .csv).

Пример

Рассмотрим, как можно организовать процесс получения предсказаний с использованием TensorFlow и добавления их в DataFrame с помощью предложенного вами кода.

Получение предсказаний

Ваша модель может быть представлена функцией forward_propagation(X, parameters), где X — входные данные, а parameters — обученные параметры вашей нейронной сети.

Ключевые действия:

  1. Выполнить прямое распространение для получения выходов модели.
  2. Применить функцию sigmoid для получения вероятностей (если это необходимо).
  3. Использовать argmax для определения наиболее вероятного класса для каждой записи (если это задача классификации).

Код этого этапа может выглядеть следующим образом:

# получение сырых предсказаний
pred = forward_propagation(X, parameters)
predictions_sigm = pred.eval(feed_dict={X: X_test})

# применение функции сигмоида
predictions_sigm = sigmoid(predictions_sigm)

# получение предсказанного класса для каждой записи
y_list = []
for i in range(predictions_sigm.shape[1]):
    class_list = [predictions_sigm[j][i] for j in range(len(predictions_sigm))]
    y = np.argmax(class_list)
    y_list.append(y)

Добавление результатов в DataFrame

Предположим, что у вас есть DataFrame, содержащий тестовый набор данных. Вы можете добавить в него новый столбец с предсказаниями следующим образом:

import pandas as pd

# предположим, что df это ваш DataFrame с тестовыми данными
df['predicted_y'] = y_list

Экспорт результатов

Экспортировать результаты в формате CSV можно с помощью метода to_csv из библиотеки pandas. Это полезно, если вы хотите сохранить результаты для последующего использования или передачи коллегам:

df.to_csv("output_predictions.csv", index=False, header=True)

Применение

Теперь, когда вы знаете, как реализовать весь процесс, можете применить этот подход к своей задаче:

  1. Убедитесь, что ваша модель готова к генерации предсказаний. Параметры модели должны быть оптимально настроены и сохранены.
  2. Используйте входные данные из тестового набора данных и получите прогнозируемые результаты с помощью вашей модели.
  3. Добавьте результаты в исходный DataFrame, поддерживая уникальные идентификаторы или другие полезные метаданные, чтобы легче было интерпретировать результаты.
  4. Экспортируйте или визуализируйте данные для глубинного анализа.

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

Оцените материал
Добавить комментарий

Капча загружается...