如何绘制多输出回归任务的训练和测试的损失曲线? [英] How can plot loss curves for training and test for multi-output regression task?

查看:6
本文介绍了如何绘制多输出回归任务的训练和测试的损失曲线?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在试验MultiOutputRegressor(),我想知道一旦测量到损耗后,是否有可能达到多输出回归任务的Trains&;Testset上的损耗曲线。

我尝试的内容:

import matplotlib.pyplot as plt
import numpy as np
#from sklearn import datasets, ensemble
#from sklearn.inspection import permutation_importance
from sklearn.metrics import mean_squared_error
from sklearn.model_selection import train_test_split
from sklearn.multioutput import MultiOutputRegressor
from sklearn.linear_model import Ridge



# Load the data
#diabetes = datasets.load_diabetes()
#X, y = diabetes.data, diabetes.target
from sklearn.datasets import load_linnerud
X, y = load_linnerud(return_X_y=True)

#Data preprocessing

X_train, X_test, y_train, y_test = train_test_split(
    X, y, test_size=0.1, random_state=13
)

params = {
    "n_estimators": 500,
    "max_depth": 4,
    "min_samples_split": 5,
    "learning_rate": 0.01,
    "loss": "squared_error",
}

# Fit regression model
#reg = ensemble.GradientBoostingRegressor(**params).fit(X_train, y_train)

# Fit MultiOutput regression model
reg = MultiOutputRegressor(Ridge(random_state=123)).fit(X_train, y_train)


mse = mean_squared_error(y_test, reg.predict(X_test))
print("The mean squared error (MSE) on test set: {:.4f}".format(mse))
#The mean squared error (MSE) on test set: 37.6474

因此,我尝试启发post,并尝试了以下操作:

# Plot training deviance
test_score = np.zeros((params["n_estimators"]), dtype=np.float64)
for i, y_pred in enumerate(reg.staged_predict(X_test)):
    test_score[i] = reg.loss_(y_test, y_pred)

fig = plt.figure(figsize=(6, 6))
plt.subplot(1, 1, 1)
plt.title("Deviance")
plt.plot(np.arange(params["n_estimators"]) + 1,
         reg.train_score_,
         "b-",
         label="Training Set Deviance")

plt.plot(np.arange(params["n_estimators"]) + 1,
         test_score, "r-",
         label="Test Set Deviance")

plt.legend(loc="upper right")
plt.xlabel("Boosting Iterations")
plt.ylabel("Deviance")
fig.tight_layout()
plt.show()

我遇到此错误:

---------------------------------------------------------------------------
AttributeError                            Traceback (most recent call last)
<ipython-input-17-5db7534b636e> in <module>()
      1 test_score = np.zeros((params["n_estimators"],), dtype=np.float64)
----> 2 for i, y_pred in enumerate(reg.staged_predict(X_test)):
      3     test_score[i] = reg.loss_(y_test, y_pred)
      4 
      5 fig = plt.figure(figsize=(6, 6))

AttributeError: 'MultiOutputRegressor' object has no attribute 'staged_pre

我已检查此post已尝试:

import matplotlib.pyplot as plt
plt.plot(reg.loss_curve_)
#plt.plot(reg.validation_scores_)

但面向:

---------------------------------------------------------------------------
AttributeError                            Traceback (most recent call last)
<ipython-input-25-a6d600185ec3> in <module>()
     42 
     43 # Plot training deviance
---> 44 plt.plot(reg.loss_curve_)

AttributeError: 'MultiOutputRegressor' object has no attribute 'loss_curve_'

我不确定是否可以使用基于Keras的方法来收集历元上的求值(例如MSE),就像asnwer中提到的那样。因为我能够计算mse,所以它应该是一种在像历元/训练迭代这样的东西上对(多输出)回归任务进行plot loss curves的方法?我也搜索了一下,找到了一些post&;post2,但我无法找到适合我问题的输出。

推荐答案

首先,您需要在您的问题中更具体一点,并更多地解释您试图实现的目标,而不是仅仅发布一大堆代码。此外,还应尽量提供最小的代码示例,而不是带有随机注释的代码。

通过查看Ridge累加器和MultiOutputRegressor的文档,它们都没有提供您想要的功能。此外,一般情况下,sklearn似乎没有可用的接口来在FIT内部提供此功能。

在大多数框架中,如TensorFlowKerasPyTorch、...您可以直接访问培训循环,这样您可以决定要记录/保存的每个步骤,或者有一个回调系统,允许您在培训中的特定步骤做特定的事情。然而,sklearn没有提供任何类似的东西。只有Fit方法才能发挥魔力,仅此而已。

但正如您已经发现的,有一种方法可以获得这种类型的曲线图。

# Load your data without splitting in X and y
regressor = MultiOutputRegressor(Ridge())
from sklearn.model_selection import learning_curve
train_sizes, train_scores, test_scores, fit_times, _ = learning_curve(
    estimator,
    X,
    y,
    return_times=True,
)
# Create plots given this data
给定输出数据,您现在可以使用matplotlib或您喜欢的任何工具创建绘图。对于如何绘制的第一个想法,您可以查看sklearn docu

如果您想使用其他评分函数,也可以查看这里learning_curve docu

这篇关于如何绘制多输出回归任务的训练和测试的损失曲线?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