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

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

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作为评估指标)
  • 模型正则化
目录
相关文章
|
8天前
|
机器学习/深度学习 数据采集 监控
如何使用机器学习模型来自动化评估数据质量?
如何使用机器学习模型来自动化评估数据质量?
|
5天前
|
机器学习/深度学习 人工智能 算法
【手写数字识别】Python+深度学习+机器学习+人工智能+TensorFlow+算法模型
手写数字识别系统,使用Python作为主要开发语言,基于深度学习TensorFlow框架,搭建卷积神经网络算法。并通过对数据集进行训练,最后得到一个识别精度较高的模型。并基于Flask框架,开发网页端操作平台,实现用户上传一张图片识别其名称。
21 0
【手写数字识别】Python+深度学习+机器学习+人工智能+TensorFlow+算法模型
|
9天前
|
机器学习/深度学习 算法 PyTorch
用Python实现简单机器学习模型:以鸢尾花数据集为例
用Python实现简单机器学习模型:以鸢尾花数据集为例
28 1
|
18天前
|
机器学习/深度学习 数据采集 Python
从零到一:手把手教你完成机器学习项目,从数据预处理到模型部署全攻略
【10月更文挑战第25天】本文通过一个预测房价的案例,详细介绍了从数据预处理到模型部署的完整机器学习项目流程。涵盖数据清洗、特征选择与工程、模型训练与调优、以及使用Flask进行模型部署的步骤,帮助读者掌握机器学习的最佳实践。
56 1
|
22天前
|
机器学习/深度学习 数据采集 监控
如何使用机器学习模型来自动化评估数据质量?
如何使用机器学习模型来自动化评估数据质量?
|
15天前
|
机器学习/深度学习 算法
探索机器学习模型的可解释性
【10月更文挑战第29天】在机器学习领域,一个关键议题是模型的可解释性。本文将通过简单易懂的语言和实例,探讨如何理解和评估机器学习模型的决策过程。我们将从基础概念入手,逐步深入到更复杂的技术手段,旨在为非专业人士提供一扇洞悉机器学习黑箱的窗口。
|
15天前
|
机器学习/深度学习 人工智能 算法
探索机器学习中的决策树算法
【10月更文挑战第29天】本文将深入浅出地介绍决策树算法,一种在机器学习中广泛使用的分类和回归方法。我们将从基础概念出发,逐步深入到算法的实际应用,最后通过一个代码示例来直观展示如何利用决策树解决实际问题。无论你是机器学习的初学者还是希望深化理解的开发者,这篇文章都将为你提供有价值的见解和指导。
|
25天前
|
算法 安全 数据安全/隐私保护
基于game-based算法的动态频谱访问matlab仿真
本算法展示了在认知无线电网络中,通过游戏理论优化动态频谱访问,提高频谱利用率和物理层安全性。程序运行效果包括负载因子、传输功率、信噪比对用户效用和保密率的影响分析。软件版本:Matlab 2022a。完整代码包含详细中文注释和操作视频。
|
10天前
|
算法 数据挖掘 数据安全/隐私保护
基于FCM模糊聚类算法的图像分割matlab仿真
本项目展示了基于模糊C均值(FCM)算法的图像分割技术。算法运行效果良好,无水印。使用MATLAB 2022a开发,提供完整代码及中文注释,附带操作步骤视频。FCM算法通过隶属度矩阵和聚类中心矩阵实现图像分割,适用于灰度和彩色图像,广泛应用于医学影像、遥感图像等领域。
|
11天前
|
算法 调度
基于遗传模拟退火混合优化算法的车间作业最优调度matlab仿真,输出甘特图
车间作业调度问题(JSSP)通过遗传算法(GA)和模拟退火算法(SA)优化多个作业在并行工作中心上的加工顺序和时间,以最小化总完成时间和机器闲置时间。MATLAB2022a版本运行测试,展示了有效性和可行性。核心程序采用作业列表表示法,结合遗传操作和模拟退火过程,提高算法性能。

热门文章

最新文章