PYTHON: линия наилучшего соответствия для нескольких значений y на значение x - PullRequest
0 голосов
/ 29 октября 2018

Я строю массив 1d (ось x) против массива 2d (ось y) в matplotlib, поэтому для каждого значения x имеется несколько значений y. Я хочу построить прямую линию наилучшего соответствия (линейная регрессия), а не просто линию, соединяющую точки. Как я могу это сделать ???

Кажется, что все другие примеры имеют только одно значение y на значение x. Когда я использую 'из sklearn.linear_model import LinearRegression', я получаю столько строк, которые лучше всего подходят для каждого значения x на значение x.

РЕДАКТИРОВАТЬ: вот код, который я пробовал:

model = LinearRegression()
x_axis2 = np.arange(0,len(av_rsq3))
x_axis2 = x_axis2.reshape(-1,1)
model.fit(x_axis2, av_rsq3)
pt.figure()
pt.plot(x_axis2,av_rsq3, 'rx')
pt.plot(x_axis2, model.predict(x_axis2))

примечание: x_axis2 - это массив 1d, а av_rsq3 - это массив 2d.

Ответы [ 3 ]

0 голосов
/ 29 октября 2018

Вам просто нужно добавить эти точки с соответствующими значениями x как обычные точки, затем вы можете добавить линию наилучшего соответствия следующим образом:

import numpy as np
from numpy.polynomial.polynomial import polyfit
import matplotlib.pyplot as plt

x = np.array([1,2,3,4,5,6,6,6,7,7,8])
y = np.array([1,2,4,8,16,32,34,30,61,65,120])

# Fit with polyfit
b, m = polyfit(x, y, 1)

plt.plot(x, y, '.')
plt.plot(x, b + m * x, '-')
plt.show()

, который производит graph.
Обратите внимание, что прямая линия не соответствует моим примерным данным, но я не думал об этом при ее написании :) С polyfit вы также можете изменять степень соответствия, а также получать поля погрешностей в градиентах * и смещения.

* (или другие полиномиальные коэффициенты)

0 голосов
/ 29 октября 2018

Если вы просто хотите построить график значений y и усреднить линию между ними, это возможно. Заимствование фиктивных данных из другого ответа:

x = [1,2,3,4]

y = [4,6,2,7]
y1 = [2,3,6,8]

plt.scatter(x,y)
plt.scatter(x,y1)
plt.plot(x,[((y[i]+y1[i])/2) for i in range(len(y))])

enter image description here

0 голосов
/ 29 октября 2018

То, что вам нужно сделать, это обеспечить однозначное сопоставление. Порядок появления точек не имеет значения. Так что если у вас есть что-то вроде этого

X:  [1,2,3,4]
Y1: [4,6,2,7]
Y2: [2,3,6,8]

вы бы получили это

X: [1,2,3,4,1,2,3,4]
Y: [4,6,2,7,2,3,6,8]
...