计算线性回归中的代价函数(Cost Function)

news/2024/11/8 17:19:02 标签: 机器学习, 矩阵, 线性代数

特征矩阵

特征矩阵是一个二维数组或矩阵,用于表示数据集中所有样本的特征信息。在机器学习中,特征矩阵是用于模型训练的数据输入,它由所有样本的特征值组成。

解释

假设你有一个数据集,描述房屋的价格与房屋的面积和房间数之间的关系。每个房屋的信息可以用两个特征来描述:面积和房间数。那么,特征矩阵就是用这些特征来表示多个房屋样本的矩阵

特征矩阵的形式

通常,特征矩阵记作 ( X ),其结构如下:

  • (row):每一行表示一个样本(或数据点)。
  • (column):每一列表示一个特征(或变量)。

如果我们有 ( m ) 个样本和 ( n ) 个特征,那么特征矩阵 ( X ) 的大小为 ( m × n ) (m \times n) (m×n)

示例

假设我们有 3 个房屋样本,每个房屋用两个特征描述:

  • 房屋 1:面积为 120 平方米,房间数为 3
  • 房屋 2:面积为 150 平方米,房间数为 4
  • 房屋 3:面积为 80 平方米,房间数为 2

特征矩阵 ( X ) 可以表示为:
X = [ 120 3 150 4 80 2 ] X = \begin{bmatrix} 120 & 3 \\ 150 & 4 \\ 80 & 2 \end{bmatrix} X= 12015080342

扩展:添加截距项

在某些线性回归模型中,我们可能会为特征矩阵添加一列全为 1 的数值,以表示截距项(bias)。这样可以用一个参数 θ 0 \theta_0 θ0来表示模型的截距。例如,上面的特征矩阵添加一列全为 1 的数值后变成:
X = [ 1 120 3 1 150 4 1 80 2 ] X = \begin{bmatrix} 1 & 120 & 3 \\ 1 & 150 & 4 \\ 1 & 80 & 2 \end{bmatrix} X= 11112015080342

总结

  • 特征矩阵包含了所有样本的所有特征信息,是模型输入数据的核心部分。
  • 每一行表示一个样本,每一列表示一个特征。
  • 它用于描述数据,并为机器学习模型提供结构化的数据格式。
    截距项(也叫 偏置项bias)是线性模型中的一个常数项,用于调整模型的输出,使模型能够更好地拟合数据。

截距项

截距项的作用

在一个简单的线性回归模型中,模型的公式通常写作:
y = θ 0 + θ 1 x y = \theta_0 + \theta_1 x y=θ0+θ1x

  • y y y 是预测的输出。
  • x x x 是输入特征。
  • θ 1 \theta_1 θ1 是特征的权重或系数,表示特征 x 对 y 的影响。
  • θ 0 \theta_0 θ0截距项(bias),它表示当 x = 0时y 的预测值。

图形上的解释

从几何的角度来看,截距项是指直线与 ( y )-轴的交点。它决定了当输入特征值为零时,模型的输出是多少。通过调整截距项,模型可以更准确地拟合数据。例如:

  • 如果没有截距项(即 θ 0 = 0 \theta_0 = 0 θ0=0),直线必须通过原点(0, 0),这可能会导致模型无法很好地描述数据关系。
  • 加入截距项后,直线可以上移或下移,提供更好的拟合。

例子

  1. 如果你有一个线性模型 ( y = 3x + 5 ),其中 5 就是截距项。这表示当 ( x = 0 ) 时, ( y ) 的值是 5。
  2. 在实际数据中,很多关系并不直接通过原点,因此截距项在调整模型中非常重要。

为什么需要截距项?

截距项的存在可以帮助模型更灵活地拟合数据。没有截距项时,模型的预测会强制通过原点,可能导致较大的预测误差。通过引入截距项,模型可以更自由地调整,适应数据的整体趋势。

多特征的情形

在多元线性回归中,模型可以写作:
y = θ 0 + θ 1 x 1 + θ 2 x 2 + … + θ n x n y = \theta_0 + \theta_1 x_1 + \theta_2 x_2 + \ldots + \theta_n x_n y=θ0+θ1x1+θ2x2++θnxn

  • θ 0 \theta_0 θ0 仍然是截距项,用来调整整体的预测值水平。
  • θ 1 , θ 2 , … , θ n \theta_1, \theta_2, \ldots, \theta_n θ1,θ2,,θn 是对应每个特征的系数。

总结

  • 截距项(bias)帮助模型调整输出,使其更好地拟合数据。
  • 它允许模型在输入特征为零时,仍然可以预测非零的输出值。
  • 在许多机器学习模型中,截距项是一个重要的参数,用来优化模型性能。

computeCost

这个 computeCost 函数用于计算线性回归中的代价函数(Cost Function),其目的是衡量预测值与实际值之间的差距。

