《什么是线性回归,成本函数,梯度下降》
2026/8/25 14:06:24 网站建设 项目流程

线性回归:

线性回归就是找一条直线,让这条直线贴合数据,用来预测新的数据

成本函数:

成本函数就是用来衡量这条直线画的好不好的一个数字。误差越大,成本越高,画的越差。

梯度下降:

梯度下降是一种方法,通过不断调整参数,让成本函数越来越小,最后找到最好的直线

从何而来:

线性回归:因为显示数据中很多都是线性关系,我们想用一个简单模型去描述它。

代码:

import numpy as np
import matplotlib.pyplot as plt

# 生成模拟数据:房子的面积和价格
x = np.array([?,? ?,? ?, ], dtype=float) # 面积
y = np.array([?,?,?,?,?], dtype=float) # 价格

# 线性回归:y = w * x + b
# 用最小二乘法直接求解析解
n = len(x)

# 求斜率 w
w = (n * np.sum(x * y) - np.sum(x) * np.sum(y)) / (n * np.sum(x**2) - np.sum(x)**2)

# 求截距 b
b = (np.sum(y) - w * np.sum(x)) / n

print(f"斜率 w = {w}")
print(f"截距 b = {b}")
print(f"预测函数:y = {w:.2f} * x + {b:.2f}")

# 画图
plt.scatter(x, y, color='blue', label='真实数据')
plt.plot(x, w * x + b, color='red', label='预测直线')
plt.xlabel('面积')
plt.ylabel('价格')
plt.title('线性回归')
plt.legend()
plt.grid(True)
plt.show()

成本函数:因为我们需要一个标准,来比较不同直线的优劣。

代码:

import numpy as np
import matplotlib.pyplot as plt

# 模拟数据
x = np.array([?,?,?,?,?], dtype=float)
y = np.array([?,?,?,?,?], dtype=float)

def compute_cost(x, y, w, b):
"""
计算均方误差成本函数
J(w, b) = (1 / 2n) * Σ(wx + b - y)²
"""
n = len(x)
predictions = w * x + b
cost = (1 / (2 * n)) * np.sum((predictions - y) ** 2)
return cost

# 测试几组 w 和 b,看看成本函数的变化
print("当 w = 0, b = 0 时,成本 =", compute_cost(x, y, 0, 0))
print("当 w = 1, b = 0 时,成本 =", compute_cost(x, y, 1, 0))
print("当 w = 2, b = 1 时,成本 =", compute_cost(x, y, 2, 1))

# 画出成本函数随 w 变化的曲线
w_values = np.linspace(0, 4, 100)
costs = [compute_cost(x, y, w, 0) for w in w_values]

plt.plot(w_values, costs)
plt.xlabel('w')
plt.ylabel('成本 J(w)')
plt.title('成本函数曲线')
plt.grid(True)
plt.show()

梯度下降:因为很多问题没有解析解,需要一个能一步步逼近最优解的方法。

代码:

import numpy as np
import matplotlib.pyplot as plt

# 模拟数据
x = np.array([?,?,?,?,?], dtype=float)
y = np.array([?,?,?,?,?], dtype=float)

def gradient_descent(x, y, w_init, b_init, learning_rate, iterations):
"""
用梯度下降找最优的 w 和 b
"""
w = w_init
b = b_init
n = len(x)
cost_history = [] # 记录每次迭代的成本

for i in range(iterations):
# 预测值
predictions = w * x + b

# 计算梯度
dw = (1 / n) * np.sum((predictions - y) * x)
db = (1 / n) * np.sum(predictions - y)

# 更新参数
w = w - learning_rate * dw
b = b - learning_rate * db

# 计算并记录成本
cost = (1 / (2 * n)) * np.sum((predictions - y) ** 2)
cost_history.append(cost)

return w, b, cost_history

# 初始参数
w_init = 0
b_init = 0
learning_rate = 0.01
iterations = 1000

# 执行梯度下降
w_final, b_final, cost_history = gradient_descent(x, y, w_init, b_init, learning_rate, iterations)

print(f"最终的 w = {w_final}")
print(f"最终的 b = {b_final}")
print(f"预测函数:y = {w_final:.2f} * x + {b_final:.2f}")

# 画成本函数随迭代次数的变化
plt.plot(cost_history)
plt.xlabel('迭代次数')
plt.ylabel('成本 J(w, b)')
plt.title('梯度下降过程')
plt.grid(True)
plt.show()

线性回归:预测

成本函数:判断好坏

梯度下降:找到最优参数

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询