机器学习—代价函数

学习了机器学习,以及tensorflow,想将这个重点思想回顾,复习——基于吴恩达的机器学习。
代价函数
代价函数(Cost Function )是定义在整个训练集上的,是所有样本误差的平均,也就是损失函数的平均

在这里插入图片描述
例如,在上述例子中,有6个数据,我们简称数据集,我们应该如何找到一个合适的函数来拟合这6个数据呢?
h=kx+b,我们应该怎么找到表示k和b最合适的数据,使得训练集中的数据更加准确?

即,在我们训练集中,使得预测值h与实际值y,之间的差异最小,即h-y最小,此时数据最拟合。

所以,如下所示的公式最小:
m
∑(h(x(i))-y(i))²
i=1

所以,上述式子为:m(样本个数)个h-y的平方的和。我们应该尽量让这个值小。
所以上述例子即为最小二乘法:
——————m
min=1/2m * ∑(h(x(i))-y(i))²
——————i=1
所以代价函数为:
——————m
J(k,b)=1/2m * ∑(h(x(i))-y(i))²
——————i=1
这个就是代价函数的最基本的理解,平方误差函数(萌新理解法),下面为代价函数常规写法:
在这里插入图片描述
例如:
在这里插入图片描述
可以看出,我们这个3个数据中,产生的函数为y=θ1 *x
那么损失函数为
——————m
J(θ1)=1/2m * ∑(y(x(i))-y(i))²
——————i=1
J(θ1)=(1-1)²+(2-2)²+(3-3)²=0
所以损失函数的值为0,即拟合此数据

在这里插入图片描述
上述中θ1=0.5,那么损失函数J(θ1)=0.68,同理θ1=0时,那么损失函数J(θ1)=2.3…等等,所以,最后损失函数的图像为:
在这里插入图片描述

他有一个最佳点。θ1=1,所以如果数据变多,如下时:
我们h=kx+b时,k和b如何求最佳值呢?
在这里插入图片描述
上述图中h(x)=θ1x+θ0,我们如何求出最佳值?,此时他不是一个简单的图形了,它显示如下:
在这里插入图片描述
一个立体三维的图形,但是我们依旧能够找到他的最佳值,我们将其变成二维:
在这里插入图片描述
如图,红点数据,即为h(x)的图像,在图中,越靠近中间,他的图像越拟合。
上述即为代价函数的理解。
如有错误可以联系我:626529441,一起交流学习,谢谢。

### 代价函数的作用 在机器学习中,代价函数(Cost Function)是用来衡量模型预测结果与实际值之间的误差的函数。它的主要作用是量化模型的性能,并为优化算法提供一个明确的目标,即最小化该误差[^4]。通过调整模型参数,使得代价函数的输出尽可能小,可以提高模型的准确性。 例如,在线性回归问题中,假设函数通常是一个一次函数 $ h_\theta(x) = \theta_0 + \theta_1 x $,其中 $\theta_0$ 和 $\theta_1$ 是模型参数。代价函数则基于这些参数计算出预测值真实值之间的差异,常见的形式为均方误差(Mean Squared Error, MSE): $$ J(\theta) = \frac{1}{2m} \sum_{i=1}^{m} (h_\theta(x^{(i)}) - y^{(i)})^2 $$ 这里的 $ m $ 表示训练样本的数量,而 $ J(\theta) $ 是代价函数的输出值。此公式表明,代价函数的核心在于计算预测值 $ h_\theta(x^{(i)}) $ 与实际值 $ y^{(i)} $ 的平方差的平均值 [^2]。 --- ### 代价函数的原理 代价函数的设计需要满足以下特性:非负性、连续性和可导性。非负性确保了代价函数的值始终为正;连续性和可导性则允许使用梯度下降等优化方法来更新模型参数。 对于分类任务,常用的代价函数包括交叉熵代价函数(Cross-Entropy Cost Function)。与二次代价函数相比,交叉熵代价函数能够更有效地促进神经网络的训练,特别是在多分类问题中。交叉熵的基本形式如下: $$ J(\theta) = -\frac{1}{m} \sum_{i=1}^{m} \left[ y^{(i)} \log(h_\theta(x^{(i)})) + (1 - y^{(i)}) \log(1 - h_\theta(x^{(i)})) \right] $$ 其中 $ y^{(i)} $ 是第 $ i $ 个样本的真实标签,$ h_\theta(x^{(i)}) $ 是模型对该样本的预测概率。交叉熵代价函数的优势在于它能够直接反映预测概率与真实标签之间的差异,并且在反向传播过程中提供了更稳定的梯度更新方向 [^3]。 --- ### 代价函数的公式推导 以逻辑回归中的代价函数为例,其目标是最大化似然函数。给定一组训练数据 $ \{(x^{(1)}, y^{(1)}), (x^{(2)}, y^{(2)}), ..., (x^{(m)}, y^{(m)})\} $,假设模型的预测函数为: $$ h_\theta(x) = \frac{1}{1 + e^{-\theta^T x}} $$ 这是逻辑回归的 sigmoid 函数。根据最大似然估计法,似然函数可以表示为: $$ L(\theta) = \prod_{i=1}^{m} h_\theta(x^{(i)})^{y^{(i)}} (1 - h_\theta(x^{(i)}))^{1 - y^{(i)}} $$ 为了简化计算,通常取对数似然函数: $$ \log L(\theta) = \sum_{i=1}^{m} \left[ y^{(i)} \log(h_\theta(x^{(i)})) + (1 - y^{(i)}) \log(1 - h_\theta(x^{(i)})) \right] $$ 最终,代价函数定义为负的对数似然函数除以样本数量 $ m $: $$ J(\theta) = -\frac{1}{m} \sum_{i=1}^{m} \left[ y^{(i)} \log(h_\theta(x^{(i)})) + (1 - y^{(i)}) \log(1 - h_\theta(x^{(i)})) \right] $$ 这一推导过程展示了如何从统计学的角度出发,构造一个合理的代价函数 [^3]。 --- ### 示例代码:实现逻辑回归的代价函数 下面是一个用 Python 实现逻辑回归代价函数的示例: ```python import numpy as np def sigmoid(z): return 1 / (1 + np.exp(-z)) def cost_function(theta, X, y): """ 计算逻辑回归的代价函数 :param theta: 模型参数 :param X: 输入特征矩阵 :param y: 标签向量 :return: 代价函数值 """ m = len(y) h = sigmoid(X @ theta) cost = -(1/m) * (y.T @ np.log(h) + (1 - y).T @ np.log(1 - h)) return cost # 示例数据 X = np.array([[1, 2], [1, 3], [1, 4], [1, 5]]) y = np.array([0, 0, 1, 1]) theta = np.zeros(2) cost = cost_function(theta, X, y) print("代价函数:", cost) ``` 这段代码首先定义了一个 sigmoid 函数用于计算预测概率,然后实现了代价函数的计算逻辑。 --- ### 相关问题 1. 什么是梯度下降法?它是如何利用代价函数进行模型优化的? 2. 在神经网络中,如何选择合适的代价函数? 3. 为什么交叉熵代价函数比二次代价函数更适合用于分类任务? 4. 如何理解代价函数损失函数的关系?
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值