PYTHON:每x值多个y值的最佳拟合行

PYTHON:每x值多个y值的最佳拟合行,python,matplotlib,linear-regression,best-fit-curve,Python,Matplotlib,Linear Regression,Best Fit Curve,我正在matplotlib中绘制一维数组(x轴)与二维数组(y轴),因此每个x值都有多个y值。我想画一条最佳拟合的直线(线性回归),而不仅仅是一条连接点的直线。我该怎么做 所有Other示例似乎每x值只有一个y值。当我使用“from sklearn.linear\u model import LinearRegression”时,我得到的最佳拟合线与每个x值的y值一样多 编辑:以下是我尝试过的代码: model = LinearRegression() x_axis2 = np.arange(0

我正在matplotlib中绘制一维数组(x轴)与二维数组(y轴),因此每个x值都有多个y值。我想画一条最佳拟合的直线(线性回归),而不仅仅是一条连接点的直线。我该怎么做

所有Other示例似乎每x值只有一个y值。当我使用“from sklearn.linear\u model import LinearRegression”时,我得到的最佳拟合线与每个x值的y值一样多

编辑:以下是我尝试过的代码:

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是一个一维阵列,而av_rsq3是一个二维阵列

您需要做的是提供一对一映射。点出现的顺序并不重要。如果你有这样的东西

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]

您只需添加这些具有匹配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()
它产生了。
注意,直线不适合我的示例数据,但我在编写它时没有考虑到这一点:)使用polyfit,您还可以更改拟合程度,以及获得渐变*和偏移中的误差裕度


*(或其他多项式系数)

如果只想绘制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))])

您能发布您迄今为止尝试过的代码吗?这将有助于诊断问题。我的第一直觉是,
LinearRegression
设计用于拟合X值以预测y值,因此您似乎已将问题颠倒过来。是的,抱歉,现在将进行编辑。我的观点仍然是,您正在尝试使用单个X值“预测”多个y值,这不是;t学习线性回归的工作原理。在这种情况下,您需要根据y-val分别绘制每组x-val。如果你想用一条直线拟合这些点,你需要做更多的工程来组合你的x值轨迹,我试图解决的是取每个x值的y值的平均值,然后将该平均值用于线性回归。这不应该也起作用吗?那会起作用,但它不会给你正确的答案。对不起,你是什么意思?将它们作为正常分数添加?你的数据和我的不同,那是一对一的映射,我的是一对五的映射。我的意思和彼得·瓦尔特森说的一样。如果要为每个x值添加更多y值,只需将另一个相同的x添加到x值列表中,然后将y值添加到y值列表中。在我的测试数据中,我为x=6和x=7添加了一些额外的y值。这对于你的一对五映射来说很好:)@KaiMason,所以对于你的1对5,你会有类似于x=np.array(1,1,1,1,1,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,4,4,4,4,4,4)和y=np.array(1,0.9,1,2,1,2.1,2,2.3,2,4,4.7,8)。只要列表之间的映射正确,给出坐标的顺序无关紧要。非常感谢,我确实理解,但我的代码主体的性质使得像这样重新排列数组非常困难。是否有其他软件包可以更好地完成这项工作并使我的阵列更整洁?我更喜欢在2d数组中组织我的y值。非常感谢,很大的帮助,我想我现在差不多可以工作了!不,我不想要一条平均线,我想要一个线性回归,所以我想要一条最佳拟合的直线。