美文网首页
Linear Regression Demo

Linear Regression Demo

作者: Jorvi | 来源:发表于2018-08-08 16:00 被阅读0次

线性回归Demo

# encoding = utf-8

import numpy as np

# 一元线性回归
def linear_regression():
    # 训练集
    data = np.loadtxt('data.csv', delimiter=',')
    
    # 学习率
    learning_rate = 0.001
    # 初始化m
    initial_m = 0.0
    # 初始化b
    initial_b = 0.0
    # 迭代次数
    num_iteration = 10000
    
    # 打印初始误差
    print ('initial_m = {0}, initial_b = {1}, error = {2}'\
           .format(initial_m, initial_b, compute_error(initial_b, initial_m, data)))
    
    # 参数优化
    [b, m] = optimizer(data, initial_b, initial_m, learning_rate, num_iteration)
    
    # 打印最终误差
    print ('final_m = {0}, final_b = {1}, error = {2}'\
           .format(m, b, compute_error(b, m, data)))
  


# 参数优化(梯度下降)
# m=m-rate*(dLoss/dm)    b=b-rate*(dLoss/db)
def optimizer(data, initial_b, initial_m, learning_rate, num_iteration):
    b = initial_b
    m = initial_m
    for i in range(num_iteration):
        [b, m] = compute_gradient(b, m, data, learning_rate)
        if i % 100 == 0:
            print('iterator = {0}, error = {1}'.format(i, compute_error(b, m, data)))
    return [b, m]


# 计算损失函数
# (1/n)*sum(y-(b+mx))
def compute_error(b, m, data):
    totalError = 0
    x = data[:, 0]
    y = data[:, 1]
    error_item = (y - (b + m * x)) ** 2
    totalError = np.sum(error_item) / (len(data))
    return totalError


# 梯度下降更新参数
def compute_gradient(b, m, data, learning_rate):
    x = data[:, 0]
    y = data[:, 1]
    N = len(data)
    b_gradient = np.sum((-2 / N) * (y - (b + m * x)))
    m_gradient = np.sum((-2 / N) * (y - (b + m * x)) * x)
    b = b - learning_rate * b_gradient
    m = m - learning_rate * m_gradient
    return [b, m]

# 程序入口
if __name__ == '__main__':
    linear_regression()

数据集


相关文章

网友评论

      本文标题:Linear Regression Demo

      本文链接:https://www.haomeiwen.com/subject/ehrxbftx.html