线性回归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()
数据集
网友评论