LinearRegression简单实现

目录

一、理论 

二、代码


一、理论 

 

 

二、代码

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)

参考:Gradient Descent in Linear Regression - GeeksforGeeks

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值