回归
- 分类和回归
- 二分类和多分类
- 样本和训练集
- 线性回归
- 损失函数
- 梯度下降
- 梯度下降解决——元线性回归
- 多元线性归回
- 特征缩放
- 逻辑回归
有监督学习
- 回归 数值
- 分类 类别
分类
- 二分类 1or0
- 多分类 猫、狗、猪
损失函数
- w 权重
- b 偏差
梯度下降算法
梯度下降算法是一种常用的优化算法,用于求解损失函数的最小值。其基本公式为:
θ = θ - α ∇J(θ)
其中:
- θ 表示参数向量,需要更新的参数
- α 表示学习率,控制更新的步长
- J(θ) 表示损失函数
- ∇J(θ) 表示损失函数J对参数θ的梯度
梯度下降算法是一种迭代的优化算法,用于求解目标函数的最小值。贪心算法是一种选择当前最优解的策略,但不一定能得到全局最优解。
在梯度下降算法中,首先需要确定一个初始的参数值,然后计算目标函数对于该参数值的梯度。梯度表示了函数在该点的变化率,指向使函数值减小的最陡峭的方向。梯度的负方向即是使函数值减小的方向,因此可以沿着负梯度方向更新参数,使函数值逐渐减小。
梯度下降算法可以通过以下步骤实现:
-
初始参数值:选择初始的参数值。
-
计算梯度:计算目标函数对于当前参数值的梯度。
-
参数更新:沿着负梯度方向更新参数值。
-
终止条件:判断终止条件是否满足,比如达到最大迭代次数或梯度变化小于某个阈值。
-
重复步骤2-4,直到满足终止条件。
贪心算法是一种每一步选择当前最优解的策略,但不一定能得到全局最优解。在梯度下降算法中,每一次迭代都是根据当前梯度的方向来更新参数值,选择使函数值减小的方向。每一步都是贪心地选择当前最陡峭的方向,但只能保证朝着最小值的方向前进,而不能保证找到全局最小值。
因此,梯度下降算法是一种比贪心算法更为强大的优化算法,可以用于求解目标函数的最小值。
import numpy as np
import matplotlib.pyplot as plt
# 样本数据
X = np.array([1, 2, 3, 4, 5])
Y = np.array([5, 7, 9, 11, 13])
# 初始化参数
theta0 = 0
theta1 = 0
# 定义学习率和迭代次数
learning_rate = 0.01
num_iterations = 100
# 用于存储每次迭代的损失值
losses = []
# 梯度下降算法
for i in range(num_iterations):
# 预测值
Y_pred = theta0 + theta1 * X
# 计算损失函数
loss = np.sum((Y_pred - Y)**2) / (2 * len(Y))
losses.append(loss)
# 更新参数
theta0 -= learning_rate * np.sum(Y_pred - Y) / len(Y)
theta1 -= learning_rate * np.sum((Y_pred - Y) * X) / len(Y)
# 打印最终的参数值
print("theta0 =", theta0)
print("theta1 =", theta1)
# 绘制损失函数随迭代次数的变化曲线
plt.plot(range(num_iterations), losses)
plt.xlabel("Iterations")
plt.ylabel("Loss")
plt.show()
# 绘制样本数据和回归直线
plt.scatter(X, Y, color='red', label='Samples')
plt.plot(X, theta0 + theta1 * X, color='blue', label='Regression Line')
plt.xlabel("X")
plt.ylabel("Y")
plt.legend()
plt.show()
输出结果: