机器学习学习记录

前言:在写本篇文章时,本人已学习过python与pytorch基础,并跑通了简单的YOLOv5模型,补充理论课以巩固学习,理顺思路。(课程来源:吴恩达老师,Coursera)

一、监督学习和无监督学习概念
1.监督学习

监督学习是一种机器学习方法,通过使用标记的训练数据来预测或估计输入和输出之间的关系。在监督学习中,训练数据由输入样本和相应的正确输出组成,算法的目标是学习一个函数,将输入映射到正确的输出。

监督学习基本流程:

  1. 训练数据:监督学习的第一步是准备训练数据集。训练数据集由多个样本组成,每个样本包含一个输入特征向量和一个对应的输出标签。输入特征向量是描述样本的属性或特征的数值表示,输出标签是样本的目标值或类别。常见的数据集准备工具:labelimg和python内的库

  2. 模型表示:在监督学习中,需要选择适当的模型来表示输入和输出之间的关系。模型可以是线性模型、非线性模型、决策树、神经网络等。不同的模型具有不同的表达能力和灵活性,适用于不同类型的问题。

  3. 模型训练:通过使用训练数据集,模型对输入和输出之间的关系进行学习。这通常涉及到选择合适的学习算法和优化方法来调整模型的参数,以最小化预测输出与真实输出之间的差异。学习算法的选择取决于模型类型和问题的性质。

  4. 模型评估:在训练完成后,需要对模型进行评估以衡量其性能和泛化能力。这通常涉及将未见过的测试数据输入到训练好的模型中,然后比较模型的预测输出与真实输出之间的差异。常用的评估指标包括准确率、精确度、召回率、F1分数等。

  5. 模型应用:一旦模型通过评估,可以将其应用于新的未见过的数据,进行预测或估计。模型的应用可以是分类任务,将新的输入样本分为不同的类别,也可以是回归任务,预测连续值输出。

2.无监督学习

无监督学习是一种机器学习方法,它从无标签的训练数据中学习模型,而无需事先给定预期的输出。与监督学习不同,无监督学习的目标是通过发现数据内部的结构、模式或隐藏的关联性,来揭示数据的潜在特征和关系。(监督学习的目标是通过标记的训练数据来构建预测模型,使其能够对新的未标记数据进行准确的预测。无监督学习的目标是从无标签的训练数据中发现数据内部的结构、模式或关联性。)

无监督学习流程

  1. 数据收集和准备: 收集与任务相关的训练数据,并将其分为输入特征和输出标签。确保数据的质量和准确性,进行数据清洗和预处理操作,如去除噪声、处理缺失值、标准化特征等。相比于监督学习,其准备数据集工作量相对较少

  2. 特征选择和提取: 对输入特征进行选择和提取,以减少特征维度、去除冗余或无关特征,并提取更有信息量的特征表示。可以使用统计方法、领域知识或特征工程技术来完成这一步骤。

  3. 模型选择和训练: 根据任务的性质和数据的特点,选择适合的机器学习算法和模型。常见的监督学习算法包括决策树、支持向量机、逻辑回归、神经网络等。将训练数据输入到选定的模型中,通过学习训练数据中的模式和关系来调整模型参数,使其能够对输入特征进行准确的预测。

  4. 模型评估: 使用评估指标来评估训练得到的模型的性能和准确度。常见的评估指标包括准确率、精确率、召回率、F1分数等,根据任务的需求选择最适合的指标。可以使用交叉验证、留出集或其他评估方法来对模型进行评估。(最常见的也就是新闻收集等聚类问题)

  5. 模型调优和验证: 根据评估结果,对模型进行调优和优化。可以通过调整模型参数、尝试不同的特征选择方法、增加数据量或使用集成学习等方法来改进模型的性能。使用独立的验证集或测试集对调优后的模型进行验证,确保模型的泛化能力和预测能力。

  6. 模型应用和部署: 在完成模型训练和验证后,可以将模型应用于新的未标记数据进行预测。将模型部署到实际应用中,可以是批量处理或实时预测,根据具体需求进行调整和优化。

  7. 监控和更新: 监控模型在实际环境中的性能和表现,收集反馈数据,并根据需要对模型进行更新和改进。模型的性能可能随时间和数据的变化而变化,需要定期监控和维护。

