У меня есть вход и выход в 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
?
Пожалуйста, предложите мне. И я надеюсь, что мой вопрос кристально ясен.