梯度下降法

梯度下降的理解:

场景描述:对于大量数据集,我们要找到一条曲线去拟合现有的数据点并预测未来的数值,要求预测值与实际值的误差最小(曲线上的点叫做预测值)。

为找到这样的一条曲线,我们设置参数并假设拟合曲线为

y=kx+b

带入自变量x_{i}求得预测值:

y_{i}=kx_{i}+b

设置误差g\left ( x \right )为:

g(x)=\sum \left ( Y_{i}-y_{i}\right )^{2}=\sum \left ( Y_{i}-kx_{i}-b \right )^{2}

得到误差函数为二次函数,为使得误差最小,我们要找到导数为0时所对应的斜率值和截距。

综上所述,我们可以理解梯度为误差函数的导数,梯度下降即改变参数值(斜率k和截距b)使自变量沿着目标函数最小方向下降,此时误差函数的导数为0。

迭代可理解为改变设置参数值的次数。

学习率可以理解为每次设置参数改变程度,例如每次迭代,截距b改变为

b+\alpha b_{0}\alpha为学习率

g(x)函数图像可表示为:

实例:

数据集:

代码:

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt

from pylab import mpl
mpl.rcParams["font.sans-serif"] = ["SimHei"]

# 读取数据
data = pd.read_excel('tidu1.xlsx')

X = data['面积'].values
y = data['房价'].values

# 设置截距
theta0 = 0.0  # 截距
theta1 = 0.0  # 斜率

# 设置学习率和最大迭代次数
learning_rate = 0.0001
max_iterations = 1000

# 梯度下降算法
for i in range(max_iterations):
    # 计算预测值
    y_pre = theta0 + theta1 * X

    # 计算误差
    error = y_pre - y

    # 更新模型参数
    theta0 -= learning_rate * np.mean(error)
    theta1 -= learning_rate * np.mean(error * X)

# 输出截距项和各特征的系数
print("截距: %.2f" % theta0)
print("斜率: %.2f" % theta1)

# 绘制数据点
plt.scatter(X, y, color='blue', label='数据')

# 绘制拟合线
x_values = np.linspace(min(X), max(X), 100)
y_values = theta0 + theta1 * x_values
plt.plot(x_values, y_values, color='red', label='拟合曲线')#线性回归方程

# 添加图例和标签
plt.legend()
plt.xlabel('面积')
plt.ylabel('房价')

# 显示图形
plt.show()

运行结果:

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值