二、线性回归模型

线性回归是一种用于建立输入特征与连续数值型输出变量之间线性关系的回归模型。它是回归分析中最简单、最常用的模型之一。线性回归模型通过拟合训练数据中的线性函数,可以进行预测和推断。其一般形式为:

y = w0 + w1*x1 + w2*x2 + ... + wn*xn

其中,y 是输出变量,w0, w1, w2, ..., wn 是模型的参数,表示各个特征的权重,x1, x2, ..., xn 是输入特征。

线性回归模型的关键假设是,输出变量 y 与输入特征 x1, x2, ..., xn 之间存在线性关系。模型的目标是通过调整参数 w0, w1, w2, ..., wn 来最小化预测值与实际观测值之间的误差。

线性回归模型的常见优化算法:最小二乘法、梯度下降

线性回归模型优缺点:

优点

  • 简单而直观:线性回归模型易于理解和解释,模型的参数具有直观的含义。
  • 计算效率高:线性回归模型的训练和预测速度通常很快。
  • 可解释性强:线性回归模型可以解释各个特征对输出变量的影响程度。

缺点 

  • 线性假设:线性回归模型假设输入特征与输出变量之间的关系是线性的,无法捕捉非线性关系。
  • 异常值敏感:线性回归模型对于异常值比较敏感,可能会对模型的拟合产生较大影响。
  • 特征相关性:线性回归模型对于输入特征之间的高度相关性比较敏感,可能会导致多重共线性问题。

输入与输出间的函数形式

 在线性回归模型中,选择输入与输出之间的函数形式是很关键的一步。通常,可以采用以下几种常见的函数形式来建立线性回归模型:

1.多元线性回归:当有多个输入特征时,可以使用多元线性回归模型。

2.多项式回归: 当输入特征与输出变量之间的关系不是简单的线性关系时,可以考虑使用多项式回归模型。这个模型通过将输入特征的多项式项作为新的特征,将问题转化为多元线性回归问题。例如,可以将一个输入特征 x 的二次项、三次项等添加到模型中。

3.对数或指数回归: 当输入特征与输出变量之间存在指数或对数关系时,可以尝试使用对数回归或指数回归模型。这些模型通过对输入特征或输出变量进行对数或指数变换,将问题转化为线性回归问题。

三、代价函数

说明该函数前,先给出一段GPT对代价(cost)函数和损失(lost)函数的说明,必须了解,这两函数有关联(都是为了预测更为符合实际),但是是不同的东西:

代价函数(Cost Function)是指在整个训练集上计算得到的误差函数,用于衡量模型预测值与训练集中所有实际观测值之间的差异。损失函数(Loss Function)是指在单个样本或样本批次上计算得到的误差函数,用于衡量模型对单个样本或样本批次的预测与实际观测值之间的差异。

在训练过程中,代价函数通常是基于损失函数的平均值或总和。对于训练数据集中的每个样本或样本批次,计算损失函数的值,然后将这些值进行平均或求和,得到代价函数的值。通过最小化代价函数来调整模型的参数,进而使模型更好地拟合整个训练数据集。

总结来说,代价函数是基于整个训练集的误差函数,用于衡量模型的整体性能,而损失函数是基于单个样本或样本批次的误差函数,用于指导模型参数的更新。在实际应用中,这两个概念通常是相互关联的,代价函数的选择和优化算法的使用都受到损失函数的影响。

在不同的问题中,代价函数的选择倾向也不同,下面举几个常见的代价函数。因本文主要是为了概念理解以支持实际操作,故具体函数看文档去。

回归问题中:

  1. 均方误差(Mean Squared Error, MSE): MSE是最常用的代价函数之一,它计算预测值与实际观测值之间差的平方,并求取平均值或总和。MSE可以通过梯度下降等优化算法最小化。

  2. 均方根误差(Root Mean Squared Error, RMSE): RMSE是MSE的平方根,用于计算预测值与实际观测值之间的平均差异。与MSE相比,RMSE的量纲与原始数据的量纲一致,更容易理解。

  3. 平均绝对误差(Mean Absolute Error, MAE): MAE计算预测值与实际观测值之间的绝对差并求取平均值或总和。MAE对异常值不敏感,但在优化过程中可能不如MSE平滑。

