💬 欢迎讨论:如果你在阅读过程中有任何疑问或想要进一步探讨的内容,欢迎在评论区留言!我们一起学习、一起成长。 👍 点赞、收藏与分享:如果你觉得这篇文章对你有帮助,记得点赞、收藏并分享给更多想了解机器学习的朋友! 🚀 开启微积分之旅:微积分是理解变化和累积的数学工具,是机器学习中的重要基础。让我们一起深入探索微积分的核心概念,打好数学基础,为后续的机器学习学习做好准备。
在机器学习的学习旅程中,微积分作为支撑理论之一,是理解模型优化与变化规律的关键。无论是在梯度下降、损失函数优化,还是在复杂模型的训练过程中,微积分都有着举足轻重的作用。在之前的博客中,我们已经介绍了线性代数和概率论的基础,这些都为进一步的学习奠定了基础。今天,我们将深入讲解微积分基础,特别是在机器学习中的应用。
如果你是机器学习的初学者,或者希望加强自己在微积分方面的基础知识,今天的内容将帮助你理解一些核心概念,并为后续更复杂的学习打下坚实的基础。
微积分是数学的一个分支,主要研究变化率(微分)和累积量(积分)。它在科学、工程、经济学以及机器学习等领域中有广泛的应用。
微积分的发展历史悠久,主要由艾萨克·牛顿(Isaac Newton)和戈特弗里德·莱布尼茨(Gottfried Wilhelm Leibniz)在17世纪独立发展起来。
和微分符号
。
随着时间的推移,微积分在数学中的地位不断提升,并成为现代科学和工程的基础工具之一。
极限是微积分的基石,描述了函数在某一点附近的行为。
当变量趋近于某个值时,函数的输出趋近于一个特定的数值,这个数值就是函数在该点的极限。
函数
在
处的极限是
,记作:
在
处连续,则:
或
时,可以对分子和分母分别求导,然后再求极限。
示例 1:计算
解答: 直接代入
得到
的不定形式,需进行因式分解:
因此:
示例 2:计算
解答: 使用洛必达法则:
连续性描述了函数在某一点没有“跳跃”或“断裂”的性质。
函数
在
处连续,当且仅当满足以下三个条件:
存在。
存在。
和
在
处连续,则
、
、
和
(当
)在
处连续。
在
处连续,且
在
处连续,则
在
处连续。
示例 1:判断函数
在
处是否连续。
解答: 简化函数:
在
处:
若定义
,则
在
处连续;否则,是可去间断点。
通过实战项目,我们将使用Python绘制函数在某一点的极限与连续性的示意图,帮助直观理解这些概念。
在
处的极限示意图。
处的连续性情况。
import numpy as np
import matplotlib.pyplot as plt
# 定义函数 f(x) = (x^2 - 4)/(x - 2), x != 2
def f(x):
return (x**2 - 4)/(x - 2)
# 定义简化后的函数 g(x) = x + 2, x != 2
def g(x):
return x + 2
# 生成 x 值,避开 x = 2
x = np.linspace(1, 3, 400)
x = x[x != 2]
y = f(x)
y_simplified = g(x)
# 绘制函数
plt.figure(figsize=(8, 6))
plt.plot(x, y, label=r'$f(x) = \frac{x^2 - 4}{x - 2}$', color='blue')
plt.plot(x, y_simplified, '--', label=r'$g(x) = x + 2$', color='red')
# 标注 x = 2
plt.axvline(x=2, color='gray', linestyle='--')
plt.scatter(2, 4, color='green', zorder=5, label=r'$f(2) = 4$')
# 设置图例和标签
plt.legend(fontsize=12)
plt.xlabel(r'$x$', fontsize=12)
plt.ylabel(r'$f(x)$', fontsize=12)
plt.title(r'函数 $f(x)$ 和其简化形式 $g(x)$ 的示意图', fontsize=14)
plt.grid(True)
# 显示图表
plt.show()
:在
处存在一个可去间断点,函数值为4。
:是
的连续扩展,消除了分母为零的问题。
,显示了在
处函数的定义和值。
通过这个示意图,我们可以直观地看到函数在某一点的极限与连续性情况。
导数是微积分的核心概念之一,描述了函数在某一点的瞬时变化率。
导数表示函数在某一点处的切线斜率,即函数在该点的瞬时变化率。
在物理学中,导数用于描述速度、加速度等瞬时变化量。例如,位置函数的导数是速度函数,速度函数的导数是加速度函数。
函数
在点
处的导数定义为:
如果这个极限存在,则称
在
处可导。
其中,
是常数。
其中,
是常数。
其中,
是正数常数。
当函数是复合函数时,使用链式法则进行求导:
问题:计算函数
的导数。
解答: 应用幂函数法则:
问题:计算函数
的导数。
解答: 应用指数函数法则和链式法则:
问题:计算函数
的导数。
解答: 应用商法则:
通过实战项目,我们将使用Python的SymPy库进行符号导数计算,并绘制函数及其导数的曲线,帮助直观理解导数的概念。
的导数。
和其导数
的曲线。
import numpy as np
import matplotlib.pyplot as plt
import sympy as sp
# 定义符号变量
x = sp.symbols('x')
# 定义函数 f(x) = x^3 - 4x + 1
f = x**3 - 4*x + 1
# 计算导数 f'(x)
f_prime = sp.diff(f, x)
# 将符号表达式转换为数值函数
f_func = sp.lambdify(x, f, 'numpy')
f_prime_func = sp.lambdify(x, f_prime, 'numpy')
# 生成 x 值
x_vals = np.linspace(-3, 3, 400)
y_vals = f_func(x_vals)
y_prime_vals = f_prime_func(x_vals)
# 绘制函数和导数曲线
plt.figure(figsize=(10,6))
plt.plot(x_vals, y_vals, label='f(x) = x³ - 4x + 1', color='blue')
plt.plot(x_vals, y_prime_vals, label="f'(x) = 3x² - 4", color='red', linestyle='--')
# 标注关键点
critical_points = sp.solve(f_prime, x)
for point in critical_points:
y_cp = f_func(point)
y_prime_cp = f_prime_func(point)
plt.scatter(point, y_cp, color='green')
plt.annotate(f'({point:.2f}, {y_cp:.2f})', (point, y_cp),
textcoords="offset points", xytext=(0,10), ha='center')
# 设置图例和标签
plt.legend()
plt.xlabel('x')
plt.ylabel('y')
plt.title('函数 f(x) 及其导数 f\'(x) 的曲线')
plt.grid(True)
plt.show()
:
:
通过这个示意图,我们可以直观地看到函数在不同点的变化率,以及导数在优化中的重要作用。
在机器学习中,优化问题是核心任务之一。优化的目标是找到使得某个目标函数(如损失函数)最小化或最大化的参数值。
其中:
表示模型的参数。
表示目标函数,通常是损失函数。
导数提供了目标函数在某一点的变化率信息,帮助我们理解目标函数的趋势,从而指导参数更新的方向和步长。
梯度下降法是最常用的优化算法之一,旨在通过迭代更新参数,逐步逼近目标函数的最小值。
梯度是目标函数对参数的偏导数组成的向量,表示目标函数在参数空间中的上升最快方向。
其中:
是学习率,控制每次更新的步长。
是目标函数在当前参数
处的梯度。
通过实战项目,我们将实现一个简单的线性回归模型,并使用梯度下降法优化模型参数。
。
import numpy as np
import matplotlib.pyplot as plt
# 生成模拟数据
np.random.seed(0)
X = 2 * np.random.rand(100, 1)
y = 4 + 3 * X + np.random.randn(100, 1) # y = 4 + 3x + Gaussian noise
# 添加 x0 = 1 到每个实例(截距项)
X_b = np.c_[np.ones((100, 1)), X] # X_b.shape = (100, 2)
# 初始化参数 theta = [theta0, theta1]
theta = np.random.randn(2, 1)
# 梯度下降参数
learning_rate = 0.1
n_iterations = 1000
m = 100 # 样本数量
# 存储损失值
loss_history = []
for iteration in range(n_iterations):
# 计算梯度
gradients = 2 / m * X_b.T.dot(X_b.dot(theta) - y)
# 更新参数
theta = theta - learning_rate * gradients
# 计算当前的损失(均方误差)
loss = (1 / m) * np.sum((X_b.dot(theta) - y) ** 2)
loss_history.append(loss)
# 输出优化后的参数
print(f"优化后的 theta0(截距): {theta[0][0]:.2f}")
print(f"优化后的 theta1(斜率): {theta[1][0]:.2f}")
# 绘制损失函数下降曲线
plt.figure(figsize=(8, 6))
plt.plot(range(n_iterations), loss_history, color='purple')
plt.xlabel('迭代次数', fontsize=12)
plt.ylabel('均方误差 (MSE)', fontsize=12)
plt.title('梯度下降优化过程中的损失变化', fontsize=14)
plt.grid(True)
plt.show()
# 绘制数据与回归线
plt.figure(figsize=(8, 6))
plt.scatter(X, y, color='blue', label='数据点')
plt.plot(X, X_b.dot(theta), color='red', label='拟合的回归线')
plt.xlabel('x', fontsize=12)
plt.ylabel('y', fontsize=12)
plt.title('线性回归模型与数据点', fontsize=14)
plt.legend(fontsize=12)
plt.grid(True)
plt.show()
优化后的theta0(截距): 4.22
优化后的theta1(斜率): 2.97
这接近于数据生成时的真实参数
,
,表明梯度下降法成功地最小化了损失函数。
通过这个实战项目,我们深入了解了梯度下降法在优化模型参数中的应用,以及如何通过可视化手段监控优化过程。
本篇,我们从微积分的视角重新审视了变化与累积的关系。通过对极限、连续性、导数的深入讲解,以及梯度下降法在优化中的应用,我们不仅掌握了微积分的基本概念和计算方法,还理解了微积分在机器学习中的关键作用。微积分,是我们理解模型优化与变化规律的数学基石,它为我们在后续学习更复杂的机器学习算法提供了坚实的理论支持。 小结:
展望: 在接下来的博客中,我们将继续深入学习微积分的其他重要概念,如积分,并探讨其在机器学习中的具体应用。通过系统化的学习,你将逐步构建起扎实的数学知识体系,为后续的机器学习算法与模型的理解与实现打下坚实的基础。希望通过本系列的学习,你能逐步掌握微积分的核心知识,提升在机器学习领域的分析与建模能力。
以上就是关于【机器学习】分而知变,积而见道:微积分中的世界之思的内容啦,各位大佬有什么问题欢迎在评论区指正,或者私信我也是可以的啦,您的支持是我创作的最大动力!❤️