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

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

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作为评估指标)
  • 模型正则化
目录
相关文章
|
14天前
|
算法
基于模糊PI控制算法的龙格库塔CSTR模型控制系统simulink建模与仿真
本项目基于MATLAB2022a,采用模糊PI控制算法结合龙格-库塔方法,对CSTR模型进行Simulink建模与仿真。通过模糊控制处理误差及变化率,实现精确控制。核心在于将模糊逻辑与经典数值方法融合,提升系统性能。
|
14天前
|
存储 算法
基于HMM隐马尔可夫模型的金融数据预测算法matlab仿真
本项目基于HMM模型实现金融数据预测,包括模型训练与预测两部分。在MATLAB2022A上运行,通过计算状态转移和观测概率预测未来值,并绘制了预测值、真实值及预测误差的对比图。HMM模型适用于金融市场的时间序列分析,能够有效捕捉隐藏状态及其转换规律,为金融预测提供有力工具。
|
1月前
|
机器学习/深度学习 人工智能 算法
【手写数字识别】Python+深度学习+机器学习+人工智能+TensorFlow+算法模型
手写数字识别系统,使用Python作为主要开发语言,基于深度学习TensorFlow框架,搭建卷积神经网络算法。并通过对数据集进行训练,最后得到一个识别精度较高的模型。并基于Flask框架,开发网页端操作平台,实现用户上传一张图片识别其名称。
91 0
【手写数字识别】Python+深度学习+机器学习+人工智能+TensorFlow+算法模型
|
1月前
|
机器学习/深度学习 人工智能 算法
基于深度学习的【蔬菜识别】系统实现~Python+人工智能+TensorFlow+算法模型
蔬菜识别系统,本系统使用Python作为主要编程语言,通过收集了8种常见的蔬菜图像数据集('土豆', '大白菜', '大葱', '莲藕', '菠菜', '西红柿', '韭菜', '黄瓜'),然后基于TensorFlow搭建卷积神经网络算法模型,通过多轮迭代训练最后得到一个识别精度较高的模型文件。在使用Django开发web网页端操作界面,实现用户上传一张蔬菜图片识别其名称。
94 0
基于深度学习的【蔬菜识别】系统实现~Python+人工智能+TensorFlow+算法模型
|
1月前
|
机器学习/深度学习 人工智能 算法
青否数字人声音克隆算法升级,16个超真实直播声音模型免费送!
青否数字人的声音克隆算法全面升级,能够完美克隆真人的音调、语速、情感和呼吸。提供16种超真实的直播声音模型,支持3大AI直播类型和6大核心AIGC技术,60秒快速开播,助力商家轻松赚钱。AI讲品、互动和售卖功能强大,支持多平台直播,确保每场直播话术不重复,智能互动和真实感十足。新手小白也能轻松上手,有效规避违规风险。
|
1月前
|
分布式计算 Java 开发工具
阿里云MaxCompute-XGBoost on Spark 极限梯度提升算法的分布式训练与模型持久化oss的实现与代码浅析
本文介绍了XGBoost在MaxCompute+OSS架构下模型持久化遇到的问题及其解决方案。首先简要介绍了XGBoost的特点和应用场景,随后详细描述了客户在将XGBoost on Spark任务从HDFS迁移到OSS时遇到的异常情况。通过分析异常堆栈和源代码,发现使用的`nativeBooster.saveModel`方法不支持OSS路径,而使用`write.overwrite().save`方法则能成功保存模型。最后提供了完整的Scala代码示例、Maven配置和提交命令,帮助用户顺利迁移模型存储路径。
|
1月前
|
机器学习/深度学习 人工智能 算法
【车辆车型识别】Python+卷积神经网络算法+深度学习+人工智能+TensorFlow+算法模型
车辆车型识别,使用Python作为主要编程语言,通过收集多种车辆车型图像数据集,然后基于TensorFlow搭建卷积网络算法模型,并对数据集进行训练,最后得到一个识别精度较高的模型文件。再基于Django搭建web网页端操作界面,实现用户上传一张车辆图片识别其类型。
86 0
【车辆车型识别】Python+卷积神经网络算法+深度学习+人工智能+TensorFlow+算法模型
|
3月前
|
机器学习/深度学习 人工智能 算法
鸟类识别系统Python+卷积神经网络算法+深度学习+人工智能+TensorFlow+ResNet50算法模型+图像识别
鸟类识别系统。本系统采用Python作为主要开发语言,通过使用加利福利亚大学开源的200种鸟类图像作为数据集。使用TensorFlow搭建ResNet50卷积神经网络算法模型,然后进行模型的迭代训练,得到一个识别精度较高的模型,然后在保存为本地的H5格式文件。在使用Django开发Web网页端操作界面,实现用户上传一张鸟类图像,识别其名称。
122 12
鸟类识别系统Python+卷积神经网络算法+深度学习+人工智能+TensorFlow+ResNet50算法模型+图像识别
|
2月前
|
机器学习/深度学习 数据采集 算法
如何在一夜之间成为模型微调大师?——从零开始的深度学习修炼之旅,让你的算法功力飙升!
【10月更文挑战第5天】在机器学习领域,预训练模型具有强大的泛化能力,但直接使用可能效果不佳,尤其在特定任务上。此时,模型微调显得尤为重要。本文通过图像分类任务,详细介绍如何利用PyTorch对ResNet-50模型进行微调,包括环境搭建、数据预处理、模型加载与训练等步骤,并提供完整Python代码。通过调整超参数和采用早停策略等技巧,可进一步优化模型性能。适合初学者快速上手模型微调。
128 8
|
2月前
|
机器学习/深度学习 算法 搜索推荐
django调用矩阵分解推荐算法模型做推荐系统
django调用矩阵分解推荐算法模型做推荐系统
45 4