学习笔记: 机器学习经典算法-模型泛化

简介: 机器学习经典算法-个人笔记和学习心得分享

1、过拟合与欠拟合

对于包含噪音的数据集,进行数据拟合的时候,总能找到一条曲线穿过所有样本点,使得模型的预测结果与给定训练集内的样本真实标签完全一致,取得极低的预测误差;但这意味着算法所训练的模型过多的表达了数据之间的噪音关系,称为 过拟合(over fitting)欠拟合(under fitting) 则表明算法所训练的模型不能完整表述数据关系。
则如果模型拟合程度不高,意味着模型没有很好地捕捉到数据特征,从而也不能够很好地用于生产环境。 在多项式回归预测分析中,选择过高或过低的幂来构造特征,就会产生欠拟合和过拟合的问题。

2 模型泛化能力

模型的泛化能力(generalization ability) 指的是训练出来的模型对新样例的预测能力。如果预测效果非常差,称模型的泛化能力弱。一个好的算法模型需要拥有较强的的泛化能力。这也是模型训练和测试的意义需要将原始采样数据拆分出 训练集测试集 来训练和评估模型的泛化能力。

两种不同的算法模型的 模型泛化能力评估 简单的可使用在测试集上的 均方误差 (MSE = $\sum_{i=1}^{m}{(y^{(i)} - \hat {y^{(i)}})^{2}}$)

3 模型准确度与模型复杂度

① 对于训练集,模型的复杂度增加(在多项式回归中意味着参数的增多),模型对于训练集的预测准确率会越来越高。
② 对于测试集,随着模型的复杂度增加,对测试集的预测准确率会逐渐提高,但是当超过一个复杂度阈值之后准去率会转而逐渐降低,经历了一个欠拟合到过拟合的过程。

模型复杂度曲线

4 验证数据集与交叉验证

当使用训练集来训练模型,而仅仅使用测试集来调整模型,这样通过在测试集上的表现来调优的模型很可能出现 针对测试集的过拟合 问题。一个较为可靠的模型创建与测试方法应该通过将原始采样数据分割成 训练集验证数据测试集,通过在使用训练集创建模型,然后使用验证数据集来进行模型的评估和模参调整,得到一个对于验证数据集而言已经处于最优的模型,最后使用 测试集 来衡量通过了验证数据集调整后得到的最终模型的泛化能力;该过程 测试集 数据不参与模型的训练和调参,而是作为真实生产环境中新产生的不可知样例的模拟,最终用作衡量模型在生产环境中的表现能力。

4.1 交叉验证评估法

为了使得模型的训练和评估过程具有足够高的 随机性交叉验证方法 提出分割训练集分成 k 份(k-folds cross validation,简单情况下k取3即可),通过组合这 k 份数据为训练集和验证机,每次训练出$k$个模型,和取得$k$ 个模型的性能评分,最后取这 $k$ 个模型的性能指标均值用作衡量当前超参数下的模型性能,作为进行模型超参数调整的依据。通过取均值的方式,可以有效降低携带极端值的数据集对模型评估上的影响。

4.2 使用Cross Validation 进行模型超参数搜索

import numpy as np
from sklearn.model_selection import cross_val_score
from sklearn.neighbors import KNeighborsClassifier
from sklearn import datasets

### Prepare data
digits = datasets.load_digits()
from sklearn.model_selection import train_test_split
Train_X,Test_X,Train_Y,Test_Y = train_test_split(digits.data,digits.target,test_size= 0.2,random_state=666)


### Use cross_validate_score to Search Best Parameters
best_score = .0
best_parameter = None
for k in range(2,11):
    knn_clf = KNeighborsClassifier(n_neighbors = k)
    cur_score = np.mean(cross_val_score(knn_clf,Train_X,Train_Y,cv = 5))  ### 使用交叉验证得到当前超参数设置下的模型得分; 方法参数cv=5 设置期望每次训练5模型进行评分。
    if cur_score > best_score: best_score ,best_parameter = cur_score , k

print(best_score,best_parameter)

### 最后使用测试集计算模型的最终准确度评分
knn_clf = KNeighborsClassifier(n_neighbors = best_parameter)
knn_clf.fit(Train_X,Train_Y)
knn_clf.score(Test_X,Test_Y)