参数说明

  • X: 输入特征矩阵,大小为 (m, n),其中 m 是样本数,n 是特征数。X 通常包含所有样本的特征,可能还包括一列全是 1 的常数列,用于表示截距项(bias)。
  • y: 真实的输出(目标值)向量,大小为 (m, 1),表示每个样本对应的实际值。
  • theta: 参数向量,大小为 (1, n),表示线性回归模型的参数(权重和截距项)。

解释代码

def computeCost(X, y, theta):
    # 计算预测值与实际值之间的误差
    inner = np.power(((X * theta.T) - y), 2)  # 计算误差的平方
    
    # 计算代价函数
    return np.sum(inner) / (2 * len(X))  # 取误差平方和的一半,并除以样本数

具体解释

  1. X * theta.T: 计算预测值。X 是特征矩阵theta.T 是参数向量的转置(如果 theta(1, n),它的转置会变成 (n, 1)),所以 X * theta.T 得到一个大小为 (m, 1) 的预测值向量。
  2. (X * theta.T) - y: 计算预测值与实际值之间的误差,大小仍然是 (m, 1)
  3. np.power(..., 2): 将每个误差的平方计算出来,得到误差平方向量。
  4. np.sum(inner): 计算所有误差平方的总和。
  5. (2 * len(X)): 计算样本数量的两倍,用于归一化误差平方和,使代价函数能够平均衡量每个样本的误差。
  6. np.sum(inner) / (2 * len(X)): 最后返回代价函数值,它表示模型当前参数 theta 下预测的误差大小。

代价函数的作用

代价函数用于评估模型预测的准确性,数值越小表示模型预测与实际值之间的差距越小,反之,代价函数值越大,模型预测效果越差。优化算法(如梯度下降)使用这个代价函数来调整 theta,以最小化预测误差。


http://www.niftyadmin.cn/n/5744198.html

相关文章

技术总结(二十二)

一、Redis缓存更新 在更新Redis缓存时,通常有两种策略: 更新缓存(Cache-Aside Pattern):先从缓存获取数据,如果缓存中没有数据或数据已经过期,则从数据库中获取最新数据,并更新到缓…

【RabbitMQ】04-发送者可靠性

1. 生产者重试机制 spring:rabbitmq:connection-timeout: 1s # 设置MQ的连接超时时间template:retry:enabled: true # 开启超时重试机制initial-interval: 1000ms # 失败后的初始等待时间multiplier: 1 # 失败后下次的等待时长倍数,下次等待时长 initial-interval…

数据结构:七种排序及总结

文章目录 排序一插入排序1直接插入排序2希尔排序二选择排序3直接选择排序4堆排序三 交换排序5冒泡排序6快速排序四 归并排序7归并排序源码 排序 我们数据结构常见的排序有四大种,四大种又分为七小种,如图所示 排序:所谓排序,就是…

YOLOv6-4.0部分代码阅读笔记-figure_iou.py

figure_iou.py yolov6\utils\figure_iou.py 目录 figure_iou.py 1.所需的库和模块 2.class IOUloss: 3.def pairwise_bbox_iou(box1, box2, box_formatxywh): 1.所需的库和模块 #!/usr/bin/env python3 # -*- coding:utf-8 -*- import math import torch2.class IOUlo…

【热门主题】000027 React:前端框架的强大力量

前言:哈喽,大家好,今天给大家分享一篇文章!并提供具体代码帮助大家深入理解,彻底掌握!创作不易,如果能帮助到大家或者给大家一些灵感和启发,欢迎收藏关注哦 💕 目录 【热…

◇【论文_20160610】Generative Adversarial Imitation Learning 【附录 A】

文章目录 A 证明Section 3 的证明引理 3.1 证明命题 3.2 的证明 A.2 Section 5 的证明命题 A.1推论 A.1.1引理 A.1 因果熵的策略梯度公式 A 证明 Section 3 的证明 引理 3.1 证明 Proof of Lemma 3.1. 首先,我们证明 H ˉ \bar H Hˉ 是严格凹的。 令 ρ \rho ρ…

阿里云多端低代码开发平台魔笔使用测评

文章目录 前言一、魔笔是什么?二、测评1.基本组件布局2.前端逻辑3.事件绑定 总结 前言 最近对于低代码平台挺感兴趣的,了解到很多云服务,国内有很多的这种平台,最近阿里云推出了他们的多端低代码开发平台魔笔,目前还在…

qt QTextCursor详解

1、概述 QTextCursor是Qt框架中用于在QTextDocument或QTextEdit中编辑和导航文本的类。它提供了对文本选择和编辑操作的低级控制,允许插入、删除、修改文本以及改变文本的格式。QTextCursor可以看作是一个在文本中移动的插入点或选择区域,通过它可以执行…