梯度下降法python实现


import numpy as np
import matplotlib.pyplot as plt

# 输入数据
x_ori = np.array([0.95, 3, 4, 5.07, 6.03, 8.21, 8.85, 12.02, 15])
y = np.array([5.1, 8.7, 11.5, 13, 15.3, 18, 21, 26.87, 32.5])

# 代价函数
def cost_function(theta, x, y):
    m = len(y)
    J = np.sum((np.dot(x, theta) - y) ** 2) / (2 * m)
    return J


# 初始化theta
theta = np.zeros(2)

# 增加截距项
x = np.c_[np.ones(x_ori.shape[0]), x_ori]


# 梯度下降算法
alpha = 0.01
iterations = 1500
m = len(y)

for i in range(iterations):
    theta = theta - (alpha / m) * np.dot(x.T, (np.dot(x, theta) - y))
    J = cost_function(theta, x, y)
    if i % 100 == 0:
        print("Iteration %d | Cost: %f" % (i, J))

print("斜率:", theta[1])
print("截距:", theta[0])

# 计算预测的y值
y_pred = theta[1]*x_ori + theta[0]
# 绘制结果图形
plt.scatter(x_ori, y)
plt.plot(x_ori, y_pred, color='r')
plt.title("Linear Regression")
plt.xlabel("x")
plt.ylabel("y")
plt.show()

运行结果:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Daniel_26_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值