2017-02-20 3 views
3

Я пытаюсь сделать регрессию в Tensorflow. Я не уверен, что правильно вычисляю R^2, так как Tensorflow дает мне другой ответ, чем sklearn.metrics.r2_score Может кто-нибудь, пожалуйста, посмотрите на мой код ниже и дайте мне знать, правильно ли я реализовал изображенное уравнение. БлагодаряКак рассчитать R^2 в тензорном потоке

The formula I am attempting to create in TF

total_error = tf.square(tf.sub(y, tf.reduce_mean(y))) 
unexplained_error = tf.square(tf.sub(y, prediction)) 
R_squared = tf.reduce_mean(tf.sub(tf.div(unexplained_error, total_error), 1.0)) 
R = tf.mul(tf.sign(R_squared),tf.sqrt(tf.abs(R_squared))) 

ответ

4

Что вы вычисляя "R^2" является

по сравнению с данным выражением, вы вычисления среднего значения в неправильном месте. Вы должны принять среднее значение при вычислении ошибок, прежде чем выполнять разделение.

total_error = tf.reduce_sum(tf.square(tf.sub(y, tf.reduce_mean(y)))) 
unexplained_error = tf.reduce_sum(tf.square(tf.sub(y, prediction))) 
R_squared = tf.sub(1, tf.div(unexplained_error, total_error)) 
+0

в tf.div в третьей строке, у вас есть unexplained_error и total_error в неправильных положениях, они должны быть включены. –

0

На самом деле это должно быть противоположное по отношению к rhs. Необъяснимая дисперсия, деленная на общую дисперсию

+1

Не могли бы вы добавить код, чтобы сделать полный ответ? – brennan

0

Я думаю, что это должно быть так:

total_error = tf.reduce_sum(tf.square(tf.sub(y, tf.reduce_mean(y)))) 
unexplained_error = tf.reduce_sum(tf.square(tf.sub(y, prediction))) 
R_squared = tf.sub(1, tf.div(unexplained_error, total_error)) 
Смежные вопросы