Tensorflow-如何显示线性回归模型的准确率

Bol*_*boa 4 machine-learning linear-regression python-3.x tensorflow

我有一个似乎有效的线性回归模型。我首先将和目标列加载到data,之后我实现以下...XY

X_train, X_test, Y_train, Y_test = train_test_split(
    X_data, 
    Y_data, 
    test_size=0.2
)

rng = np.random

n_rows = X_train.shape[0]

X = tf.placeholder("float")
Y = tf.placeholder("float")


W = tf.Variable(rng.randn(), name="weight")
b = tf.Variable(rng.randn(), name="bias")

pred = tf.add(tf.multiply(X, W), b)

cost = tf.reduce_sum(tf.pow(pred-Y, 2)/(2*n_rows))

optimizer = tf.train.GradientDescentOptimizer(FLAGS.learning_rate).minimize(cost)



init = tf.global_variables_initializer()
init_local = tf.local_variables_initializer()

with tf.Session() as sess:

    sess.run([init, init_local])

    for epoch in range(FLAGS.training_epochs):

        avg_cost = 0

        for (x, y) in zip(X_train, Y_train):

            sess.run(optimizer, feed_dict={X:x, Y:y})

        # display logs per epoch step
        if (epoch + 1) % FLAGS.display_step == 0:

            c = sess.run(
                cost, 
                feed_dict={X:X_train, Y:Y_train}
            )

            print("Epoch:", '%04d' % (epoch + 1), "cost=", "{:.9f}".format(c))

    print("Optimization Finished!")

    accuracy, accuracy_op = tf.metrics.accuracy(labels=tf.argmax(Y_test, 0), predictions=tf.argmax(pred, 0))

    print(sess.run(accuracy))
Run Code Online (Sandbox Code Playgroud)

我不知道如何打印出模型的准确性。例如,在 中sklearn,这很简单,如果您有一个模型,只需打印model.score(X_test, Y_test)。但我不知道如何做到这一点,tensorflow或者是否可能。

我想我可以计算一下Mean Squared Error。这有什么帮助吗?

编辑

我尝试tf.metrics.accuracy按照评论中的建议实施,但在实施时遇到问题。文档说它需要 2 个参数,labels并且predictions,所以我尝试了以下...

accuracy, accuracy_op = tf.metrics.accuracy(labels=tf.argmax(Y_test, 0), predictions=tf.argmax(pred, 0))

print(sess.run(accuracy))
Run Code Online (Sandbox Code Playgroud)

但这给了我一个错误......

FailedPreconditionError(请参阅上面的回溯):尝试使用未初始化的值准确度/计数 [[节点:准确度/计数/读取 = IdentityT=DT_FLOAT, _class=["loc:@accuracy/count"], _device="/job:localhost /副本:0/任务:0/设备:CPU:0"]]

具体如何实现这一点呢?

Bol*_*boa 5

事实证明,由于这是一个多类线性回归问题,而不是分类问题,因此这tf.metrics.accuracy不是正确的方法。

我没有以百分比的形式显示模型的准确性,而是专注于减少均方误差 (MSE)。

从其他例子来看,tf.metrics.accuracy它从未用于线性回归,而仅用于分类。通常tf.metric.mean_squared_error是正确的方法。

我实现了两种方法来计算我对测试数据的预测的总 MSE...

pred = tf.add(tf.matmul(X, W), b)
...
...
Y_pred = sess.run(pred, feed_dict={X:X_test})
mse = tf.reduce_mean(tf.square(Y_pred - Y_test))
Run Code Online (Sandbox Code Playgroud)

或者

mse = tf.metrics.mean_squared_error(labels=Y_test, predictions=Y_pred)
Run Code Online (Sandbox Code Playgroud)

他们都做同样的事情,但显然第二种方法更简洁。

这里对如何测量线性回归模型的准确性有很好的解释。