在数据科学领域,数学知识的重要性不言而喻。正如Oralytics的首席顾问Brendan Tierney所说,数据科学家需要成为多面手,但更准确地说,应该是“多面手且在某些领域是专家”。在数学与数据科学相关的搜索中,微积分、线性代数和统计学是频繁出现的三个主题。本文将尝试以清晰的方式介绍一个涉及数学的重要数据科学概念,即梯度下降法。
在构建机器学习模型时,会遇到两个术语:目标函数和优化算法。目标函数,也称为损失函数或代价函数,提供了模型预测输出与期望输出值匹配程度的度量。构建机器学习模型的最终目标是最小化损失函数。优化算法帮助找到使损失函数最小的模型参数。梯度下降算法就是这样一种优化算法。
让从一个简单的单变量函数开始,例如损失函数f(x) = 5x^2 - 3x - 4。这个函数的图像是一个抛物线,因为函数中包含x^2项。可以尝试在上绘制代数表达式。选择的代数表达式的图像如图1.0所示,可以看到函数有一个最小值,对应于某个x值(将找出这个x值)。
# 导入必要的库
import numpy as np
import pandas as pd
from scipy.misc import derivative
# 定义返回f(x)的函数
def f(x):
return 5*x**2 + 3*x-4
# 存储连续导数值的列表
derivative_list = []
# x的初始值为4
i = 4
# 存储所有连续x值的列表,称为x_list
x_list = [4]
# 初始化eta
eta = 0.001
Flag = True
# 循环找到导数和对应的x
while Flag:
# 使用scipy估计给定x的导数
result = derivative(f, i, dx=1e-6)
derivative_list.append(result)
i = i - (eta * result) # 获取新的x值
# 如果导数为0,则打破循环
if result == 0:
Flag = False
break
x_list.append(i)
gradient_descent_df = pd.DataFrame({'x_values': x_list, 'first_derivatives': derivative_list})
print(gradient_descent_df.head())