一元回归线性下降算法

该博客介绍了一个利用梯度下降算法和最小均方误差(MSE)损失函数来预测书店分店利润的案例。通过读取数据文件,将人口和利润转换为数组,然后初始化模型参数,进行迭代优化。最终得到的模型可以用于预测新城市人口下的利润情况。

思想:使损失函数MSE最小,拟合出的函数越准确

案例:假设你是一家书店的老板,考虑开一家分店,根据该城市的人口预测利润

import pandas as pd
import numpy as np

df = pd.read_csv(‘data.txt’, header=None)
print(df)

取所有的人口转成数组

x = np.array(df.iloc[:, 0])

print(x)

取所有的利润转成数组

y = np.array(df.iloc[:, 1])

print(y)

样本量

N = len(x)

斜率

w = 4.7

截距

b = -0.7

迭代次数

iteration = 10000

学习率

learning_rate = 0.0002

两次随时函数值的误差值

coef = 0.001

预测函数

def predict():
return w * x + b

损失函数

def get_loss():
loss = 0
# 取预测值
y_predict = predict()
# print(y_predict)
# 通过损失函数求损失值 MSE
loss = (1 / N) * np.sum([val ** 2 for val in (y - y_predict)])
print(loss)
return loss

梯度下降算法:分别对w,b求导

def get_gradient():
# 取所有的预测值
y_predict = predict()
# 取当前的损失函数的值
loss = get_loss()
# 分别对w,b求偏导
# 对b求导
b1 = -(2 / N) * sum(y - y_predict)
# 对w求导
w1 = -(2 / N) * sum(x * (y - y_predict))
print(w1, b1)
# 改变w和b
w1 = w - learning_rate * w1
b1 = b - learning_rate * b1
return w1, b1, loss

cost1 = 0

循环10000次

for i in range(iteration):
# 使用梯度下降求最新的w,b
w, b, loss = get_gradient()
# 计算误差值
error = cost1 - loss
# 如果误差值小于阈值就结束
if cost1 != 0 and error < coef:
break;
cost1 = loss

print(f’w={w},b={b},loss={cost1}')

输入该城市的人口,预测利润

y = w * 11 + b
print(f’利润={y}')

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值