1. 机器学习基础概念解析
1.1 机器学习的定义与核心要素
机器学习可以理解为计算机系统通过经验数据自动改进性能的过程。用更专业的术语来说,机器学习是让机器通过某种经验E(Experience),在某个任务T(Task)上,使得性能度量P(Performance)得到提升的过程。
这个定义包含三个关键要素:
- 经验E:即训练数据集,是模型学习的基础
- 任务T:要解决的具体问题类型,如分类、回归等
- 性能度量P:评估模型好坏的量化指标,如准确率、均方误差等
在实际应用中,这三个要素需要明确定义。例如在垃圾邮件分类任务中:
- 经验E:已标记的邮件数据集(垃圾/非垃圾)
- 任务T:二分类问题(判断新邮件是否为垃圾邮件)
- 性能度量P:分类准确率(正确分类的邮件比例)
1.2 监督学习详解
监督学习是机器学习中最常见的形式,其核心特点是训练数据包含输入特征和对应的输出标签(label)。模型通过学习这些标注数据,建立从输入到输出的映射关系。
1.2.1 回归问题
回归任务预测连续值输出。典型例子包括:
- 房价预测:根据房屋面积、位置等特征预测价格
- 销量预测:根据历史销售数据预测未来销量
关键特点是输出值可以在某个区间内取任意实数值。常用的性能度量是均方误差(MSE):
code复制MSE = (1/m) * Σ(y_pred - y_true)^2
其中m是样本数量,y_pred是预测值,y_true是真实值。
1.2.2 分类问题
分类任务预测离散类别输出。典型例子包括:
- 垃圾邮件识别(二分类)
- 手写数字识别(多分类)
- 疾病诊断(二分类或多分类)
分类模型的输出是类别标签,性能度量常用准确率、精确率、召回率等。决策边界是分类问题中的重要概念,它是特征空间中区分不同类别的分界线。
注意:在实际应用中,分类问题经常需要处理类别不平衡的情况。例如在疾病诊断中,健康样本可能远多于患病样本,这时单纯看准确率可能产生误导,需要结合其他指标综合评估。
1.3 无监督学习深度解析
无监督学习与监督学习的关键区别在于训练数据没有标注标签。模型需要自主发现数据中的内在结构和模式。
1.3.1 聚类分析
聚类是将相似的数据点分组的过程。常见算法包括:
- K-means:基于距离的聚类
- 层次聚类:构建树状聚类结构
- DBSCAN:基于密度的聚类
应用场景:
- 客户细分:根据消费行为对客户分组
- 图像分割:将图像像素聚类为不同区域
- 异常检测:识别远离主要聚类的异常点
1..3.2 降维技术
降维是将高维数据转换为低维表示,同时保留重要信息。常用方法:
- 主成分分析(PCA):线性降维
- t-SNE:非线性降维,适合可视化
- 自动编码器:基于神经网络的降维
降维的主要用途:
- 数据可视化(降至2D或3D)
- 特征提取和压缩
- 去除噪声和冗余特征
1.3.3 关联规则学习
发现数据项之间的有趣关系,如:
- 购物篮分析(啤酒和尿布)
- 推荐系统(购买A商品的客户也常买B)
常用算法:
- Apriori算法
- FP-growth算法
实际经验:无监督学习的结果往往需要领域知识来解释。例如聚类结果可能有多种解释方式,需要结合业务背景判断其实际意义。
2. 线性回归模型全面解析
2.1 单变量线性回归模型
单变量线性回归是最基础的预测模型,形式为:
code复制hθ(x) = θ₀ + θ₁x
其中:
- hθ(x)是预测函数
- θ₀是截距(偏置项)
- θ₁是斜率
- x是输入特征
2.1.1 代价函数
线性回归常用均方误差作为代价函数:
code复制J(θ₀,θ₁) = (1/2m) * Σ(hθ(xⁱ) - yⁱ)²
乘以1/2是为了后续求导时简化计算。代价函数衡量了模型预测值与真实值的偏离程度。
2.1.2 梯度下降算法
梯度下降是通过迭代优化模型参数的通用方法。对于线性回归,参数更新规则为:
重复直到收敛 {
θ₀ := θ₀ - α*(1/m)Σ(hθ(xⁱ)-yⁱ)
θ₁ := θ₁ - α(1/m)*Σ(hθ(xⁱ)-yⁱ)*xⁱ
}
其中α是学习率,控制每次更新的步长。
注意事项:
- 学习率α需要仔细选择:太小导致收敛慢,太大可能导致不收敛
- 所有参数必须同步更新,不能先更新θ₀再用新θ₀计算θ₁
- 特征缩放可以加速收敛
2.2 多变量线性回归
当输入特征有多个时,模型扩展为:
code复制hθ(x) = θ₀ + θ₁x₁ + θ₂x₂ + ... + θₙxₙ
向量化表示为:
code复制hθ(x) = θᵀx
2.2.1 特征缩放
不同特征可能有不同量纲,导致梯度下降收敛缓慢。常用缩放方法:
-
均值归一化:
code复制x' = (x - μ) / (max - min) -
Z-score标准化:
code复制x' = (x - μ) / σ
特征缩放后,所有特征大致在[-1,1]或[0,1]范围内,可以加速收敛。
2.2.2 学习率选择
学习率α的选择技巧:
- 可以尝试0.001,0.003,0.01,0.03,0.1,0.3,1等值
- 观察代价函数随迭代次数的变化曲线
- 理想情况下J(θ)应单调下降,最终趋于平稳
- 如果J(θ)波动或上升,说明α太大
2.3 正规方程法
除了梯度下降,线性回归还可以用解析法直接求解:
code复制θ = (XᵀX)⁻¹Xᵀy
2.3.1 与梯度下降的比较
| 方法 | 优点 | 缺点 | 适用场景 |
|---|---|---|---|
| 梯度下降 | 适用于大规模数据(n>10,000) | 需要选择α,需要多次迭代 | 大数据集,特征多 |
| 正规方程 | 不需要迭代,直接求解 | 需要计算(XᵀX)⁻¹,O(n³)复杂度 | 小数据集(n<1000) |
2.3.2 矩阵不可逆的处理
当XᵀX不可逆时,可能原因:
- 冗余特征(线性相关)
- 特征过多(m ≤ n)
解决方案:
- 删除冗余特征
- 使用正则化(后面介绍)
- 使用伪逆(pinv)代替逆
3. 逻辑回归与分类问题
3.1 从线性回归到逻辑回归
线性回归直接用于分类问题会有以下问题:
- 输出可能超出[0,1]范围
- 对异常值敏感
逻辑回归通过sigmoid函数将输出映射到(0,1):
code复制hθ(x) = g(θᵀx) = 1/(1+e^(-θᵀx))
其中sigmoid函数g(z) = 1/(1+e⁻ᶻ)
3.2 决策边界
决策边界是分类问题中分隔不同类别的分界线。对于逻辑回归:
code复制θᵀx = 0
是决策边界。例如:
- 当θᵀx ≥ 0时,预测y=1
- 当θᵀx < 0时,预测y=0
决策边界可以是线性的,也可以通过特征组合得到非线性边界。
3.3 代价函数与优化
逻辑回归不能直接使用线性回归的均方误差代价函数,因为会导致非凸优化问题。改用对数损失:
code复制J(θ) = -[1/m] * Σ [yⁱlog(hθ(xⁱ)) + (1-yⁱ)log(1-hθ(xⁱ))]
这个代价函数是凸函数,保证能找到全局最优解。
3.3.1 梯度下降更新规则
形式上与线性回归相同,但hθ(x)定义不同:
重复直到收敛 {
θⱼ := θⱼ - α*(1/m)*Σ(hθ(xⁱ)-yⁱ)*xⱼⁱ
}
3.4 高级优化方法
除了梯度下降,还有更高效的优化算法:
- 共轭梯度法
- BFGS
- L-BFGS
这些方法:
- 不需要手动选择学习率
- 通常比梯度下降更快
- 但实现更复杂
在MATLAB/Octave中可以使用fminunc函数:
matlab复制options = optimset('GradObj', 'on', 'MaxIter', 100);
initialTheta = zeros(n+1,1);
[theta, cost] = fminunc(@(t)(costFunction(t,X,y)), initialTheta, options);
3.5 多分类问题
当类别数K>2时,常用一对多(one-vs-all)策略:
- 训练K个二分类器,每个分类器区分类别k和其他类别
- 对新样本,运行所有分类器,选择hθ(x)最大的类别
数学表达:
code复制hθ⁽ᵏ⁾(x) = P(y=k | x;θ⁽ᵏ⁾)
预测类别 = argmaxₖ hθ⁽ᵏ⁾(x)
4. 正则化与模型选择
4.1 过拟合问题
过拟合是指模型在训练集上表现很好,但在新数据上泛化能力差。表现为:
- 训练误差很低
- 验证/测试误差很高
解决方法:
- 增加训练数据
- 减少特征数量
- 正则化(保持所有特征但减小参数值)
4.2 正则化线性回归
正则化后的代价函数:
code复制J(θ) = (1/2m)[Σ(hθ(xⁱ)-yⁱ)² + λΣθⱼ²]
λ是正则化参数,控制惩罚强度:
- λ太大:导致欠拟合(高偏差)
- λ太小:可能导致过拟合(高方差)
4.2.1 梯度下降更新
正则化后,θ₀不惩罚,其他参数更新为:
code复制θ₀ := θ₀ - α*(1/m)*Σ(hθ(xⁱ)-yⁱ)*x₀ⁱ
θⱼ := θⱼ*(1-αλ/m) - α*(1/m)*Σ(hθ(xⁱ)-yⁱ)*xⱼⁱ (j=1..n)
(1-αλ/m)项使θⱼ每次迭代都稍微缩小,称为权重衰减。
4.2.2 正规方程
正则化后的解析解:
code复制θ = (XᵀX + λ[0 I])⁻¹Xᵀy
其中[0 I]是(n+1)×(n+1)矩阵,左上角为0,其余对角线为1。这保证矩阵总是可逆的。
4.3 正则化逻辑回归
正则化代价函数:
code复制J(θ) = -[1/m]Σ[yⁱlog(hθ(xⁱ))+(1-yⁱ)log(1-hθ(xⁱ))] + (λ/2m)Σθⱼ²
梯度更新与线性回归类似,只是hθ(x)定义不同。
5. 神经网络基础
5.1 神经网络动机
线性模型和逻辑回归无法有效处理复杂的非线性关系。当特征很多时,手动构造多项式特征也不现实。神经网络可以自动学习适合的特征组合。
5.2 神经网络结构
典型神经网络包括:
- 输入层:原始特征
- 隐藏层:中间计算
- 输出层:最终预测
每个节点(神经元)计算加权和并通过激活函数:
code复制a⁽ˡ⁾ⱼ = g(Θ⁽ˡ⁻¹⁾ₖ a⁽ˡ⁻¹⁾ₖ)
其中g(z)通常为sigmoid函数。
5.3 前向传播
预测过程称为前向传播:
code复制a⁽¹⁾ = x
z⁽²⁾ = Θ⁽¹⁾a⁽¹⁾
a⁽²⁾ = g(z⁽²⁾)
...
hΘ(x) = a⁽ᴸ⁾
5.4 反向传播算法
训练神经网络的关键是计算代价函数对参数的偏导数。反向传播算法高效地计算这些梯度。
算法步骤:
- 前向传播计算各层激活值
- 计算输出层误差δ⁽ᴸ⁾
- 反向传播误差到各层
- 计算各层梯度
具体数学推导较为复杂,核心是链式法则的应用。
5.5 实现注意事项
- 随机初始化:打破对称性,防止所有神经元学习相同特征
- 梯度检查:用数值方法验证反向传播实现正确性
- 参数展开:将矩阵参数展开为向量以使用优化函数
6. 应用机器学习的实用建议
6.1 模型评估
将数据分为:
- 训练集(60%):训练模型
- 验证集(20%):选择模型(如选择多项式次数)
- 测试集(20%):最终评估
6.2 偏差与方差诊断
- 高偏差(欠拟合):训练误差和验证误差都高
- 高方差(过拟合):训练误差低,验证误差高
解决方法:
- 高偏差:增加特征、减小正则化参数λ
- 高方差:增加数据、减少特征、增加λ
6.3 学习曲线
绘制训练误差和验证误差随训练样本数的变化曲线,可以判断:
- 高偏差:曲线较早收敛,增加数据帮助不大
- 高方差:两条曲线间有较大间隙,增加数据可能有帮助
6.4 错误分析
在实际应用中,建议:
- 先快速实现简单模型,建立baseline
- 绘制学习曲线,决定下一步(更多数据/特征等)
- 错误分析:人工检查被错误分类的样本,寻找规律
7. 支持向量机(补充)
虽然笔记中未提及,但SVM是重要的监督学习算法,值得补充:
7.1 最大间隔分类器
SVM试图找到具有最大几何间隔的超平面来分隔数据。优化问题:
code复制min(1/2||θ||²)
s.t. yⁱ(θᵀxⁱ + b) ≥ 1
7.2 核方法
对于非线性可分数据,使用核函数将数据映射到高维空间:
常用核函数:
- 高斯核:K(x,z) = exp(-||x-z||²/(2σ²))
- 多项式核:K(x,z) = (xᵀz + c)ᵈ
7.3 SVM实践建议
- 特征缩放很重要
- 选择核函数:
- 特征多样本少:用线性核
- 特征少样本中等:用高斯核
- 调整正则化参数C和核参数(如σ)
8. 无监督学习深入(补充)
8.1 K-means算法
迭代过程:
- 随机初始化K个聚类中心
- 将每个点分配到最近的中心
- 重新计算聚类中心
- 重复直到收敛
8.2 主成分分析(PCA)
降维步骤:
- 数据预处理(均值归一化、特征缩放)
- 计算协方差矩阵Σ = (1/m)XᵀX
- 计算Σ的特征向量
- 取前k个特征向量组成投影矩阵U
- 新特征z = Uᵀx
选择k的方法:
- 保留方差百分比(如99%)
- 观察特征值下降的"肘部"
9. 异常检测(补充)
9.1 高斯分布方法
假设特征服从高斯分布:
- 选择可能指示异常的特征xⱼ
- 拟合参数μⱼ和σⱼ²
- 对新样本x,计算概率p(x)
- 如果p(x) < ε,则判定为异常
9.2 多元高斯分布
考虑特征间的相关性:
code复制p(x) = (1/((2π)^(n/2)|Σ|^(1/2))) * exp(-1/2(x-μ)ᵀΣ⁻¹(x-μ))
10. 推荐系统(补充)
10.1 协同过滤
同时学习用户参数θ和商品特征x:
优化目标:
code复制min J(θ,x) = Σ(rⁱʲ - θⁱᵀxʲ)² + λ(Σ||θⁱ||² + Σ||xʲ||²)
10.2 低秩矩阵分解
将评分矩阵R分解为:
code复制R ≈ ΘᵀX
其中Θ是用户矩阵,X是商品矩阵。
11. 大规模机器学习
11.1 随机梯度下降
标准梯度下降每次迭代使用全部数据,计算量大。随机梯度下降每次使用单个样本:
code复制for i=1 to m {
θ := θ - α(hθ(xⁱ)-yⁱ)xⁱ
}
11.2 小批量梯度下降
折中方案,每次使用b个样本(如b=10):
code复制for i=1 to m/10 {
θ := θ - α*(1/10)*Σ(hθ(xⁱ)-yⁱ)xⁱ
}
11.3 在线学习
数据持续到达时,可以实时更新模型:
code复制每当获得新样本(x,y) {
θ := θ - α(hθ(x)-y)x
}
12. 应用实例与技巧
12.1 图片OCR流程
- 文本检测
- 字符分割
- 字符识别
12.2 人工数据合成
增加训练数据的方法:
- 从已有数据生成新样本(如旋转图片)
- 收集额外数据(如众包)
- 数据增强(如添加噪声)
12.3 天花板分析
评估系统各模块的改进空间:
- 测量整个系统准确率
- 人工修正某个模块的输出
- 重新测量准确率
- 准确率提升幅度即该模块的改进空间
13. 总结与学习路径建议
机器学习学习建议路径:
- 掌握线性回归和逻辑回归基础
- 理解正则化和模型选择
- 学习神经网络和深度学习基础
- 掌握SVM、K-means等经典算法
- 实践项目,积累经验
常见陷阱与建议:
- 不要一开始就尝试复杂模型,从简单模型开始
- 始终进行误差分析和模型诊断
- 特征工程通常比算法选择更重要
- 理解业务背景有助于构建更好的特征
机器学习是一个需要理论结合实践的领域。建议在学习理论的同时,多参与实际项目,通过实践加深理解。吴恩达的这门课程提供了很好的基础,但要真正掌握,还需要不断练习和探索。