Python 机器学习 基础 之 监督学习/分类问题/回归任务/泛化、过拟合和欠拟合 基础概念说明
目录
Python 机器学习 基础 之 监督学习/分类问题/回归任务/泛化、过拟合和欠拟合 基础概念说明
一、简单介绍
Python是一种跨平台的计算机程序设计语言。是一种面向对象的动态类型语言,最初被设计用于编写自动化脚本(shell),随着版本的不断更新和语言新功能的添加,越多被用于独立的、大型项目的开发。Python是一种解释型脚本语言,可以应用于以下领域: Web 和 Internet开发、科学计算和统计、人工智能、教育、桌面界面开发、软件开发、后端开发、网络爬虫。
Python 机器学习是利用 Python 编程语言中的各种工具和库来实现机器学习算法和技术的过程。Python 是一种功能强大且易于学习和使用的编程语言,因此成为了机器学习领域的首选语言之一。Python 提供了丰富的机器学习库,如Scikit-learn、TensorFlow、Keras、PyTorch等,这些库包含了许多常用的机器学习算法和深度学习框架,使得开发者能够快速实现、测试和部署各种机器学习模型。
通过 Python 进行机器学习,开发者可以利用其丰富的工具和库来处理数据、构建模型、评估模型性能,并将模型部署到实际应用中。Python 的易用性和庞大的社区支持使得机器学习在各个领域都得到了广泛的应用和发展。
二、监督学习
监督学习 是机器学习中一种重要的范式,它通过已知输入和对应输出的训练样本来学习预测新输入的输出。在监督学习中,每个训练样本都有一个与之对应的标签或目标值,这些标签或目标值是我们希望模型能够预测的结果。监督学习的基本目标是根据输入和输出之间的关系来学习一个函数,从而使模型能够在给定新的输入时预测相应的输出。
监督学习通常在以下情况下使用:
监督学习可以分为两大类别:分类和回归
监督学习中常见的算法包括:
选择适合问题需求的监督学习算法取决于数据的特征、目标变量的类型、问题的复杂度以及算法的性能要求。
三、分类问题
分类问题的目标是预测类别标签 (class label),这些标签来自预定义的可选列表。第 1 章讲过一个例子,即将鸢尾花分到三个可能的品种之一。分类问题有时可分为二分类 (binary classification,在两个类别之间进行区分的一种特殊情况)和多分类 (multiclass classification,在两个以上的类别之间进行区分)。你可以将二分类看作是尝试回答一道是 / 否问题。将电子邮件分为垃圾邮件和非垃圾邮件就是二分类问题的实例。在这个二分类任务中,要问的是 / 否问题为:“这封电子邮件是垃圾邮件吗?”
在二分类问题中,我们通常将其中一个类别称为正类 (positive class),另一个类别称为反类 (negative class)。这里的“正”并不代表好的方面或正数,而是代表研究对象。因此在寻找垃圾邮件时,“正”可能指的是垃圾邮件这一类别。将两个类别中的哪一个作为“正类”,往往是主观判断,与具体的领域有关。
另一方面,鸢尾花的例子则属于多分类问题。另一个多分类的例子是根据网站上的文本预测网站所用的语言。这里的类别就是预定义的语言列表。
四、回归任务
回归任务的目标是预测一个连续值,编程术语叫作浮点数 (floating-point number),数学术语叫作实数 (real number)。根据教育水平、年龄和居住地来预测一个人的年收入,这就是回归的一个例子。在预测收入时,预测值是一个金额 (amount),可以在给定范围内任意取值。回归任务的另一个例子是,根据上一年的产量、天气和农场员工数等属性来预测玉米农场的产量。同样,产量也可以取任意数值。
区分分类任务和回归任务有一个简单方法,就是问一个问题:输出是否具有某种连续性。如果在可能的结果之间具有连续性,那么它就是一个回归问题。想想预测年收入的例子。输出具有非常明显的连续性。一年赚 40 000 美元还是 40 001 美元并没有实质差别,即使两者金额不同。如果我们的算法在本应预测 40 000 美元时的预测结果是 39 999 美元或 40 001 美元,不必过分在意。
五、泛化、过拟合和欠拟合
1、基础概念
泛化、过拟合和欠拟合是机器学习中常见的概念,它们描述了模型在训练集和测试集上的表现情况。
假设有一个简单的分类问题,我们的目标是根据花朵的特征(如花瓣长度和宽度)来预测花的种类(如鸢尾花的三个品种之一)。我们使用一个具有多个隐藏层和大量神经元的深度神经网络来训练模型。
因此,泛化、过拟合和欠拟合是评估机器学习模型性能的重要指标,我们需要通过适当的模型选择、调整和验证来确保我们的模型能够在新的数据上表现良好。
2、举例说明
为了说明这一点,我们来看一个虚构的例子。比如有一个新手数据科学家,已知之前船的买家记录和对买船不感兴趣的顾客记录,想要预测某个顾客是否会买船。 目标是向可能购买的人发送促销电子邮件,而不去打扰那些不感兴趣的顾客。
假设我们有顾客记录,如表 所示。
对数据观察一段时间之后,我们的新手数据科学家发现了以下规律:
- “如果顾客年龄大于 45 岁,并且子女少于 3 个或没有离婚,那么他就想要买船。”如果你问他这个规律的效果如何,我们的数据科学家会回答:“100% 准确!”的确,对于表中的数据,这条规律完全正确。
- 我们还可以发现好多规律,都可以完美解释这个数据集中的某人是否想要买船。数据中的年龄都没有重复,因此我们可以这样说:66、52、53 和 58 岁的人想要买船,而其他年龄的人都不想买。
虽然我们可以编出许多条适用于这个数据集的规律,但要记住:
判断一个算法在新数据上表现好坏的唯一度量,就是在测试集上的评估。
然而从直觉上看 ,我们认为简单的模型对新数据的泛化能力更好。
我们的模型越复杂,在训练数据上的预测结果就越好。但是,如果我们的模型过于复杂,我们开始过多关注训练集中每个单独的数据点,模型就不能很好地泛化到新数据上。
二者之间存在一个最佳位置,可以得到最好的泛化性能。这就是我们想要的模型。
如图是,过拟合与欠拟合之间的权衡:
模型复杂度与数据集大小的关系
回到前面卖船的例子,如果我们查看了 10 000 多行的顾客数据,并且所有数据都符合这条规律:“如果顾客年龄大于 45 岁,并且子女少于 3 个或没有离婚,那么他就想要买船”,那么我们就更有可能相信这是一条有效的规律,比从表 2-1 中仅 12 行数据得出来的更为可信。