机器学习笔记 01:机器学习的基本框架
这篇笔记整理机器学习最基础的一层框架:机器学习到底在学什么,一个模型从数据到预测结果之间经历了什么,以及为什么训练集表现好并不等于模型真的好。
可以先把 machine learning 理解成:
从已有数据中学习一个可以泛化到未来数据的 prediction function。
两个关键词:学习 和 泛化。学习指的是模型通过数据调整自己的参数;泛化指的是模型不只是记住训练样本,而是能在没见过的数据上仍然给出合理预测。
一个机器学习问题由什么组成
最常见的机器学习问题可以写成:
\[ \hat{y} = f_\theta(x) \]
其中,\(x\) 是输入特征,\(\hat{y}\) 是模型预测,\(f_\theta\) 是模型,\(\theta\) 是模型参数。
个人认为machine learning就是从数据中学到pattern/model 这个model可以对未来的数据进行推测,得到一个结果。(简单的说可以当成一个prediction model)
所以机器学习不是直接“学一个答案”,而是学习一个从输入到输出的映射关系。
Machine Learning的流程通常分为以下几步
ML的基本流程:
- 数据预处理
- 模型训练
- 模型评估
可以看到根据是否有样本label可以分为supervised learning和unsupervised learning,并且可以继续细分为regression,classification(在某种情况下可以互相切换,比如regression拟合出的线就可以用来分类),clustering,再加上强化学习就组成我们广义下定义的机器学习。
机器学习训练可以粗略理解成最小化 empirical risk:
\[ \theta^* = \arg\min_\theta \frac{1}{n}\sum_{i=1}^{n} L(f_\theta(x_i), y_i) \]
在所有可能的参数 \(\theta\) 中,找到一组参数,让模型在训练数据上的平均 loss 尽可能小。
机器学习方向的分类
机器学习通常先按有没有 label 来分。
Supervised Learning 有明确的输入和目标输出。模型看到的是 \((x, y)\),目标是学会从 \(x\) 预测 \(y\)。常见任务包括 regression 和 classification。
Regression 预测连续值,比如房价、温度、点击率。Classification 预测类别,比如垃圾邮件识别、疾病诊断、图片分类。
Unsupervised Learning 没有明确的 label。模型只看到 \(x\),目标是发现数据内部结构。常见任务包括聚类 clustering、dimensionality reduction 降维。
简单说,supervised learning 更像是在学一个带答案的映射函数,尝试让数据分布向真实的数据分布靠近。而unsupervised learning 更像是在没有标准答案的情况下整理数据的内在结构,找到数据的规律,将数据变成有信息的内容为我们所用。
Reinforcement learning 相比较其他的领域,强化学习定义模型agent是在一个environment中进行交互,根据当前的状态state决定action,然后根据action获得environment反馈的reward。
其他视角下的机器学习分类: ### 监督学习 vs 无监督学习 -
监督学习:训练数据包含输入和对应的标签(目标值)。算法学习从输入到输出的映射,用于对新数据进行预测。
例子:KNN 分类/回归、线性回归、决策树、神经网络。
-
无监督学习:数据只有输入,没有标签。目标是从中挖掘结构,如聚类、降维、密度估计。
例子:K-means、PCA、自编码器。
参数模型 vs 非参数模型
- 参数模型:假设数据分布具有固定的参数形式,训练时用数据估计有限个参数;预测时仅依赖这些参数,不再需要原始训练数据。模型复杂度通常事先固定。
优点:计算快,能对小数据做合理推断;缺点:若假设与真实不符,效果受限。
例子:线性回归(参数:权重和偏置)、逻辑回归、朴素贝叶斯。
- 非参数模型:不对函数形式做强烈假设,模型复杂度可随数据量增长。常见形式是“记住”训练样本,预测时再用某种相似度决定输出。
优点:灵活,可拟合复杂边界;缺点:需要大量数据,预测慢,易受维度灾难和噪声影响。
判别模型 vs 生成模型
- 判别模型:直接学习决策边界或条件概率 \(P(y|x)\),关注“给定输入,哪个类别最可能”。
例子:KNN、逻辑回归、支持向量机、神经网络。
- 生成模型:学习数据的联合分布 \(P(x, y)\),然后通过贝叶斯定理得到 \(P(y|x)\)。它能生成新样本,展示数据的底层结构。
例子:朴素贝叶斯、高斯混合模型、隐马尔可夫模型、生成对抗网络(GAN)。
基于距离 vs 基于记忆(常用描述类别)
- 基于距离的算法:依赖样本间的距离度量(如欧氏距离)来做出决策。KNN
是最典型的一个,其他如径向基网络、距离加权回归。
- 基于记忆的学习:直接存储训练实例,预测时才利用记忆进行推理。几乎等同于懒惰学习。
数据集的划分
机器学习里经常会把数据分成:
| 数据集 | 作用 |
|---|---|
| Training set | 用来训练模型参数 |
| Validation set | 用来调超参数、选模型 |
| Test set | 用来估计最终泛化能力 |
不能只看 training set 表现,因为模型可以通过记住训练样本获得很低的 training loss,但这不代表它真的学到了规律。
核心问题:模型在训练集上表现很好,但在新数据上表现很差。 所以我们希望找到模型在过拟合欠拟合之间的完美balance状态。
比如一个垃圾邮件分类器,如果它只是记住了训练集中出现过的垃圾邮件地址,那么训练集 accuracy 可能很高。但新垃圾邮件换了发件人和措辞后,它就可能失效。真正有用的模型应该学习“垃圾邮件通常有哪些模式”(我们称之为泛化性),而不是背下训练样本。
Bias-Variance Tradeoff
| 问题 | 现象 | 直觉 |
|---|---|---|
| High bias | train/test 都差 | 模型太简单 |
| High variance | train 好,test 差 | 模型太依赖训练集 |
| High bias, low variance | 稳定的预测垃圾 | 数据有问题 |
| High Variance, low bias | 模型波动比较大 | 训练方向对了,还能继续学 |
小结
机器学习是先定义一个可学习的函数空间,再用 loss function 指定目标,通过 optimization 找到一组参数,最后用 validation/test data 判断模型训练的效果,是否真的泛化。
参考资料
- ucsd dsc40A,40B等课程
- Andrew Ng: Maching Learning/Deep Learning on Coursera
- Stanford CS229: Machine Learning
- An Introduction to Statistical Learning