DNNClassifier Tensorflow связанные запросы классификации - PullRequest
0 голосов
/ 08 января 2019

У меня есть вход и выход в CSV: training.csv
Выходные данные имеют вид -1,0, or 1, как видно из выходного столбца.
Ниже приведен код, который я использую для DNNClassifier:

import numpy as np # linear algebra
import pandas as pd # data processing, CSV file I/O (e.g. pd.read_csv)
import tensorflow as tf
from sklearn.model_selection import train_test_split
from tensorflow.contrib.tensorboard.plugins import projector
import csv
import os
print(os.listdir("input"))

data = pd.read_csv("training.csv")
data = data.fillna(0)
print((data.columns))

data[:-1] = data[:-1].apply(lambda x: (x - x.min()) / (x.max()-x.min()) )

feat_cols=[]
for i in range(len(data.columns)-1):
    feat_cols.append(tf.feature_column.numeric_column(data.columns[i]))

data['output'] = data['output'].astype('int64')
data.info()

input_x = data.drop('output',axis=1)
input_y = data['output']

input_x.shape

X_train, X_test, y_train, y_test = train_test_split(input_x, input_y, test_size = 0.10, random_state = 0)

# write an input function
input_func = tf.estimator.inputs.pandas_input_fn(x=X_train, y=y_train, batch_size=10, num_epochs=1000, shuffle=True,target_column="output")

# Dense neural network means every neuron is connected to every neuron in the next stage
dnn_model = tf.estimator.DNNClassifier(hidden_units=[10,10], feature_columns=feat_cols, n_classes=3,model_dir="DNN1",        
                                       activation_fn=tf.nn.leaky_relu,optimizer=tf.train.AdamOptimizer(learning_rate=0.0001) )
# no need to create embedded columns, all columns are already embedded

# PULL THE LEVER, KRONK!
output = dnn_model.train(input_fn=input_func, steps=1000)
print("this is output====>   ",output)

# Evaluate the model
eval_input_func = tf.estimator.inputs.pandas_input_fn(x=X_test, y=y_test, batch_size=10, num_epochs=1, shuffle=False,)
results = dnn_model.evaluate(eval_input_func)
print(results)

# Make some predictions
pred_input_func = tf.estimator.inputs.pandas_input_fn(x=X_train, batch_size=10, num_epochs=1, shuffle=False)
predictions = dnn_model.predict(pred_input_func)
my_pred=list(predictions)

for i in predictions:
    print(i)

data1 = pd.DataFrame(my_pred)

data1.head()

data1.to_csv("pred_class.csv")

Когда n_classes = 3, я получаю вывод как: Gist, удерживающий вывод
Когда n_classes = 2, я получаю вывод как: Gist, удерживающий вывод

У меня есть вопросы:

1) Когда n_classes = 3, я вижу столбцы, содержащие logit, но когда n_classes=2, я вижу дополнительный столбец как logistic. Почему это так? Какова цель этого отдельного столбца?

2) Почему классификатор не классифицирует выходные данные в виде 3, поскольку выходной столбец имеет 3 различных выходных сигнала?

3) Предсказывает ли классификатор следующий шаг вывода или соответствующий результат в столбце output?

4) Какой у меня выходной столбец, чтобы я мог проверить вывод прогноза? Это logit или logistic?

Пожалуйста, предложите мне. И я надеюсь, что мой вопрос кристально ясен.

1 Ответ

0 голосов
/ 08 января 2019

Для 3 классов конечный выходной слой будет рассматривать распределение вероятностей как полиномиальную переменную, в то время как для 2 классов это будет двоичная переменная.

Логиты в ML относятся к ненормализованным логарифмическим вероятностям, полученным при применении функции softmax. Логистика относится к применению чего-то вроде функции активации сигмоида для бинарной классификации, чтобы произвести нечто похожее на вероятность. Если вы нормализуете и масштабируете свои логиты, взяв экспоненту, вы получите столбец вероятностей в случае 3 классов. В случае 2 классов вы можете видеть, что выходные данные вероятностей соответствуют вашим логистическим выходам как 1-p и p. В случае двух классов часто вы можете позволить себе иметь только один выходной узел, так как в результате получается тип 0/1. Вот почему вы видите 2 вида результатов.

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

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