Как построить гиперпараметры из цикла в matplotlib? - PullRequest
0 голосов
/ 09 июня 2019

У меня есть это ядро ​​со следующим кодом, в котором я хочу запустить разные n_estimators на моем тестовом наборе:

import matplotlib
import matplotlib.pyplot as plt
import numpy as np

for n_estimators in [5, 25, 50, 100, 250, 500]:
    my_mae = get_mae(n_estimators, train_X, test_X, train_y, test_y)
    print(n_estimators, my_mae)

Вывод (n_estimators, my_mae):

  • 5, 108070.017
  • 25, 54273.79
  • 50, 55912.80

Теперь я хочу отобразить каждую из этих 3 точек данных в диаграмме с помощью matplotlib.Как мне сделать это, учитывая приведенный ниже фрагмент кода?Я не уверен, где в цикле добавить, какой кусок кода для него показать.Пожалуйста, помогите.

Ответы [ 2 ]

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

Есть четыре способа сделать это:

Построение отдельных точек внутри цикла for

import matplotlib
import matplotlib.pyplot as plt
import numpy as np

for n_estimators in [5, 25, 50, 100, 250, 500]:
    my_mae = get_mae(n_estimators, train_X, test_X, train_y, test_y)
    print(n_estimators, my_mae)
    plt.scatter(n_estimators, my_mae) # Way 1
    # plt.plot(n_estimators, my_mae, 'o') # Way 2

Построение всех точек вне цикла for

my_maes = []
for n_estimators in [5, 25, 50, 100, 250, 500]:
    my_mae = get_mae(n_estimators, train_X, test_X, train_y, test_y)
    print(n_estimators, my_mae)
    my_maes.append(my_mae)

plt.plot(n_estimators, my_mae, 'o') # Way 3
# plt.scatter(n_estimators, my_mae) # Way 4   
0 голосов
/ 09 июня 2019

Если я правильно интерпретирую то, что вы говорите, вам нужна гистограмма, где каждый тик по горизонтальной оси - это количество оценок, а вертикальная ось - это MAE.Просто используйте для этого matplotlib.pyplot.bar.Вам также нужно будет изменить метки оси X, чтобы они были пользовательскими, потому что использование количества оценок, как есть, сделает внешний вид каждой полосы неравномерным.Таким образом, ось X должна быть линейной, скажем, от 1 до 6, где 6 - это общее количество оценок, которые вы дали в качестве примера для вашего примера кода, затем построить график с этими значениями и изменить метки оси X на действительные числа.оценки вместо.Вам понадобится matplotlib.pyplot.xticks для изменения меток оси X.

Следовательно:

import matplotlib
import matplotlib.pyplot as plt
import numpy as np

values = [5, 25, 50, 100, 250, 500] # New - save for plotting for later
dummy = list(range(len(values))) # Dummy x-axis values for the bar chart
maes = [] # Save the MAEs for each iteration
for n_estimators in values:
    my_mae = get_mae(n_estimators, train_X, test_X, train_y, test_y)
    maes.append(my_mae) # Save MAE for later

plt.bar(dummy, maes) # Plot the bar chart with each bar having the same distance between each other
plt.xticks(dummy, values) # Now change the x-axis labels

# Add x-label, y-label and title to the graph
plt.xlabel("Number of estimators")
plt.ylabel("MAE")
plt.title("MAE vs. Number of Estimators")
plt.show()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...