Построение нескольких кривых линий в Python с помощью Matplotlib - PullRequest
0 голосов
/ 01 июня 2019

Я пытаюсь построить 3 кривые потерь на одной фигуре. У меня есть пара проблем.

  1. Я не могу получить плавную кривую, вместо этого она соединяется точка-точка в резкую линию

  2. Как изменить шкалу оси, чтобы отобразить потери MSE, которые исчезают из-за того, что они слишком малы?


epochs=list(range(5000,50001,5000))
print(epochs)
mae_loss=[0.500225365,
0.000221096,
0.000060971,
0.000060323,
0.000059905,
0.000059579,
0.000059274,
0.000058972,
0.000058697,
0.000058476]

mse_loss=[0.135419831,
0.018331185,
0.002481434,
0.000335913,
0.000045486,
0.000006180,
0.000000867,
0.000000147,
0.000000042,
0.000000042]

rmse_loss=[0.500225306,
0.000293739,
0.000126985,
0.000121944,
0.000119484,
0.000117791,
0.000116400,
0.000115198,
0.000114148,
0.000113228]

plt.plot(epochs, mae_loss, 'b', label='MAE')
plt.plot(epochs, mse_loss, 'r', label='MSE')
plt.plot(epochs, mse_loss, 'g', label='RMSE')
plt.legend()
plt.show()```

Ответы [ 2 ]

2 голосов
/ 01 июня 2019

Для получения плавного сплайна / кривой вам потребуются некоторые методы интерполяции.Это само по себе другой вопрос.Я отвечу на вопрос о разных масштабах.Поскольку порядок величин ваших данных совершенно различен, в таких ситуациях наилучшим решением является использование логарифмической шкалы Y с использованием semilogy.PS: Вы написали mse_loss вместо rmse_loss в последней строке сюжета.

plt.semilogy(epochs, mae_loss, 'b', label='MAE')
plt.semilogy(epochs, mse_loss, 'r', label='MSE')
plt.semilogy(epochs, rmse_loss, 'g', label='RMSE')
plt.legend()
plt.show()

enter image description here

1 голос
/ 01 июня 2019

Чтобы сгладить ваши участки:

import matplotlib.pyplot as plt
import numpy as np
from scipy.interpolate import make_interp_spline, BSpline

def create_spline_from(x, y, resolution):
  new_x = np.linspace(x[0], x[-1], resolution)
  y_spline = make_interp_spline(x, y, k=3)
  new_y= y_spline(new_x)

  return (new_x, new_y)

epochs=list(range(5000,50001,5000))
print(epochs)
mae_loss=[0.500225365,
0.000221096,
0.000060971,
0.000060323,
0.000059905,
0.000059579,
0.000059274,
0.000058972,
0.000058697,
0.000058476]

mse_loss=[0.135419831,
0.018331185,
0.002481434,
0.000335913,
0.000045486,
0.000006180,
0.000000867,
0.000000147,
0.000000042,
0.000000042]

rmse_loss=[0.500225306,
0.000293739,
0.000126985,
0.000121944,
0.000119484,
0.000117791,
0.000116400,
0.000115198,
0.000114148,
0.000113228]

x, y = create_spline_from(epochs, mae_loss, 50)
plt.plot(x, y, 'b', label='MAE')

x, y = create_spline_from(epochs, mse_loss, 50)
plt.plot(x, y, 'r', label='MSE')

x, y = create_spline_from(epochs, rmse_loss, 50)
plt.plot(x, y, 'g', label='RMSE')
plt.legend()
plt.show()
...