Python 线性回归模型

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=[

以下是我使用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=[]
对于范围内的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.t
c
给出一个常数。

你在做随机梯度下降,评估每个数据点的拟合。因此,最后的
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()