目录
一、理论
二、代码
Y_pred = b0 + b1*X
import numpy as np
import matplotlib.pyplot as plt
class LinearRegression:
def __init__(self, X, Y):
self.X = X
self.Y = Y
self.b = [0, 0]
# 更新参数
def update_coeffs(self, learing_rate):
Y_pred = self.predict()
Y = self.Y
X = self.X
m = len(self.Y)
b = self.b
self.b[0] = b[0] - (learing_rate * (1/m * np.sum(Y_pred - Y)))
self.b[1] = b[1] - (learing_rate * (1/m * np.sum((Y_pred - Y) * X)))
def predict(self, X=[]):
if not X:
X = self.X
b = self.b
Y_pred = [b[1] * x + b[0] for x in X]
return np.array(Y_pred)
def compute_cost(self,Y_pred):
Y = self.Y
m = len(Y)
J = 1/(2*m) * np.sum((Y_pred - Y) ** 2)
return J
def plot_best_fit(self, Y_pred, fig):
f = plt.figure(fig)
plt.scatter(self.X, self.Y,color = 'b')
plt.plot(self.X, Y_pred,color = 'r')
f.show()
def train():
losses = []
X = np.array([i for i in range(11)])
Y = np.array([2*i for i in range(11)])
regressor = LinearRegression(X,Y)
learing_rate = 0.01
regressor.update_coeffs(learing_rate)
Y_pred = regressor.predict()
loss = regressor.compute_cost(Y_pred)
losses.append(loss)
regressor.plot_best_fit(Y_pred,"Initial best fit line")
while 1:
regressor.update_coeffs(learing_rate)
Y_pred = regressor.predict()
loss = regressor.compute_cost(Y_pred)
if loss < losses[-1]:
losses.append(loss)
else:
break
regressor.plot_best_fit(Y_pred,"best fit line")
f = plt.figure("Verification")
print(losses)
plt.plot(range(10),losses[:10],color= 'g')
f.show()
return regressor
def test(regressor):
test_X = [i for i in range(11, 30)]
test_Y = [2*i for i in range(11,30)]
test_Y_pre = regressor.predict(test_X)
f = plt.figure("test")
plt.scatter(test_X,test_Y,color = 'b')
plt.plot(test_X,test_Y_pre,color = 'red')
f.show()
if __name__ == '__main__':
regressor = train()
test(regressor)