【发布时间】:2019-06-02 20:47:09
【问题描述】:
我在 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 holding the output
当n_classes = 2 时,我得到的输出为:Gist holding the output
我的问题:
1) 当
n_classes = 3时,我看到包含logit的列,但是当n_classes=2我看到额外列为logistic。为什么会这样?这个单独的列的目的是什么?2) 为什么分类器不以 3 的形式对输出进行分类,因为输出列有 3 个不同的输出?
3)分类器是在预测输出的下一步还是
output列中的对应结果?4) 哪个是我的输出列,以便我可以检查预测的输出?是
logit还是logistic?
请给我建议。我希望我的问题很清楚。
【问题讨论】:
标签: python python-3.x tensorflow classification