我有一些带有 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]
从 1D 到 2D,生成的 2D 数组只包含一个元素,而不是创建 len(X[:,0])
和 的 2D 数组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')
关于python - 为什么这条线性回归线不是直线?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72205186/