交叉验证的评估得分单比使用一个训练集和测试集来获得的模型评分要更可靠地反映模型的泛化能力。

4.3 留一法 LOO-CV

k-folds cross validation 方法由于每次需要训练出多个模型,虽然该方法得出的评分结果较可靠,但性能相比整体拖慢了k倍。在$k$ 需要取值非常大的极端情况下,LOO-CV(Leave-One-Out Cross Validation) 提出将训练集分成 m 份,每次将 m-1 份样本用于模型训练,剩下的一份用作模型评估,将所有这些模型结果的指标平均用作衡量当前超参数下模型的准确度。有点即使脱离的随机的影响,最接近模型真正的性能指标。缺点计算量巨大。

5 偏差方差权衡 Bias Variance Trade off

  • 偏差(Bias) $\ \ \ \ \ \ $ 数据点偏离目标中心的程度;
  • 方差(Variance) $\ $数据点整体分布的稀疏程度。

机器学习任务目的是为了训练一个能够基本准确预测一个问题答案的算法模型,抽象理解待解决的问题为靶心,根据数据拟合生成的模型即射在靶子上的标枪,这些模型相对于问题本身就会犯 方差和偏差 两种错误从而不能很好的预测在问题允许误差范围内的答案。

$$\small {\bf {模型误差}} = \small {\bf {模型偏差(Bias)}} + \small {\bf {模型方差(Variance)}} + \small {\bf {不可避免的误差}}$$
模型中 不可避免的误差 成因复杂,多来源于数据采集噪音。
导致 偏差 错误的成因:

  • ① 对问题的前提假设不正确(如非线性数据使用了线性拟合);
  • ② 研究特征与问题本身高度不相关(如通过研究学生的姓名来预测学生成绩);
    在算法层面高偏差主要表现为出现 欠拟合 现象。

方差 错误:主要表现出数据哪怕出现一点点扰动都会较大的影响模型。通常原因就是 模型太复杂化 ,如高阶多项式回归。在算法层面高方差主要表现为出现 过拟合 现象。

5.2 一般ML算法模型与Bias & Var两类错误的关系:

  • 非参数学习 通常属于 高方差算法,因为前提不对数据关系进行任何假设,高度依赖原始数据,对数据分布非常敏感。如kNN算法的判断结果仅取决于其k个邻居的投票,如果这个k个邻居本身就是存在错误测量,就会影响算法的预测结果准确度。

  • 参$\ $数学习 通常属于 高偏差算法 ,这类算法通过参数与特征将问题规约成一个数学模型,对数据具有极强的前提假设,认为这些数据基本上是符合假设模型;如果数据不符合假设的数学模型,那么模型就会出错。如线性回归,对非线性关系的数据应用线性回归分析即产生非常大的偏差错误。

ML算法模型中方差与偏差的矛盾:降低偏差,会提高方差;降低方差,会提高偏差。
模型超参数调整任务就是平衡模型的方差和偏差;较高的偏差 意味着模型过于偏离原问题,较高的方差 意味着模型泛化能力太差。

5.3 降低模型的方差的解决方案

在机器学习算法的误差权衡任务中,最主要处理的是模型的方差错误(由模型复杂度主导),偏差错误主要来源于算法模型的错误选择,这在ML模型构建中通过推理假设还是很容易降低偏差错误的。

  • 降低模型复杂度
  • 减少数据维度;降噪
  • 增加样本数
  • 使用验证集(如调参时选用 Cross_Validation作为评估指标)
  • 模型正则化
