分类方式、测试与验证、K-折交叉验证
【写在前面】:看了不少书,学了不少东西,希望写一篇 “俗套” 的机器学习笔记...
📖 一、关于机器学习
【解释】:机器学习是一门能够使用编程,让计算机从数据中学习的计算机科学技术(和艺术)。
【特点】:机器学习 能够自动地从过往经验中学习知识。
多种解读方式
-
机器学习应用在数据分析领域 = 数据挖掘
-
将机器学习应用在图像处理领域 = 计算机视觉
-
将机器学习应用于人脸识别领域 = 生物特征识别
📖 二、机器学习的用途
- 有的任务只能由机器学习完成。
例如,垃圾邮件检测。 - 提高工作效率。
例如:数据挖掘、计算机视觉、自然语言处理、生物特征识别、语音、手写识别和机器人运用等。
📖 三、功能强大的机器学习框架-sklearn
安装 sklearn
pip install sklearn
【温馨提示】:要是下载很慢的话,可以使用清华源:https://mirrors.tuna.tsinghua.edu.cn/help/pypi/
【scikit-learn 介绍】:是基于 Python 语言的机器学习工具。是简单高效的数据挖掘和数据分析工具。
python中的开源软件库
python有一些常用于执行数据处理和机器学习的开源软件库。可以借助这些第三方扩展库(如Numpy、Pandas、Matplotlib、Scikit-learn等)来实现数据分析和机器学习的功能。
具体的一些常用的库和官网如下表所示:
功能描述 | 【机器学习】第三方库 | 官网 |
---|---|---|
矩阵操作函数库 | Numpy | https://www.numpy.org.cn/ |
Python的绘图库 | Matplotlib | https://www.matplotlib.org.cn/ |
数据分析包 | Pandas | https://www.pypandas.cn/ |
科学计算的核心包 | Scipy | https://www.scipy.org/ |
机器学习函数库 | Scikit-learn | https://sklearn.apachecn.org/ |
统计建模工具包 | StatsModels | https://pypi.org/project/statsmodels/0.4.3/ |
深度学习框架 | TensorFlow | https://tensorflow.google.cn/ |
【更多sklearn知识】:https://sklearn.apachecn.org/
📖 四、机器学习的种类
关于机器学习的分类方式,我接受以下三类分类方式:是否有人类监督的角度划分、从系统是否可以传入数据流进行增量学习的角度划分、从是否泛化的角度划分。
1、从是否有人类监督的角度划分
(1)监督式学习
【解释】:用于学习的数据都是带标签的数据。
常见两种任务:
- 回归任务:数据预测
- 分类任务
(2)无监督式学习
【解释】: 用于学习的数据都是不带标签的数据。
(3)半监督式学习
【解释】:数据中有一部分是带标签的,有一部分是不带标签的数据。
(4)强化学习
【解释】:考虑的是一系列动作之后的收益最大化。
2、从系统是否可以传入数据流进行增量学习的角度划分
(1)批量学习
【解释一下】:训练时,必须使用所有可用的数据进行训练,通常都是离线完成的。也就是说先完成系统的训练,然后再投入到生产环境中。如果需要更新系统模型,需要重新训练,重新部署。
【缺点】:训练时间长,耗费资源多。
(2)在线学习
【解释一下】:可以循序渐进的给系统提供训练数据,逐步积累学习成果。
【缺点】:容易忘记老的特征。可以通过学习率参数,调节学习速度的快慢。
【注意】:虽然名字叫在线学习,实际训练时也是离线完成的。
3、从是否泛化的角度划分
(1)基于实例的学习
【解释一下】:系统先完全记住学习实例,然后通过某种相似度度量方式将其泛化到新的实例。
(2)基于模型的学习
【解释一下】:从一组实例中,构建这些实例的模型,然后用这个模型进行预测。
📖 五、目前机器学习主要存在的挑战
-
1、训练数据的不足
-
2、数据不具有代表性
-
3、质量差数据
-
4、无关特征
-
5、训练数据过度拟合
【解释一下】:模型拟合能力过强,记住了太多细节。导致泛化能力不足。
【解决方案】:- 简化模型。
- 使用正则化来降低模型的复杂度。
- 收集更多的数据。
- 减少训练数据中的噪音。
-
6、训练数据拟合不足
- 选择一个带有更多参数、更强大的模型。
- 给学习算法提供更好特征的数据集。
- 减少模型中约束(例如:减少正则化超参数)
【知识点补充】:
-
关于正则化:
正则化是一种为了减小测试误差的行为(有时候会增加训练误差)。过度拟合,使用正则化来降低模型的复杂度。 -
关于超参数:
根据经验进行设定,影响到权重W和偏置b的大小,比如迭代次数、隐藏层的层数、每层神经元的个数、学习速率等。
【了解更多】:
📖 六、测试与验证
一般情况下会将数据分为训练集和测试集。 用训练集的数据去训练模型。用测试集的数据去测试模型的泛化能力。
【知识点补充】:
- 【验证集】:是模型训练过程中单独留出的样本集,它可以用于调整模型的超参数和用于对模型的能力进行初步评估。
- 【训练集】:用于模型拟合的数据样本。
- 【测试集】:用来评估模最终模型的泛化能力。但不能作为调参、选择特征等算法相关的选择的依据。
类别 | 验证集 | 测试集 |
---|---|---|
作用 | 用于调超参数,监控模型是否发生过拟合(以决定是否停止训练) | 评估最终模型泛化能力 |
使用次数 | 多次使用,并不断调参 | 仅一次使用 |
缺点 | 可能导致训练好的模型泛化性能不够 | 测试集为了具有泛化代表性,往往数据量比较大,测试一轮要很久。所以验证集仅仅是测试集的很小一部分,不够具有代表性 |
泛化误差
将模型应用于新场景的误差率。通常用来对模型进行评估。
【补充】:如果泛化误差很高,训练误差很低,则代表 模型过度拟合。
【常理】:通常使用80%的数据做训练集,20%的数据做测试集。
【了解更多】:https://blog.csdn.net/Cerisier/article/details/78122653
📖 七、K-折交叉验证
【用法】:将训练集分为K个互补的子集,模型通过这个子集的不同组合进行训练,用剩余的自己子集进行验证。
一般情况下,将K折交叉验证用于模型调优,找到使得模型泛化性能最优的超参值。
【了解更多】:https://blog.csdn.net/tianguiyuyu/article/details/80697223
机器学习-知识框架
图片来源:https://www.jianshu.com/p/e0844e7cdba5