分类问题中:

  1. 交叉熵代价函数(Cross-Entropy): 交叉熵是用于衡量分类模型的预测结果与实际标签之间的差异的代价函数。它在逻辑回归和神经网络等分类算法中广泛使用。交叉熵代价函数可以通过梯度下降等优化算法最小化。

  2. 对数损失(Log Loss): 对数损失也是用于衡量分类模型的预测结果与实际标签之间的差异的常见代价函数。对数损失通常用于逻辑回归等二分类问题。

 间章:最优化方法

四、梯度下降算法

梯度下降概念

梯度下降(Gradient Descent)是一种常用的最优化算法,用于求解无约束优化问题中的最小化目标函数。

在梯度下降算法中,模型尝试通过迭代的方式逐步调整自变量的值,以使目标函数逐渐接近最小值。梯度下降的核心思想是利用目标函数的梯度信息来指导搜索方向和步长。

梯度下降优化的基本步骤:(这部分可在代码中实践,学完梯度回来补充)

  1. 初始化参数: 首先,选择一个初始的自变量值作为起点。

  2. 计算梯度: 在当前的自变量值处,计算目标函数(通常便是代价函数或者损失函数)关于自变量的梯度。梯度向量的每个分量表示了目标函数在相应自变量维度上的变化率。

  3. 更新自变量: 根据梯度信息和学习率(或称为步长),更新自变量的值。学习率决定了每次迭代中自变量更新的幅度。一般来说,较小的学习率可以使得算法更稳定,但可能需要更多的迭代次数;较大的学习率可以加快收敛速度,但可能会导致震荡或错过最优解。

  4. 重复迭代: 重复执行步骤 2 和步骤 3,直到满足停止准则。停止准则可以是达到最大迭代次数、目标函数收敛到某个阈值或梯度接近于零等。

梯度下降在寻找最小值是不一定找到的是“全局最小值”,可能卡在“局部最小值”。如果初始点位于全局最小值附近,梯度下降算法可能收敛到全局最小值。然而,如果初始点位于局部最小值附近,算法可能会陷入该局部最小值并停止迭代,而无法达到全局最小值。故有几种解决的尝试性方法: 

  1. 多次运行: 运行梯度下降算法多次,每次使用不同的初始点。通过多次尝试,增加找到全局最小值的机会。

  2. 改进的算法: 使用改进的优化算法,如随机梯度下降(Stochastic Gradient Descent)、动量梯度下降(Momentum Gradient Descent)、Adam 等。这些算法结合了梯度下降和其他技术,可以更好地处理局部最小值问题,加速收敛并获得更好的结果。

  3. 预训练和初始化策略: 在某些机器学习任务中,可以使用预训练的模型或使用一些启发式的初始化策略,以更好地初始化模型参数,从而使梯度下降更有可能收敛到全局最小值。

梯度下降中的重要概念:

  1. 目标函数(Objective Function): 目标函数是机器学习问题中需要最小化或最大化的函数。在梯度下降中,我们将目标函数表示为关于模型参数的函数。

  2. 梯度(Gradient): 梯度是目标函数在某一点的导数或偏导数。它指示了目标函数在该点处变化最快的方向。梯度是一个向量,包含了目标函数对每个模型参数的偏导数。在梯度下降中,我们使用梯度来指导参数的更新方向。

  3. 学习率(Learning Rate): 学习率是梯度下降算法中的一个重要超参数,用于控制参数更新的步长。学习率决定了每次迭代中参数更新的幅度。如果学习率过小,收敛速度可能很慢;如果学习率过大,可能会导致错过最优解或不稳定的收敛。学习率需要根据具体问题进行调整。

  4. 批量梯度下降(Batch Gradient Descent): 批量梯度下降是梯度下降的一种形式,它在每次迭代中使用训练集中的所有样本来计算梯度和更新参数。这意味着每次迭代的计算量较大,但可以更稳定地朝着最优解的方向前进。

  5. 随机梯度下降(Stochastic Gradient Descent): 随机梯度下降是梯度下降的另一种形式,它在每次迭代中只使用一个样本来计算梯度和更新参数。相比批量梯度下降,随机梯度下降的计算量较小,但更新方向可能更不稳定,导致参数在最优解附近波动。

  6. 小批量梯度下降(Mini-batch Gradient Descent): 小批量梯度下降是批量梯度下降和随机梯度下降的折中方法。它在每次迭代中使用一小部分(称为小批量)的样本来计算梯度和更新参数。小批量梯度下降通常可以兼顾计算效率和参数更新的稳定性。

