Проблемы с numpy полифитом - PullRequest
1 голос
/ 23 апреля 2020

По какой-то причине мой полифит очень далек, и я не могу понять, почему это так. Мой график рассеяния кажется нормальным.

График рассеивания

График PolyFit

Как это исправить? Вот мой код:

def plot(data, x_axis, y_axis, title):
    x = data[0]
    y = data[1]

    ## Plot data
    plt.figure(figsize=(8,4))
    plt.scatter(x, y)

    idx = np.isfinite(x) & np.isfinite(y)
    plt.plot(np.poly1d(np.polyfit(x[idx], y[idx], 3)))

    ## Format graph
    plt.gca().xaxis.set_major_formatter(mdates.DateFormatter('%Y'))
    plt.gca().xaxis.set_major_locator(mdates.YearLocator(3))       
    plt.gcf().autofmt_xdate()

    ## Define labels
    plt.xlabel(x_axis)
    plt.ylabel(y_axis)
    plt.title(title)

    ## Graph data
    plt.show()

Если мне нужно связать свои данные, тогда я смогу. Здесь слишком много всего, чтобы публиковать здесь.

Проверка

print(x[idx])
print(y[idx])

Показывает правильные значения и ничего не отключается.

x [idx] и y [idx] сюжет

РЕДАКТИРОВАТЬ: я выяснил свое решение. Я неправильно использовал polyfit.

    idx = np.isfinite(x) & np.isfinite(y)
    avgTrend = np.poly1d(np.polyfit(x[idx], y[idx], 3))
    plt.plot(x, avgTrend(x), color='red')

введите описание изображения здесь

1 Ответ

0 голосов
/ 23 апреля 2020

Проблема, похоже, связана со степенью полинома. Для стольких точек данных может быть просто невозможно подобрать полиномиал с хорошей степенью 3. Вы можете попробовать более высокую степень (вряд ли будет работать так, как вы хотите), или вы можете попробовать функцию сплайна.

Например, вы можете попробовать пакет csaps, который реализует сглаживание сплайнов и который я могу порекомендовать.

Надеюсь, это поможет

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...