目录
相关文章
|
6天前
|
机器学习/深度学习 人工智能 分布式计算
使用PAI+LLaMA Factory 微调 Qwen2-VL 模型,搭建文旅领域知识问答机器人
本次教程介绍了如何使用 PAI 和 LLaMA Factory 框架,基于全参方法微调 Qwen2-VL模型,使其能够进行文旅领域知识问答,同时通过人工测试验证了微调的效果。
|
15天前
|
机器学习/深度学习 算法 数据可视化
机器学习模型中特征贡献度分析:预测贡献与错误贡献
本文将探讨特征重要性与特征有效性之间的关系,并引入两个关键概念:预测贡献度和错误贡献度。
49 3
|
13天前
|
机器学习/深度学习 人工智能 算法
鸟类识别系统Python+卷积神经网络算法+深度学习+人工智能+TensorFlow+ResNet50算法模型+图像识别
鸟类识别系统。本系统采用Python作为主要开发语言,通过使用加利福利亚大学开源的200种鸟类图像作为数据集。使用TensorFlow搭建ResNet50卷积神经网络算法模型,然后进行模型的迭代训练,得到一个识别精度较高的模型,然后在保存为本地的H5格式文件。在使用Django开发Web网页端操作界面,实现用户上传一张鸟类图像,识别其名称。
60 12
鸟类识别系统Python+卷积神经网络算法+深度学习+人工智能+TensorFlow+ResNet50算法模型+图像识别
|
13天前
|
机器学习/深度学习 算法 TensorFlow
交通标志识别系统Python+卷积神经网络算法+深度学习人工智能+TensorFlow模型训练+计算机课设项目+Django网页界面
交通标志识别系统。本系统使用Python作为主要编程语言,在交通标志图像识别功能实现中,基于TensorFlow搭建卷积神经网络算法模型,通过对收集到的58种常见的交通标志图像作为数据集,进行迭代训练最后得到一个识别精度较高的模型文件,然后保存为本地的h5格式文件。再使用Django开发Web网页端操作界面,实现用户上传一张交通标志图片,识别其名称。
43 6
交通标志识别系统Python+卷积神经网络算法+深度学习人工智能+TensorFlow模型训练+计算机课设项目+Django网页界面
|
9天前
|
机器学习/深度学习 数据可视化 JavaScript
探索机器学习模型的可视化技术
【9月更文挑战第23天】在数据科学中,理解和解释机器学习模型的决策过程是至关重要的。本文将介绍几种流行的可视化工具和库,如TensorBoard、D3.js等,帮助读者更好地理解模型内部工作原理及其预测结果。通过实例演示如何使用这些工具进行模型可视化,增强模型的可解释性。
|
14天前
|
机器学习/深度学习 存储 人工智能
文本情感识别分析系统Python+SVM分类算法+机器学习人工智能+计算机毕业设计
使用Python作为开发语言,基于文本数据集(一个积极的xls文本格式和一个消极的xls文本格式文件),使用Word2vec对文本进行处理。通过支持向量机SVM算法训练情绪分类模型。实现对文本消极情感和文本积极情感的识别。并基于Django框架开发网页平台实现对用户的可视化操作和数据存储。
20 0
文本情感识别分析系统Python+SVM分类算法+机器学习人工智能+计算机毕业设计
|
23天前
|
机器学习/深度学习 Python
验证集的划分方法:确保机器学习模型泛化能力的关键
本文详细介绍了机器学习中验证集的作用及其划分方法。验证集主要用于评估模型性能和调整超参数,不同于仅用于最终评估的测试集。文中描述了几种常见的划分方法,包括简单划分、交叉验证、时间序列数据划分及分层抽样划分,并提供了Python示例代码。此外,还强调了在划分数据集时应注意随机性、数据分布和多次实验的重要性。合理划分验证集有助于更准确地评估模型性能并进行有效调优。
|
28天前
|
机器学习/深度学习 数据采集 算法
数据挖掘和机器学习算法
数据挖掘和机器学习算法
|
23天前
|
机器学习/深度学习 人工智能 自然语言处理
机器学习模型之深度神经网络的特点
深度神经网络(Deep Neural Networks, DNNs)是一类机器学习模型,通过多个层级(层)的神经元来模拟人脑的工作方式,从而实现复杂的数据处理和模式识别任务。
32 1
|
15天前
|
机器学习/深度学习 数据采集 算法
机器学习新纪元:用Scikit-learn驾驭Python,精准模型选择全攻略!
在数据爆炸时代,机器学习成为挖掘数据价值的关键技术,而Scikit-learn作为Python中最受欢迎的机器学习库之一,凭借其丰富的算法集、简洁的API和高效性能,引领着机器学习的新纪元。本文通过一个实际案例——识别垃圾邮件,展示了如何使用Scikit-learn进行精准模型选择。从数据预处理、模型训练到交叉验证和性能比较,最后选择最优模型进行部署,详细介绍了每一步的操作方法。通过这个过程,我们不仅可以看到如何利用Scikit-learn的强大功能,还能了解到模型选择与优化的重要性。希望本文能为你的机器学习之旅提供有价值的参考。
17 0
下一篇
无影云桌面