五、多元线性回归模型

多元线性回归是机器学习中常用的回归算法之一,用于建立多个自变量与因变量之间的线性关系模型。它是线性回归的一种扩展,适用于自变量包含多个特征的情况。

在多元线性回归中,我们假设自变量与因变量之间存在一个线性关系,可以用以下的数学表达式来表示:

y = β0 + β1x1 + β2x2 + ... + βnxn + ε

其中,y表示因变量(待预测的目标变量),x1, x2, ..., xn表示自变量(特征变量),β0, β1, β2, ..., βn表示模型的系数(或权重),ε表示误差项(即不能被模型解释的随机误差)。

多元线性回归的目标是通过拟合训练数据,找到最优的系数β0, β1, β2, ..., βn,使得模型预测的结果与实际观测值之间的误差最小化。常用的方法是最小二乘法,即通过最小化残差平方和来估计最优的系数。多元的计算较为复杂,因此引入了数据的矢量化。

在进行多元线性回归时,需要考虑以下几个重要的前提和假设:

1. 线性关系假设:假设自变量与因变量之间存在线性关系。如果数据呈现非线性关系,可能需要进行特征转换或使用其他非线性回归模型。

2. 独立性假设:假设自变量之间相互独立,即不存在多重共线性问题。多重共线性可能导致模型不稳定,系数估计不准确。

3. 误差项假设 :假设误差项(ε)满足正态分布、均值为0、方差恒定的条件。这些假设有助于对模型进行统计推断和评估。

六、数据矢量化

在机器学习中,数据向量化是将非数值型的数据转换为数值型向量的过程。数据向量化的目的是为了能够将非数值型的数据输入到机器学习算法中进行分析和建模。如自然语言,像素值或声音波形等。

import torch

# 创建两个随机矩阵
A = torch.rand(1000, 1000)
B = torch.rand(1000, 1000)

# 矢量化的计算
result = torch.matmul(A, B)

# 打印结果
print(result)

将数据矢量化在“计算量”上其实没什么变化,但其将一个个的单线计算变为了并行计算,因此提高了计算速度。

六点五、将数据矢量化的多元线性回归模型

以下为一个将数据矢量化以进行计算的多元线性回归实例:

import numpy as np

# 生成随机的训练数据
np.random.seed(0)
X1 = np.random.rand(100, 1)
X2 = np.random.rand(100, 1)
y = 3 * X1 + 4 * X2 + 5 + np.random.randn(100, 1) * 0.1

# 将特征矩阵X进行矢量化
X = np.concatenate((np.ones((100, 1)), X1, X2), axis=1)

# 初始化模型参数
theta = np.random.randn(3, 1)

# 设置学习率和迭代次数
learning_rate = 0.1
num_iterations = 1000

# 执行梯度下降算法
for iteration in range(num_iterations):
    # 计算预测值
    y_pred = np.dot(X, theta)
    
    # 计算损失函数的梯度
    gradients = 2 / len(X) * np.dot(X.T, y_pred - y)
    
    # 更新模型参数
    theta = theta - learning_rate * gradients

# 打印最终的模型参数
print("Intercept:", theta[0])
print("Coefficient 1:", theta[1])
print("Coefficient 2:", theta[2])

对于多元线性回归,课程中提到还有一个正规方程法,但是对于特征数量较少的模型似乎表现欠佳

七、特征缩放

