为什么这条线性回归线不是直线?
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')
我有 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')