为什么这条线性回归线不是直线?

Why isn't this Linear Regression line a straight line?

我有 x 和 y 坐标的点,我想用线性回归拟合一条直线,但我得到一条锯齿状的线。

我正在尝试使用 sklearn 中的 LinearRegression。

创建点 运行 一个 for 循环,随机将一百个点放入一个 100 x 2 形状的数组中。我将它的左侧切片为 xs,将其右侧切片为 ys。

我希望打印时有一条直线 m.predict

import numpy as np
import matplotlib.pyplot as plt
import random
from sklearn.linear_model import LinearRegression

X = []
adder = 0
for z in range(100):
    r = random.random() * 20
    r2 = random.random() * 15
    X.append([r+adder-0.4, r2+adder])
    adder += 0.6
X = np.array(X)

plt.scatter(X[:,0], X[:,1], s=10)
plt.show()

m = LinearRegression()
m.fit(X[:,0].reshape(1, -1), X[:,1].reshape(1, -1))

plt.plot(m.predict(X[:,0].reshape(1, -1))[0])

我不擅长numpy但是,我认为这是因为使用reshape()函数将X[:,0]X[:,1]从一维转换为二维,得到的二维数组包含只有一个元素,而不是分别创建 len(X[:,0])len(X[:,1]) 的二维数组。并导致不希望的回归。
我能够使用 pandas 重新创建此模型并能够绘制所需的结果。代码如下

import numpy as np
import matplotlib.pyplot as plt
import random
from sklearn.linear_model import LinearRegression
import pandas as pd
X = []
adder = 0
for z in range(100):
    r = random.random() * 20
    r2 = random.random() * 15
    X.append([r+adder-0.4, r2+adder])
    adder += 0.6
X = np.array(X)

y_train = pd.DataFrame(X[:,1],columns=['y'])
X_train = pd.DataFrame(X[:,0],columns=['X'])

//plt.scatter(X_train, y_train, s=10)
//plt.show()

m = LinearRegression()
m.fit(X_train, y_train)
plt.scatter(X_train,y_train)
plt.plot(X_train,m.predict(X_train),color='red')