特征缩放(Feature Scaling)是机器学习中常用的一种数据预处理技术,用于将不同特征之间的数值范围调整到相似的尺度上,以便更好地训练和优化模型。

特征缩放的目的主要有两个:
1. 保证不同特征的数值范围相似,避免某些特征对模型训练的影响过大。例如,某个特征的数值范围很大,而其他特征的数值范围很小,那么在模型训练过程中,可能会更多地依赖于数值范围较大的特征,而忽略了其他特征的贡献。(因为有的数值变化极大的特征不一定是“重要的特征”)
2. 提高优化算法的收敛速度。某些优化算法(如梯度下降)在处理具有不同数值范围的特征时,可能需要更多的迭代次数才能收敛到最优解。通过特征缩放,可以使不同特征的梯度变化范围相似,加快优化算法的收敛速度。

常用的特征缩放方法包括:
1. 标准化(Standardization):将特征缩放为均值为0,标准差为1的标准正态分布。通过减去特征的均值,然后除以标准差来实现。标准化使得特征的取值范围在较小的区间内,适用于大多数机器学习算法。
2. 归一化(Normalization):将特征缩放到0到1的范围。通过减去特征的最小值,然后除以最大值和最小值之差来实现。归一化保留了特征的原始分布形状,适用于某些需要保留特征原始比例关系的算法。

这前两个方法在pytorch的学习中遇到了很多次,或许算是最常用的两种?
3. 范围缩放(Rescaling):将特征缩放到指定的数值范围。通过线性变换将特征缩放到指定的最小值和最大值之间。

选择适当的特征缩放方法取决于数据的特点和机器学习算法的要求。在实际应用中,特征缩放通常是在训练数据集上进行。

八、学习率选择

正如梯度下降中所见,这玩意对模型训练的效率影响很大,选择和改动上也有许多讲究,此处仅举例课程中提到的选择方式:

  1. 固定学习率:最简单的方法是选择一个固定的学习率,并在整个训练过程中保持不变。这种策略适用于数据集相对稳定且模型较简单的情况。

  2. 学习率衰减:学习率衰减是一种逐渐减小学习率的策略。可以按照固定的衰减规则(如每个固定的迭代步骤衰减一次)或基于模型性能(如验证集上的损失)来调整学习率。学习率衰减可以帮助模型在训练初期更快地收敛,然后逐渐减小步长以稳定训练。

  3. 自适应学习率方法:自适应学习率方法根据模型的表现和参数更新的情况自动调整学习率。其中,一种常见的方法是使用自适应的优化算法,如 AdaGrad、RMSprop、Adam 等。这些方法会根据每个参数的梯度和历史梯度信息来自适应地调整学习率。

九、特征工程 

特征工程是指在机器学习任务中对原始数据进行处理和转换的过程,目的是为了更好地表示数据,提取有用的信息,并为机器学习算法提供更有意义的输入。其目标是改善模型的性能、提高预测的准确性和泛化能力。以下为常见的特征工程的任务

1. 数据清洗和预处理:这是处理原始数据中缺失值、异常值、重复值等问题的过程。

2. 特征选择和提取:特征选择是从原始特征集中选择最相关或最有信息量的特征。特征提取则是通过转换和组合原始特征,创建新的特征来捕捉数据中的模式和关系。

3. 特征缩放和归一化:对于具有不同尺度的特征,特征缩放可以确保它们具有相似的范围,以避免某些特征对模型的影响过大。常见的特征缩放方法包括标准化和归一化。

4. 特征编码:将非数值特征转换为数值表示,以便机器学习算法能够处理。常见的特征编码方法包括独热编码和标签编码。

通过进行适当的特征工程,可以改善模型的性能、降低过拟合风险、提高训练效率,而且利于我们对问题的理解(到底在计算什么)

十、多项式回归

此处可另开一文,较为复杂,暂时只学概念。

多项式回归是线性回归的一种扩展形式,用于建模非线性关系。它通过引入多项式特征来扩展原始特征,从而能够拟合更复杂的数据模式。

