机器学习
人工智能的三大概念
人工智能
目标: 让机器表现出”智能”的行为,用计算机模拟人类大脑,像人脑一样理性地思考和行动.
关键: 人工智能不一定需要学习,早期的AI很多靠人工写规则.
机器学习
是什么: 人工智能的一个子领域,把”人工写规则”转变为”让机器从数据中自己学出规则”.
经典方法:
- 线性回归, 逻辑回归
- 决策树, 随机森林
- SVM(支持向量机)
- K-means 聚类
深度学习
是什么: 机器学习的一个子领域,使用多层神经网络,自动从数据中提取特征.
关键: 解决了ML的痛点——特征工程(特征由网络自动学习).
| 对比ML/DL | ML | DL |
|---|---|---|
| 特征 | 人工设计(很费人力) | 网络自动学习 |
| 数据量 | 小数据也能用 | 通常需要大数据 |
| 算力 | CPU 够用 | 通常需要 GPU |
| 可解释性 | 较好 | 较差(黑盒) |
一句话总结: AI是梦想,机器学习是实现梦想的思路,深度学习是当前最强大的实现工具.
机器学习的两种方式
基于规则的学习
程序员根据经验,手工编写 if-else 规则进行预测.
基于模型的学习
从数据中自动学习出规律.
一元线性回归:
- 用线性关系描述输入特征与输出结果之间的关系.
- 找一条直线,让它尽可能靠近所有数据点(或让点均衡分布在 直线两侧),利用这条线代表的关系实现预测.
- 直线写成 y = ax + b: 整条式子是模型; a(斜率/权重)和 b(截距/偏置)都是参数—— 参数通常未知,是训练要求解的量.
机器学习的发展史
AI发展三要素: 数据, 算法, 算力
- 数据: 原料,类似汽油粮食. 数据的质与量决定模型上限, 算法与算力决定逼近上限的速度.
- 算法: 类似于大脑/道路.
- 算力: 类似于发动机/卡车.
- CPU: 擅长逻辑控制与串行任务,适合I/O密集型任务.
- GPU: 擅长大规模并行计算,尤其是矩阵运算,适合计算密集型任务.
- TPU: Tensor Processing Unit(张量处理器), > 谷歌专为神经网络矩阵运算定制的芯片.
人工智能元年: 1956年达特茅斯会议, 约翰·麦卡锡提出 “Artificial Intelligence”一词.
几条发展路线:
- 符号主义: 人写规则.
- 统计学习: 不给硬规则,给大量数据及人工特征, 由机器自动寻找规律.
- 神经网络(连接主义): 只给大量数据, 由机器自动寻找规律及特征.
- 大规模预训练模型: 预训练+微调,一个大模型搞定很多任务.
机器学习数据集相关术语
| 培训学科 | 作业考试 | 学历 | 工作经验 | 工作地点 | 就业薪资 |
|---|---|---|---|---|---|
| java | 90 | 本科 | 1 | 北京 | 14k |
| java | 80 | 本科 | 1 | 武汉 | 10k |
| AI | 90 | 本科 | 0 | 北京 | 15k |
| … | … | … | … | … | … |
| AI | 91 | 本科 | 1 | 上海 | ? |
- 样本: 一行数据就是一个样本.
- 特征: 一列数据就是一个特征(培训学科、工作地点等).
- 标签/目标(label/target): 模型要预测的那一列 (本例中是就业薪资).
- 数据集: 多个样本组成.
- 训练集: 用来训练模型的数据集,由两部分组成:
- x_train: 训练集的特征
- y_train: 训练集的标签
- 测试集: 用来检验模型的数据集:
- x_test / y_test
机器学习算法分类
有监督学习
用带特征和标签的数据训练. 适用于分类任务、回归任务.
无监督学习
用有特征但无标签的数据训练. 适用于: 聚类(K-means)、降维(PCA)、异常检测、关联规则挖掘. 作用: 降低标注成本,或数据本身无法标注.
半监督学习
用少量带标签 + 大量无标签的数据共同训练.融合有监督与无监督,降低标注成本.
强化学习
Agent在环境中不断试错,靠奖惩机制学会如何行动,以获得最多奖励.
机器学习建模流程
- 获取数据: 明确数据源并加载(图像/文本/表格…)
- 数据预处理: 过滤空值、异常值等
- 特征工程: 反复做特征,让模型效果更好
- 模型训练: fit
- 模型预测: predict
- 模型评估: 用测试集评估(见”回归模型评估”), 效果不好则回到 3 调整特征或模型
特征工程
是什么: 将原始数据加工成模型可用信息的过程.
-
特征提取: 从原始数据中提取与任务相关的特征. 要贴合任务,任务不同,特征不同.
-
特征预处理: 数据清洗、数值变换,消除数据缺陷, 让数据适配算法. 典型问题是量纲问题,两种解决法:
- 归一化(Min-Max): , 压缩到 [0,1] 区间.
- 标准化(Z-score): , 变换为均值0、方差1,不限定取值范围.
-
特征降维: 在核心信息损失最小的前提下,将高维特征映射到低维子空间.
- 区分: 特征选择是”挑”出原有特征的子集,含义不变; 特征降维是”造”出新特征(PCA、AutoEncoder),
- 新特征是原始特征的数学组合,一般无直观业务含义.
-
**特征选择 **: 选取有用的特征列,将无用的特征列移除.
为什么?
-
降维降噪,防过拟合
无用或冗余的数据对模型就是噪声,模型会试图从”噪声” 中学习,在训练集上表现的头头是道,到了测试集上一塌糊涂,原因就是模型一直在”背噪声”.
-
省算力,省时间
移除无用列,节省算力. 如在正规方程中,复杂度为o(n^3)
-
确保可解释性
移除无用列,如决定薪资的是人的手机号,这个完全没有意义.
-
规避维度灾难
特征维度过高时,数据在高维空间里变的过于稀疏,模型找不到规律.
-
-
特征组合: 将两个或多个特征相乘,交叉,拼接,生成新的特征.
与降维的区别是: 降维是压缩信息,而组合是创造信息.
为什么?
-
表达交互效应
如学区房贵的条件是: 是学区房且面积大,单独看一列,可能会有一些误解,如单看面积,有些城区小户型也贵.将两列组合起来,可以更有效的表达信息.
-
// todo
| 对比分类任务和回归任务 | 分类任务 | 回归任务 |
|---|---|---|
| 输出 | 离散的类别标签 | 连续的数值 |
| 以KNN为例的预测逻辑 | K个邻居投票,取多数类别 | K个邻居标签取平均值 |
| 常用损失函数 | 交叉熵,0-1损失 | MSE,MAE |
| 评估指标 | 准确率,精确率,召回率,F1 | MSE,RMSE,MAE,R^2 |
| 代表算法 | 逻辑回归,KNN,SVM,决策树,朴素贝叶斯 | 线性回归,岭回归,回归树 |
| 例子 | 垃圾邮件,手写数字识别 | 房价预测,温度预测,销售额预测. |
-
分析线性回归的公式组成及作用
-
梯度下降中,有四种梯度下降计算方法,推导一下他们的公式
线性回归
一元线性回归是什么: 求一条直线,让它尽可能靠近所有数据点,用于值预测.
多元线性回归是什么: 是一个超平面,让它尽可能靠近所有数据点,用于值预测.
一元线性回归方程:
- w: 斜率(权重) b: 截距(偏置)
多元线性回归方程:
w有多个,b只有一个,所以可以把w抽离出来,作为一个矩阵,但因为矩阵有一些运算规则,所以矩阵需要进行转置.
线性回归的目标就是 找出最优的w和b,使预测值与真实值的总误差最小. 误差使用损失函数进行衡量.
损失函数
是什么: 衡量预测值与真实值差距的函数. 损失越大,预测越偏离.
通用公式,一般不采用,仅用于原理解释: 将预测值与真实值之间的误差进行求和.
参数解释
: 一个关于w和b的二元损失函数
<第i个线性回归方程的预测值>第i个线性回归方程的预测值>.
: 第i个真实值
不采用的原因: 误差有正有负,若直接求和会抵消.
目的: 找到使损失最小的参数w和b.
以下是三种常用的损失函数
-
SSE(残差平方和): 所有误差平方直接相加,不除以 m.
所以SSE的损失函数是:
-
MSE(均方误差): 误差平方和 / m.等于SSE/m
所以MSE的损失函数是:
-
MAE(平均绝对误差): 误差绝对值之和 / m.
所以MAE的损失函数是:
- SSE/MSE 处处光滑可导 -> 便于梯度下降优化(首选).
- MAE 在零点不可导,但对异常值不敏感 > (MSE 的平方会放大离群点),量纲与原数据一致、直观.
如何”优化”损失函数?
何为优化? 优化 = 寻找使损失函数J(w,b)取最小值的参数w和b.即求解w,b两个变量.
目标: 到达谷底(误差最小)
- 对参数 w, b 的优化: 用梯度下降压低损失的值,这是”优化”在ML中的默认含义.
- 对损失函数本身: 它是人设计的,可以修改(换函数形式、加正则项、改权重);
- 损失函数定义了模型的价值观.
- 注意: 训练找的是一个最优点(参数组合), 不是”一条最短路径”.
- 迭代轨迹只是手段.
正规方程法
本质: 方程求解,利用极值点处梯度为0(导数为0)这个数学性质,令偏导数等于0,直接求解方程组,一步跳到最低点.
分别对w,b求偏导
优势:
- 一次性求出w,b,是精确的解析解.
- 无超参数(不需要学习率,不需要考虑震荡/收敛).
- 无需迭代,实现简单.
劣势:
- 特征过多时,计算量爆炸.
- 只适合线性回归问题,对于逻辑回归,神经网络等对求偏导令为零后解不出闭式解,只能迭代.
步骤:
- 对w求偏导,令偏导等于0.
- 对b求偏导,令偏导等于0.
- 两个方程,两个未知数,联立求解 -> 可直接得到w,b.
适用于:
特征数少,数据量不大,需要精确求解的场景.
梯度下降
是什么: 一种迭代优化算法,边走边修正的求最小值算法.
从初始点出发,每步沿负梯度方向(下降最快方向)挪一小步,重复成千上万次,走到最小值附近.
三个关键构件(下山比喻):
| 构件 | 作用 | 比喻 |
|---|---|---|
| 损失函数 | 定义好与坏(误差大小) | 山的形状 |
| 梯度 | 指出最陡方向及陡峭程度 | 罗盘+坡度计 |
| 学习率 | 步长的系数(信任梯度几分) | 固定深度的油门 |
梯度下降计算公式:
参数解释:
: 新的损失函数值
: 旧的损失函数值
: 学习率
梯度: 损失函数对参数的偏导数,指上升最快的方向,所以要使用负梯度.
梯度是什么?
- 一元函数: 某点的斜率(带正负号的数).也就是对损失函数求导.
- 多元函数: 所有偏导数组成的向量. 也就是对损失函数的每个自变量分别求偏导.
梯度大小的含义:
- 梯度大: 此处坡陡,每走一步,损失函数变化都会很大.事半功倍
- 梯度小: 此处坡不陡,每走一步,损失函数变化很小.事倍功半
- 梯度趋于0: 到达极值点(可能是最低点/局部极小/鞍点).在这里意味着离最优解/局部最优解很近了.
为什么沿负梯度走?
- 梯度的本义: 变化最剧烈的方向.
- 而在损失函数中,梯度上升指的是损失上升的方向,所以要使用梯度下降,也就是负梯度.
- 要想使损失函数下降最快,只能沿负梯度走.
- 最快: 单位距离内,每走一次,使损失函数值下降最快.
学习率与步长?
- 学习率 α: 预先设定的系数,全程固定,与地形无关.
- 步长(实际迈多远) = α × 梯度大小: α 是你给的,梯度大小是地形给的,步长是相乘的结算结果.
- α 太小 → 收敛慢; α 太大 → 震荡甚至发散(跨过谷底).
- 经验区间 0.1 ~ 0.001,常配合学习率衰减.
四种梯度下降计算方法
| 方法 | 用于计算梯度的样本源 | 方向怎么来 | 特点 | 用于 |
|---|---|---|---|---|
| 全梯度(FGD) | 全部样本,m个 | m个样本平均 | 方向精确,无噪声,收敛稳;计算开销极大 | 小批量数据精确计算;理论分析基准 |
| 随机(SGD) | 随机从样本中选取1个 | 该样本梯度直接当方向 | 算法简单高效,单步运算快,学习过程中的方差大,震荡不稳定; | 在线学习;超大规模数据 |
| 小批量(Mini-batch GD) | 随机b个,b常取2的k次幂 | 本批内b个样本平均 | FGD和SGD的折中方案,允许GPU并行,深度学习常用. | 深度学习默认选择 |
| 随机平均(SAG) | 随机 1 个 | 1个新梯度+m-1个缓存梯度的平均 | SGD的成本,FGD的平稳;吃内存 | 样本量大但特征维度不多.(否则占用过多内存) |
注意: 梯度下降是数值近似解.正规方程是解析解,精确解,当迭代次数足够多时,两者同时收敛于同一最优点,并无优劣差别.
回归模型评估方法
是什么: 定量判断回归模型预测好坏的手段. 作用: 检验泛化能力、发现问题、对比选型. 在测试集上计算.
MSE 均方误差
公式:
所有预测值和真实值差值的平方差的平均值.
为样本数量,为实际值,为预测值
RMSE 均方根误差
公式:
所有预测值和真实值差值的平方差的平均值开根号.
等于MSE开根号,就这么简单
为样本数量,为实际值,为预测值
MAE 平均绝对误差
公式:
所有预测值和真实值的差值的平均值.
为样本数量,为实际值,为预测值
| 项目 | MAE | MSE | RMSE |
|---|---|---|---|
| 处理误差的方式 | 取绝对值 | 平方 | 平方后开方 |
| 量纲 | 与原数据一致 | 原数据的平方 | 与原数据一致 |
| 大误差/离群点 | 不敏感(线性) | 重惩罚(平方放大) | 敏感(继承自平方) |
拟合
拟合: 模型从给定数据中寻找特征与标签关系的过程.
-
欠拟合: 训练集差,测试集也差. 原因: 模型过于简单.
解决方案:
- 添加其他特征: 将线性模型通过添加二次项或更高次项使模型泛化能力更强( 说直白一点,一次线性模型是只能画直线,而添加了二次项或更高次项,则可以让模型去画曲线,以此增强拟合能力).
- 采用能力更强的模型
-
过拟合: 训练集好,测试集差. 原因:
- 噪声多.
- 样本量太少.
- 模型过于复杂.
解决方案:
- 重新清洗数据: 对于过多异常点数据,数据不纯的地方进行再处理
- 增大数据的训练量:
- 正则化:
-
正好拟合(目标): 训练集好,测试集也好.
泛化: 模型处理未见过的新数据的能力,是训练的最终目标.
奥卡姆剃刀: 泛化性能相同时,优先选择简单的模型.
正则化
是什么? 在损失函数上额外加一个”惩罚项”,用于约束权重w的大小,让模型学得更简单,是一种缓解过拟合的技术.
公式:
| 符号 | 含义 |
|---|---|
| 原始损失函数 | |
| 新损失函数 | |
| 这个整体称为惩罚项 | |
| 惩罚系数, 控制原始损失与惩罚两者的平衡 |
正则化的分类
L1正则化:
L2正则化:
参数解释:
| 符号 | 含义 |
|---|---|
| 样本个数(第 1 个求和的上限) | |
| 特征个数 / 权重个数(第 2 个求和的上限) | |
| 第 i 个样本的真实值 | |
| 第 i 个样本的预测值 | |
| 第 j 个特征的权重 | |
| 惩罚系数, 控制原始损失与惩罚两者的平衡 |
对比L1与L2正则化
两句话总结: 前提: 总权重为固定值
- L1喜欢集中: L1完全无所谓怎么分配,优化器可以自由地干掉一个,把权重让给另外一个 -> 稀疏
- L2喜欢摊派: L2惩罚减半,优化器被迫人人有份,个个很小 -> 稠密
| L1 正则化 | L2 正则化 | |
|---|---|---|
| 惩罚项 | $\alpha \cdot \sum_{j=1}^{n} | w_j |
| 别名 | Lasso | Ridge(岭回归) |
| 权重结果 | 部分权重精确 = 0(稀疏) | 权重逼近 0 但不为 0(稠密解) |
| 额外能力 | 自动特征选择 | 解决多重共线性 |
| 梯度(惩罚部分) | ,常数拉力 | ,比例拉力 |
| 对大权重的惩罚 | 相对“宽容”(线性增长) | 极其狠(平方增长) |
| 对小权重的惩罚 | 相对更狠(一刀切砍掉) | 温柔(越接近 0 拉力越弱) |
KNN算法
是什么? 是一个惰性算法,它没有训练过程,只是根据特征自动去训练集中匹配K个样本的相似性最后返回分类或回归值.
定义: 如果一个样本在特征空间中的k个最相似的样本中的大多数属于某一个类别,则该样本也属于这个类别.
分类: 属于有监督学习,既可以完成分类任务,也可以做回归计算.
KNN的核心步骤: 预测新样本时会进行如下步骤:
-
计算新样本与训练集中的每一个样本的距离.
-
选出距离最近的K个样本(K个邻居). 距离计算方式默认为欧几里得距离(欧氏距离),可选还有曼哈顿距离.
闵可夫斯基距离:
p=1时,为曼哈顿距离.
p=2时,为欧几里得距离.
p>=2时,为切比雪夫距离.
-
分类任务: K个邻居投票,少数服从多数,票数最多的类别作为预测结果.
-
回归计算: 取K个邻居标签的平均值作为预测值.
由此可见,训练集就是全部的样本数据,KNN算法没有真正的”训练”过程.
在KNN中,有一个关键参数K:
- K值太小: 模型容易变得复杂,过拟合.
- K值太大: 模型学不会,欠拟合.
- K=N: 这个完全没有意义,无情的投票机器.
K值设置为奇数是最为推荐的,用以避免平票.
注意点:
- 欧几里得距离,对于异常点很敏感,所以必须要对数据进行预处理,解决量纲问题. // todo
- 高维下性能退化: 当维度很高时,所有点之间的欧氏距离会趋于相同,失去了区分度,最近邻在此时失去了意义.
- 普通KNN算法,对每个特征维度都隐式的声明各维度独立且等权.即各维度的重要性(贡献度)相同.
特征预处理
为什么? 不同特征的单位不一样,数值大小不一样,模型在学习时会优先学习数值较大的特征,较小的特征被忽略.为了解决这个问题,需要对数据进行预处理,有两种方式: 归一化和标准化.
归一化
将原始数据进行变换,把数据映射到[min,max]之间,默认是[0,1]之间.
公式1: 将数据映射到[0,1]之间:
公式2: 将数据映射到指定区间之间[mi,mx]:
注意点:
归一化对异常点(离群点)异常敏感.
标准化
将原始数据进行变换,把数据映射为均值为0,标准差为1的标准正态分布的数据.
公式:
| 对比归一化和标准化 | 归一化 | 标准化 |
|---|---|---|
| 异常点敏感度 | 高 | 低 |
| 结果范围 | 固定在[0,1] | 无固定范围,均值0,方差1 |
| 适用场景 | 数据边界明确,分布集中 | 分布近似正态或存在异常值,多数机器学习算法默认选择. |
支持与分享
如果这篇文章对你有帮助,欢迎分享给更多人或打赏支持!






















