2017-01-25 1 views
-1

Я использую matplotlib.pyplot в python. Рассмотрим ось y - это реальные значения, называемые «ранжированием потерь», а ось x - число итераций (1000). Затем я рисую среднюю потерю рейтинга на 2 прогона алгоритма на каждой итерации.Странная толстая линия в сюжетах python?

Кто-нибудь знает, почему я получаю эту странную толстую диаграмму вместо линии?

Большое спасибо заранее

enter image description here

И команда:

fig = plt.figure() 
    fig.suptitle('Batch-GD', fontsize=20) 
    plt.xlabel('Iteration', fontsize=18) 
    plt.ylabel('Avg ranking loss', fontsize=16) 
    plt.grid(True) 
    plt.xlim(0, iter) 
    plt.plot(avg_loss) 
    fig.savefig('GD_with_ini.jpg') 
    plt.show() 
+1

Можете ли вы показать нам действительную команду участок? – Suever

+0

@suever Я думаю, что мне нужно установить диапазон по оси y соответствующим образом. Я добавил код на вопрос. – user5996916

+0

Пожалуйста, отредактируйте свой вопрос и укажите код. –

ответ

3

То, что здесь происходит, вероятно, что ваша линейная плотность настолько высока, что линии пересекаются в пути что вместо самой линии показана простая поверхность.

Если мы возьмем, например, 10000 точек и заставить график колебаться с очень высокой частотой, мы получаем аналогичное поведение. Масштабирование показывает, что на самом деле есть линия.

enter image description here

Код для воспроизведения участка:

import matplotlib.pyplot as plt 
import numpy as np 
from mpl_toolkits.axes_grid1.inset_locator import inset_axes, mark_inset 

x = np.linspace(0,1000,num=10000) 
y = np.sin(x*100.)*x/5000.+np.exp(-x/60.)+np.sin(x/50.)*0.016 

plt.plot(x,y) 

###### show inset #### 
ax = plt.gca() 
axins = inset_axes(ax, 2,2, loc=1) 
axins.plot(x,y) 
axins.set_xlim(400, 410) 
axins.set_ylim(-0.1, 0.17) 
mark_inset(ax, axins, loc1=2, loc2=4, fc="none", ec="0.5") 

plt.show() 

Раствор затем может быть вычислить какой-то скользящие средние. Например .:

def running_mean(x, N): 
    cumsum = np.cumsum(np.insert(x, 0, 0)) 
    return (cumsum[N:] - cumsum[:-N])/N 
N=300 
cumsum = running_mean(y, N) 
ax.plot(x[N//2:-N//2+1], cumsum, c="orange") 
axins.plot(x[N//2:-N//2+1], cumsum, c="orange") 

enter image description here

+0

Я снова запустил программу (используя команду в вашем комментарии выше) и понял колебание. Взятие этого скользящего среднего идеально. Большое спасибо. – user5996916