在多项式回归中,假设有一个包含n个特征的数据集,我们可以通过将原始特征进行组合和幂次扩展来生成多项式特征。例如,对于一个二次多项式回归模型,我们可以将特征x扩展为x、x^2,并添加到原始特征集中。这样,我们将得到一个包含原始特征和多项式特征的新特征集,然后可以使用线性回归模型来拟合这些特征。

多项式回归的优点是可以对非线性关系建模,使模型能够更好地适应数据。然而,需要注意的是,当多项式次数较高时,可能会导致模型过拟合,对新数据的预测性能下降。

在实际应用当中,多项式回归可能会引入更多的特征维度,从而增加模型的复杂度和计算成本。因此,在实际使用中,需要根据问题的复杂度和可用的数据量来权衡选择多项式次数。

十一、分类问题(二分类)

因此课程正详细介绍逻辑回归的数学原理,暂且不表

十一点五、逻辑回归

逻辑回归是一种常用的机器学习算法,属于监督学习的一种。它通常用于处理二分类问题。它通过将特征的线性组合传递给逻辑函数(sigmoid函数),将输入值映射到0和1之间的概率输出,从而进行分类预测。

数学原理可以去看逻辑回归数学详解,以下给出简化的理解

假设我们有一个二分类问题,其中输入特征表示为向量x,对应的类别为y,其中y的取值为0或1。逻辑回归的目标是通过学习一个函数h(x),将输入特征映射到一个概率值,表示样本属于类别1的概率。逻辑回归使用的是逻辑函数(也称为Sigmoid函数)作为假设函数,它的形式为:

h(x) = \frac{1}{1+e^{-z}}

我靠,这个公式太难打了

其中,z是一个线性函数:

z = w^T * x + b

在这里,w是权重向量,x是输入特征向量,b是偏置项。

逻辑回归的目标是通过调整权重向量w和偏置项b的值,使得模型的预测结果h(x)尽可能接近真实的类别标签y。而为了进行模型训练,我们需要定义一个损失函数来度量模型的预测值与真实值之间的差异。对于逻辑回归,常用的损失函数是交叉熵损失函数:

J(w, b) = -1/m * Σ(y * log(h(x)) + (1-y) * log(1-h(x)))

其中,m是训练样本的数量,y是真实的类别标签。

按机器学习基本流程,该损失函数被用来参与梯度下降。

一旦训练完成,我们可以使用学习得到的权重向量w和偏置项b,对新的输入样本进行预测。通过计算h(x),我们可以将输入特征映射到一个概率值,然后根据阈值来决定样本的类别。

总结起来,逻辑回归使用Sigmoid函数作为假设函数,通过最小化交叉熵损失函数来训练模型,以预测二分类问题中的类别概率。

十二、梯度下降实现

这里理论不多,全是数学实现,也是学完偏导数和梯度再来

十三、过拟合问题与解决方式

欠拟合(Underfitting):当模型无法很好地拟合训练数据,无法捕捉到数据中的关键特征和模式时,就发生了欠拟合。这种情况下,模型的表现较差,无法对数据进行准确的预测。一般是因为模型太简单了,应对不了复杂数据。

过拟合(Overfitting):当模型在训练数据上表现出色,但在新的未见过的数据上表现较差时,就发生了过拟合。过拟合的模型过于复杂,过度地记忆了训练数据的噪声和随机变动,导致在新数据上的泛化能力下降。过拟合问题常常出现在模型参数过多或数据量不足的情况下。

拟合(Good Fit):模型能够很好地拟合训练数据,捕捉到数据中的关键特征和模式,并且在新的未见过的数据上能够有良好的预测能力时,即泛化能力也较强时就称为拟合。刚刚好,不多不少,好吃极了。

解决方式:

①增加数据量,这种方法不管是对于哪种情况都有助于模型改善;

②对于过拟合,使用正则化技术对参数进行约束,平衡每个数据的权重;

③对于过拟合,使用更好的特征选择方法,减少噪声和不相关的特征对模型的影响;

④对于欠拟合,使用更复杂的模型,增加模型的容量;

⑤对于欠拟合,增加特征的数量或引入更复杂的特征;

⑥进行交叉验证或者多次验证等,便于观察与纠错。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值