Python 线性回归模型
以下是我使用SGD实现的线性回归,但得到的直线不是最佳拟合。我如何改进这一点Python 线性回归模型,python,python-3.x,numpy,machine-learning,regression,Python,Python 3.x,Numpy,Machine Learning,Regression,以下是我使用SGD实现的线性回归,但得到的直线不是最佳拟合。我如何改进这一点 导入matplotlib.pyplot作为plt 从matplotlib导入样式 将numpy作为np导入 样式。使用(“第五个第三个”) x=[[1]、[2]、[3]、[4]、[5]、[6]、[7]、[8]、[9]、[10]] y=[[3]、[5]、[9]、[9]、[11]、[13]、[16]、[17]、[19]、[21]] X=np.数组(X) Y=np.数组(Y) 学习率=0.015 m=1 c=2 gues=[
导入matplotlib.pyplot作为plt
从matplotlib导入样式
将numpy作为np导入
样式。使用(“第五个第三个”)
x=[[1]、[2]、[3]、[4]、[5]、[6]、[7]、[8]、[9]、[10]]
y=[[3]、[5]、[9]、[9]、[11]、[13]、[16]、[17]、[19]、[21]]
X=np.数组(X)
Y=np.数组(Y)
学习率=0.015
m=1
c=2
gues=[]
对于范围内的i(len(x)):
猜测=m*x[i][0]+c
错误=guess-y[i][0]
如果错误为0:
m=m-abs(错误)*x[i][0]*学习率
c=c-abs(错误)*学习率
gues.append([猜测])
t=np.数组(gues)
plt.散射(X,Y)
plt.绘图(X,t)
plt.show()
从sklearn.linear\u模型导入线性回归
var=线性回归()
变量拟合(X,Y)
plt.散射(X,Y)
plt.绘图(X,变量预测(X))
plt.show()
因为我必须最小化误差,即(猜测-y),对误差函数w.r.t进行偏导数,得到
m
得到x
,而w.r.tc
给出一个常数。你在做随机梯度下降,评估每个数据点的拟合。因此,最后的m
和c
给出了拟合关系的参数。您正在绘制的线是拟合线的“演变”
下面是我如何绘制它的,在我了解您正在做什么时,对代码进行了一些其他调整:
import numpy as np
import matplotlib.pyplot as plt
X = np.array([ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10])
Y = np.array([ 3, 5, 9, 9, 11, 13, 16, 17, 19, 21])
learning_rate = 0.015
m = 1
c = 2
gues = []
for xi, yi in zip(X, Y):
guess = m * xi + c
error = guess - yi
m = m - error * xi * learning_rate
c = c - error * learning_rate
gues.append(guess)
t = np.array(gues)
# Plot the modeled line.
y_hat = m * X + c
plt.figure(figsize=(10,5))
plt.plot(X, y_hat, c='red')
# Plot the data.
plt.scatter(X, Y)
# Plot the evolution of guesses.
plt.plot(X, t)
plt.show()
我在代码中制作的主要mod是:跳过压缩的
X
和Y
,这样您就可以使用它们而无需索引。为了简单起见,我还制作了一维阵列。如果直接使用梯度,而不使用abs
,则+ve和-ve情况下不需要不同的路径。我在这里做错了什么?你也做了同样的事情,但你的产品线是最合适的,而我的不是。你并没有真的做错什么,只是m
和c
是你的最终参数,而不是gues
。
import numpy as np
import matplotlib.pyplot as plt
X = np.array([ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10])
Y = np.array([ 3, 5, 9, 9, 11, 13, 16, 17, 19, 21])
learning_rate = 0.015
m = 1
c = 2
gues = []
for xi, yi in zip(X, Y):
guess = m * xi + c
error = guess - yi
m = m - error * xi * learning_rate
c = c - error * learning_rate
gues.append(guess)
t = np.array(gues)
# Plot the modeled line.
y_hat = m * X + c
plt.figure(figsize=(10,5))
plt.plot(X, y_hat, c='red')
# Plot the data.
plt.scatter(X, Y)
# Plot the evolution of guesses.
plt.plot(X, t)
plt.show()