53-机器学习基础概念
监督学习 vs 无监督学习 vs 强化学习
监督学习
- 定义:对具有标记的训练样本进行学习,以尽可能对训练样本集外的数据进行分类预测。训练数据包含特征和标签。
- 常见任务:分类、回归
- 常见算法:LR、SVM、BP神经网络、随机森林、GBDT等
无监督学习
- 定义:直接对未标记的输入数据集进行建模,发现数据中的结构知识。
- 常见任务:聚类、降维
- 常见算法:K-Means聚类、PCA降维、自编码、受限玻尔兹曼机等
半监督学习
- 定义:综合利用有类标的数据和没有类标的数据,来生成合适的分类函数。
强化学习
- 定义:智能体在与环境的交互中,根据环境给出的奖励信号,学习最优策略以最大化累积奖励。
- 特点:试错学习、延迟奖励、序列决策
三者区别对比
| 类型 | 数据标注 | 学习方式 | 目标 |
|---|
| 监督学习 | 有标注 | 从标注数据中学习映射函数 | 预测离散分类/连续值 |
| 无监督学习 | 无标注 | 发现数据内在结构 | 聚类、降维、特征学习 |
| 强化学习 | 奖励信号 | 通过与环境交互学习策略 | 最大化累积奖励 |
偏差-方差权衡
偏差(Bias)
- 定义:偏差描述的是预测值的期望与真实值之间的差距,偏差越大,越偏离真实数据。
- 来源:模型复杂度不够,对真实问题的假设过于简单。
- 表现:训练集和测试集上误差都很大。
- 原因:欠拟合。
方差(Variance)
- 定义:方差描述的是预测值的变化范围,离散程度,方差越大,预测值分布越分散。
- 来源:模型复杂度太高,对训练数据中的噪声过度敏感。
- 表现:训练集误差小,测试集误差大。
- 原因:过拟合。
偏差方差分解
对于预测误差,可以分解为:
Error=Bias2+Variance+噪声
偏差方差权衡
- 降低偏差往往会增加方差,降低方差往往会增加偏差。
- 模型复杂度增加:偏差减小,方差增大
- 模型复杂度降低:偏差增大,方差减小
- 我们的目标是找到最优复杂度,使得总误差最小。
常见面试问题:模型受到低偏差和高方差问题时,应该使用哪种算法来解决?
- 低偏差说明模型已经很好地拟合了训练数据,但高方差说明模型过拟合,对测试数据泛化能力差。
- 解决方法:增加训练数据、使用正则化、使用集成方法(如Bagging)、减少模型复杂度。
过拟合与欠拟合
过拟合
- 定义:模型在训练数据上表现很好,但在测试数据上表现很差的现象。
- 产生原因:
- 模型复杂度太高,学习到了训练数据中的噪声
- 训练数据太少,或者样本代表性不足
- 决策树学习中,过度生长导致分支过多
- 解决方法:
- 增加训练数据
- 使用正则化(L1/L2正则化、Dropout等)
- 提前停止训练(早停法)
- 集成学习(Bagging等)
- 减少模型复杂度,剪枝
欠拟合
- 定义:模型在训练数据和测试数据上表现都不好。
- 产生原因:
- 模型复杂度太低,无法学习到数据中的模式
- 特征数量不足,模型表达能力不够
- 解决方法:
- 增加特征,提升模型复杂度
- 减少正则化
- 使用更复杂的模型
如何判断过拟合欠拟合?
- 通过学习曲线:观察训练误差和验证误差随训练过程的变化。
- 过拟合:训练误差持续下降,验证误差先下降后上升
- 欠拟合:训练误差和验证误差都很高,且接近
交叉验证
什么是交叉验证?作用是什么?
- 定义:交叉验证是一种评估模型泛化能力的重采样方法。
- 作用:
- 充分利用有限的数据,更可靠地评估模型性能
- 帮助选择模型超参数
- 避免过拟合,得到更可靠稳定的模型
交叉验证主要有哪几种方法?
-
Holdout验证(留出法):
- 将数据集随机划分为训练集和验证集,比例通常为7:3或8:2。
- 优点:简单快速
- 缺点:只验证一次,结果不稳定,依赖于划分方式。
-
K折交叉验证(K-fold Cross Validation):
- 将数据集随机分成K个大小相等的互斥子集,每次用K-1个子集作为训练集,剩下1个作为验证集。
- 重复K次,最后计算K次验证结果的平均值。
- 常用K=5或K=10。
-
留一交叉验证(Leave-One-Out Cross Validation):
- K折交叉验证的特殊情况,K等于样本数N,每次只留一个样本做验证。
- 优点:结果稳定,偏差小
- 缺点:计算量太大,当N很大时不适用。
-
分层K折交叉验证:
- 保持了每一折中类别分布与原数据集一致,特别适用于不平衡数据集。
如何在K折交叉验证中选择K?
- K越大:训练集越接近完整数据集,偏差越小,但每次训练相关性高,方差大,计算量大。
- K越小:训练集比原数据集小很多,偏差大,但各折训练集相关性低,方差小,计算量小。
- 实际中:通常选择K=5或K=10,这是经验上的平衡选择。
常见面试问题
Q: 请简要说说一个完整机器学习项目的流程?
A:
-
抽象成数学问题
-
获取数据
- 数据决定了机器学习结果的上限,算法只是尽可能逼近这个上限。
- 数据要有代表性,避免严重偏斜;评估数据量级,判断是否需要分布式或降维。
-
特征预处理与特征选择
- 良好的数据要能够提取出良好的特征才能真正发挥效力。
- 包括:归一化、离散化、因子化、缺失值处理、去除共线性等。
- 筛选出显著特征、摒弃非显著特征,使用相关系数、卡方检验、互信息等方法。
-
训练模型与调优
- 选择合适算法进行训练,考验对算法原理的深入理解,进行超参数调优。
-
模型诊断
- 判断过拟合还是欠拟合,使用交叉验证、学习曲线等方法。
- 误差分析,分析误差产生原因,进行针对性调整。这个过程是反复迭代的。
-
模型融合
-
上线运行
Q: 为什么L1正则化可以产生稀疏权值矩阵,L2正则化可以防止过拟合?
A:
-
L1正则化(Lasso):
- L1正则化是权重绝对值之和,会使许多权重变为0,产生稀疏性。
- 原因:L1正则化在零点不可导,最优解更容易出现在坐标轴上,导致某些权重为0,实现特征选择。
-
L2正则化(Ridge):
- L2正则化是权重平方和,倾向于让权重都很小但不为0。
- 权重越小,模型越简单,越不容易产生过拟合,因为简单模型对训练数据噪声不敏感。
Q: L1和L2正则化的先验分别服从什么分布?
A: L1正则化对应拉普拉斯分布,L2正则化对应高斯分布。
Q: 协方差和相关性有什么区别?
A:
- 相关性是协方差的标准化格式。
- 协方差本身很难做比较,例如:如果我们计算工资($)和年龄(岁)的协方差,因为这两个变量有不同的度量,所以我们会得到不能做比较的不同的协方差。
- 为了解决这个问题,我们计算相关性来得到一个介于-1和1之间的值,就可以忽略它们各自不同的度量,直接比较相关性大小。
Q: 生成模型和判别模型的区别?
A:
-
生成模型:
- 由数据学习联合概率密度分布P(X,Y),然后求出条件概率分布P(Y|X)作为预测模型。
- 常见:朴素贝叶斯、隐马尔可夫模型、高斯混合模型、LDA等。
- 优点:可以处理隐变量,模型表现力强;缺点:计算量大。
-
判别模型:
- 由数据直接学习决策函数Y = f(X),或者条件概率分布P(Y|X)作为预测模型。
- 常见:K近邻、SVM、决策树、感知机、线性回归、逻辑斯蒂回归、boosting、条件随机场等。
- 优点:直接学习,准确率更高;缺点:无法处理隐变量。
-
关系:由生成模型可以得到判别模型,但由判别模型得不到生成模型。
Q: 什么是哈希冲突,有哪些解决方法?
A:
哈希冲突是指不同关键字值映射到哈希表同一地址的现象。
解决方法:
- 开放定址法:当冲突发生时,使用某种探查技术在散列表中形成一个探查序列,沿此序列逐个查找,直到找到空地址。
- 再哈希法:同时构造多个不同的哈希函数,冲突时换一个哈希函数。
- 链地址法:将所有哈希地址相同的元素构成一个同义词链表,适合经常插入删除。
- 建立公共溢出区:将哈希表分为基本表和溢出表,凡是和基本表冲突的元素一律填入溢出表。
Q: 机器学习中为什么经常对数据做归一化?
A:
- 加快梯度下降收敛速度:归一化后,不同特征取值范围相近,目标函数更圆,梯度下降更容易找到最优解。
- 提高模型精度:避免取值大的特征对目标函数影响过大,平衡各特征的贡献。
- 一些算法要求:比如基于距离计算的算法(KNN、K-Means),如果不归一化,取值大的特征会主导距离计算。
Q: 归一化和标准化的区别?
A:
- 归一化(Normalization):通常指将数据缩放到[0,1]或[-1,1]区间,典型方法是min-max缩放:
X_norm = (X - min) / (max - min)。
- 标准化(Standardization):将数据变换为均值为0,标准差为1的标准正态分布:
X_std = (X - μ) / σ。
- 使用场景:归一化多用于基于神经网络的模型和距离计算;标准化适合方差分析、线性回归等。