计算 DNNRegressor 模型的 MAE、MSE 和 R2 指标

Posted

技术标签:

【中文标题】计算 DNNRegressor 模型的 MAE、MSE 和 R2 指标【英文标题】:Calculate MAE, MSE and R2 metrics for a DNNRegressor model 【发布时间】:2021-07-11 14:43:12 【问题描述】:

我有一个DNNRegressor 模型,我想计算一些指标来了解我的模型的预测效果。如何计算平均绝对误差 (MAE)、均方误差 (MSE) 和 R 平方系数?

到目前为止,我只有损失,所以有人可以帮我计算 MAE、MSE 和 R2 吗?

# Imports 
import itertools
import pandas as pd
import tensorflow as tf
import numpy as np

import sklearn
from sklearn import preprocessing
from sklearn.model_selection import train_test_split
from sklearn.metrics import r2_score
import seaborn as sns
from matplotlib import pyplot as plt

from sklearn.metrics import r2_score

import statsmodels.api as sm

COLUMNS = ['Prot', 'Gra', 'Cen', 'Sal', 'TVN', 'Velocidad_Prensa']
FEATURES = ['Prot', 'Gra', 'Cen', 'Sal', 'TVN']
LABEL = ['Velocidad_Prensa']

def get_input_fn(data_set, num_epochs=None, shuffle=True):
  return tf.compat.v1.estimator.inputs.pandas_input_fn(
      x=pd.DataFrame(k: data_set[k].values for k in FEATURES),
      y=pd.Series(data_set[LABEL].values),
      num_epochs=num_epochs,
      shuffle=shuffle)

training_set = pd.read_csv("prensa train.csv", skipinitialspace=True, skiprows=1, names=COLUMNS)
test_set = pd.read_csv("prensa eval.csv", skipinitialspace=True, skiprows=1, names=COLUMNS)
training_set.head()

# Model

feature_cols = [tf.feature_column.numeric_column(k) for k in FEATURES]

regressor = tf.estimator.DNNRegressor(feature_columns=feature_cols, 
                                          activation_fn = tf.nn.relu, hidden_units=[200, 100, 50, 25, 12])

# Reset the index of training
training_set.reset_index(drop = True, inplace =True)
def input_fn(data_set, pred = False):
    
    if pred == False:
        
        feature_cols = k: tf.constant(data_set[k].values) for k in FEATURES
        labels = tf.constant(data_set[LABEL].values)
        
        return feature_cols, labels

    if pred == True:
        feature_cols = k: tf.constant(data_set[k].values) for k in FEATURES
        
        return feature_cols

# Deep Neural Network Regressor with the training set which contain the data split by train test split
regressor.train(input_fn=lambda: input_fn(training_set), steps=2000)

# Evaluation on the test set created by train_test_split
ev = regressor.evaluate(input_fn=lambda: input_fn(test_set), steps=1)

# Display the score on the testing set
loss_score1 = ev["loss"]
print("Final Loss on the testing set: 0:f".format(loss_score1))

def input_fn(features, batch_size=256):
  return tf.data.Dataset.from_tensor_slices(dict(features)).batch(batch_size)

features = ['Prot', 'Gra', 'Cen', 'Sal','TVN']
predict = 

print("Ingresar características químicas de la materia prima")
for feature in features:
  valid = True
  while valid:
    val = input(feature + ": ")
    if not val.isdigit(): valid = False

  predict[feature] = [float(val)]


predictions = regressor.predict(input_fn=lambda: input_fn(predict))

for pred_dict in predictions:
    print(pred_dict)

【问题讨论】:

欢迎来到 SO; “我遇到错误”对可能的受访者几乎没有帮助 - 请发布您尝试过的内容以及遇到的具体问题 【参考方案1】:

sklearn.metrics 对您要求的每个指标都有专门的评分方法。

就以下几点:

# Import metrics
from sklearn import metrics

# Make predictions
predictions = regressor.predict(input_fn=lambda: input_fn(predict))

# Calculate MAE, MSE, R2
print('MAE:', metrics.mean_absolute_error(y_true, predictions))
print('MSE:', metrics.mean_squared_error(y_true, predictions))
print('R2:', metrics.r2_score(y_true, predictions))

【讨论】:

我看到了那个代码,但我没有拆分我的数据,我有 2 个不同的文件,所以我不知道如何更改 y_true。你发给我的那段代码我已经将那个代码用于我正在做的线性回归模型,但我不知道如何将它拟合到这个 DNNRegressor 是的,我没有 y_true 数组,问题是我制作了文件,一个用于训练模型,另一个用于测试模型。 Ingresar características químicas de la materia prima Prot: 19.8 Gra: 6.5 Cen: 2.3 Sal: 0.8 TVN: 22.0 INFO:tensorflow:Calling model_fn。信息:张量流:完成调用 model_fn。 INFO:tensorflow:Graph 已完成。信息:张量流:从 /tmp/tmp2bo64kl_/model.ckpt-2000 恢复参数信息:张量流:运行 local_init_op。信息:张量流:完成运行 local_init_op。 '预测':数组([2.093052],dtype=float32) 当我运行模型时,它会要求我插入一些值,一旦我输入它会预测我的值。 好的,你没有y_true 数组。你在某处有测试数据的真实值吗?我看到你的数据是西班牙语的。如果您愿意,可以打开聊天室并用西班牙语与我交谈。

以上是关于计算 DNNRegressor 模型的 MAE、MSE 和 R2 指标的主要内容,如果未能解决你的问题,请参考以下文章

如何获得深度学习模型的平均绝对误差 (MAE)

使用张量板查找 DNNRegressor 的准确性

TensorFlow DNNRegressor 从训练回归器中检索损失值

在 Python 中使用 sklearn 使用 MAE 训练线性模型

RMSEMAE等误差指标整理

TensorFlow DNNRegressor实现深度学习的代码