机器学习笔记
2026/5/22 9:19:41 网站建设 项目流程

明确问题与目标

先搞清楚要解决什么问题,比如预测房价,判断垃圾邮件,输出是单个值还是多个值?

数据收集

从各种渠道获取数据:数据库、日志、传感器、公开数据集等,数据的质量通常比模型的复杂度更重要。

数据清洗与预处理

处理缺失值、处理异常值、编码类别特征(one-hot、label encoding 等)、特征缩放(标准化/归一化)文本、图像等需要额外的特征提取或表示(如词向量、图像resize等)

划分数据集

  • 训练集(train):用来“学习”参数
  • 验证集(validation):用来调参、选模型
  • 测试集(test):只在最终评估时使用

常见比例:6/2/2、7/1.5/1.5 等(具体视数据量而定)。

选择模型

根据问题选择合适的模型,比如:

线性回归模型

分类

1、多元线性回归

2、多项式回归
先把特征做多项式扩展,再用普通线性回归

评价指标

是评价模型预测与泛化性能的核心指标

MAE(均方误差)

对异常值不敏感——误差10和误差100,贡献是10倍而不是100倍

MSE(均方误差)
因为开平方了,对异常值更敏感

RMSE(均方根误差)

MSE的平方项对异常值的惩罚比RMSE和MAE更狠,所以如果你想让模型极度厌恶大误差,用MSE做损失函数更直接

R2


衡量回归模型对数据变异的解释程度,数值在0到1之间,越接近1说明模型拟合得越好,因为MSE会受数值单位影响,而R2则是纯粹只关注比例,比如

真实值 预测值 平均值
100万 110万 200万
200万 190万 200万
300万 280万 200万

TSS(总平方和) = 20000,
RSS(残差平方和)= 600
R² = 1 - 600/20000 = 0.97

模型解释了97%的房价波动,拟合效果非常好。

正则化

Lassos(L1)
所有非零权重都有惩罚;弱特征的权重更容易被压成 0,相当于在损失函数后面加一个λ∣w∣

Ridge(L2)
所有非零权重都有惩罚;权重越大,惩罚越重,权重越小,惩罚越小,所以弱特征的权重会被压带接近于 0,相当于在损失函数后面加一个λw2

损失函数

损失函数的来源主要就是从评价指标中选出一个合适的指标,通常选用MSE,因为通过梯度公式可知,RMSE的梯度多了一个 1/RMSE 的分母项,当模型快收敛了,RMSE接近0,梯度会变得非常大,导致参数更新步长突然变大,所以MSE综合来说更适合做损伤函数

线性模型 - 解析法

线性回归模型最优解的求解过程是带正则化的最小二乘法,以一元多项式为例,给定数据点(Xi,Yi),希望用一个 k 阶多项式拟合

目标是找到参数向量:w = [w0,w1,w2,w3,w4…wk]使得预测值尽可能接近真实值,评估标准就是通过损失函数来确定,损失函数越小代表模型性能越好,损失函数是

所以求解最优解过程就是围绕这个顺手函数求解的过程,求解过程如下

首先带入写成矩阵形式y^ =Xw,其中X是全部多项式部分取值的矩阵

多项式函数值y取值是向量

带入矩阵的最小二乘法公式,推导过程如下,公式推导过程涉及到矩阵的求导公式

即可通过训练集数据计算出线性回归最优解参数向量

如果是考虑正则化的话,那么评价标准公式就变成了

对引入正则化的损伤函数求最优解,求出来的结果就是

引入正则化机制
正则化是相当于在损伤函数的基础上加了一个惩罚项,在默认写法里,每一个参数 的惩罚权重是一样的(并没有“高阶参数惩罚得更重的内在机制)

比如我们模拟一个案例y=sinx + randomNum, randomNum取值[-0.5,0.5] ,我们随机生成300个x,x取值范围在[-2,2],我们选择一个20阶多项式模型,按模拟结果反推我们训练处的最优解模型应该是y=asinx(x + b)这种模式,可近似套用泰勒展开式,结果为

虽然我们指定的是20阶,但实际上前4个参数基本就能确定一个y=asinx(x + b)函数了,后面更高维的参数则是为了去更好的覆盖那些噪音点,表现出来的形式就是让函数不再是一个光滑的曲面,而是剧烈抖动的曲线,这样确实能更好的拟合噪音,但同时也牺牲了通用性,所以在训练分数很高,但测试得分通常就不太好看了,所以正则化则是更倾向于惩罚那些高阶项,因为低阶项虽然系数大,但低阶项是函数的基本骨架,如果调整低阶项系数会使得损失函数误差整体大幅提升,这样会得不偿失,而高阶项虽然系数不大,但同时对损失函数的贡献也不大,引入正则化惩罚机制后,就不会再毫无顾忌使用高阶项系数去弥补那点微不足道的误差,所以会更倾向于惩罚高阶项

解析法的缺点
我选定一个 20 阶多项式的模型,用 3 万个训练数据训练,如果用解析法的话运算成本过于庞大,所以更适合使用梯度下降法求解,那该模型的损失函数是一个21维的向量,此处的过程完全同上,区别在于解析法是直接套式解出最优解,而梯度下降法则是像下山一样,通过各处几乎最抖的破下到入口处,即损失函数最小的极值点就是参数的最优解

线性模型 - 梯度下降法

假设我们有一个二次型损失函数,包含三个权重参数w1,w2,w3

纯数学思路

我们选用一个更直观函数模型f(x) = (x2− 2)2, 来给大家演示这个过程 ,这个函数非常简单,我们一眼就能看出它的最小值是负根号2和正根号2,但我们先假装看不出来,通过梯度下降法逐步推导步骤如下

  • 首先计算该函数梯度,一元函数的梯度即为它的导数 f(x) = 3x3- 4x
  • 套用学习率公式,Xnew = Xold −αf ′(Xold),并指定学习率为0.1
  • 随机选个起点开始走,比如从 x = 0 出发,当前的梯度为-6,用梯度下降更新下一步的x为0.6
  • 从 x = 1 开始走,当前的梯度为-2.7,用梯度下降更新下一步的x = 1 + -2.7*0.05 = 1.33
  • 从 x = 1.33 再走,当前的梯度为-1.8,用梯度下降更新下一步的x为1.40
  • 依次类推,这些 x 一步步地向 1.44靠近,但同时但每一步走得越来越小,因为函数这个函数的结构特点就是越接近最小值,梯度(导数)越是趋近于0,我们让它走100步,就基本能逼近最优解了
标准批量梯度下降案例

首先要确定模型,比如我们这里先提前确定下来需要用的是简单线性回归模型,该模型的损失函数模式就长这个样子,假如我们选的线性模型有2个权重参数w1和w2

因为xi 和 yi都是已知的了,而w1、w2、b是未知的,也是需要我们求最优解,所以这里本质就是求一个最优[w1,w2]使得L(w,b)最小,最好是接近于0,假设我们只有三个样本(1,2,7) (1,4,9), (2,5,12),带入这个式子就更直观了

同样分别对w1和w2求偏导,式子如下

学习率使用默认值0.001,此处的梯度下降公式是

随机给w1和w2一个初始值(0,0)

  • 第一轮,带入(0,0),因为我们这里偏执b默认是0,预测值y也是(0,0,0),所以带入损失函数是91.3,带入w1和w2的梯度公式求得他们在(0,0)这个点的梯度值分别是−26.7,−70.7,带入梯度下降公式,首轮更新后w1和w2的值更新为(0.026,0.0707)
  • 第二轮,权重参数w从点位(0.026,0.0707)开始出发,带入w1和w2的梯度公式求得他们在(0.026,0.0707)这个点的梯度值分别是-25.8,−67.9,带入梯度下降公式,首轮更新后w1和w2的值更新为(0.052,0.139),损失函数下降到了85.2
  • 第三轮,权重参数w从点位(0.052,0.139)开始出发,带入w1和w2的梯度公式求得他们在(0.052,0.139)这个点的梯度值分别是-24.9,−65.5,带入梯度下降公式,首轮更新后w1和w2的值更新为(0.077,0…204),损失函数下降到了47.2

整个训练流程,w1和w2参数逐步往最优解靠近,损伤函数不断降低,大于在1000轮下降后逼近最优解

批量梯度下降的问题

运算成本依然过高,上面的演示太粗略了,我们把第0轮的运算完整呈现出来就是

1.先算预测值 y1^ =0, y2^ =0, y3^ =0,和实际值(7,9,12)的误差就是(-7,-9,-12)
2.带入梯度公式计算

虽然本案例只有2个参数,但虽然本案例只有2个参数,但可以想象,当模型有成百上千个参数时,我们需要计算当前参数点下所有样本的预测值和真实值的差值,然后分别带入各个参数在当前点位的梯度公式,所以运算量依然是相当庞大的

学习率取值注意点
学习率参数是一个非常核心的参数,取值的大小直接影响我们训练过程,比如我们上面选用0.001的学习率,经过1000次求出最优解是比较合理的选择, 求解过程细节图如下

学习率过小,那么运算步骤会显著增大,如果学习率过大,可能永远找不到的风险,例如如果学习率使用0.01,就会出现如下情况

所以学习率的选择上通常准寻一些标准化的大小

  • 对普通回归 / 小模型 / 标准化后的特征:
  • SGD/动量:η 在 1e-3 ~ 1e-1 之间试
  • Adam:1e-3 是非常常见的起点
  • 对深度网络(尤其是图像任务):
  • SGD with momentum:0.1、0.01 是常见起点
  • Adam:1e-3、3e-4

梯度下降注意点
损失函数越大的时候,比如各个权重参数还是初始化状态,和最优解距离比较远的时候,因为此时初始化的权重参数点位可能本身就在一个函数上比较陡峭的点位,同样的步长,因为初始化所在的点位比较陡峭,也就是当前点位梯度通常会比较大,所以刚开始的时候梯度下降幅度是非常明显的,但后面逐步靠近最优解的过程,函数会趋于平稳,也就是梯度会越来越小,下降的也会越来越缓慢

逻辑回归

最大似然概念

比如四个病人,病人1和病人2患病,模型给出患病的概率是0.9和0.8,病人3和病人4未患病,模型给出患病的概率是0.1和0.2,那么最大似然计算得出是0.9*0.8 * ( 1 - 0.1) * (1- 0.2) = 0.5184同一批样本的情况下,模型输出概率值的最大似然可以有效衡量模型对训练数据集拟合程度的核心

概念

逻辑回归是一种用于二分类问题的监督学习模型,用于判断样本属于哪一类,比如是否生病,是否垃圾邮件,输出不是直接给“类别”,而是给出一个属于正类的概率。工作机制是先把输入特征做线性组合,然后通过sigma函数然后把这个线性结果映射到 [0,1] 区间,表示概率,对应的公式主要就是

  • z = wT+b
  • σ(z) = 1 / (1 + e-Z)

模型形式

zi = w1x1 + w2x2 + w3*x3

y^ = σ(zᵢ) = 1 / (1 + e-zi)

数据区分度

预测某个行为是否发生,x1是点击次数,x2是停留时长,这两个指标只是表面更可能购买,但并不是非常强的信号,那么模型的也会输出类似 0.6、0.7 这种概率,同时表现在数据图上,也是这几个点位为交织在一起的,而不是离散区分的,比如(1,1,0), (2,1,0), (3,2,1) (4,3,1)

强烈的信号表现在数据图上通常就是点位呈现离散趋势,比如做贷款逾期预测,特征可能包括逾期次数、收入水平、负债率、信用分,模型的就可以输出0.9以上的概率

损失函数

逻辑回归的损伤函数和线性函数不同,不是
模型输出概率值的最大似然可以有效衡量模型对训练数据集拟合程度的核心,但无法达到真实值偏差越大,惩罚会越重,真实值偏差越小,惩罚会越小的效果,所以我们对最大似然再取 log,把乘法变成加法,便于优化,再取负号,把“最大化概率”变成“最小化损失”,损失函数内容如下

对于单个样本则是直接除以N,公式如下

实战案例

  • 比如真实标签是 1,但你预测的概率很小,比如p = 0.01,那么损失函数的值就是L=−log(0.01) ,是一个很大的值,意味着惩罚很重
  • 如果真实标签是 0,但你预测成 0.99,那么损伤函数值就是log(1−0.99) = -log(0.01),也是一个很大的值,意味着惩罚很重
  • 如果真实标签是 1,但你预测成 0.99,那么损伤函数值就是log(1−0.99) = -log(0.99),是一个接近0的值,意味着惩罚很轻

注意点
损失函数值较小,可以证明模型在训练集上拟合得好,证明它已经掌握了这批训练样本的规律;但如果训练样本过于单一、覆盖面太窄,那么模型即使训练得很好,到了新数据上也可能表现一般,所以想要保证模型实战性能,就必要要保证训练数集质量的基础上让模型预测结果损失函数值尽可能小

梯度下降法

对逻辑回归损失函数求导,对 y^ 求导

对线性函数z求导

所以损失函数对z的梯度,通过链式求导法则得出dL / dz = y^ - y

线性模型z的损失函数对w1、w2、w3的梯度分别是x1,x2,x3,所以由链式法则推出dLi/ dwi = (y^ - y)xi

梯度下降实战

比如我们预测客户是否下单的逻辑回归函数,x1是点击次数,x2是停留时长,有如下几个样本(1,1,0), (2,1,0), (3,2,1) (4,3,1),罗列出运算所需数据

假设有2个参数x1,x2,截距b

  • 首轮初始值w1,w2,b为(0,0,0),线性模型z = 0,带入sigma函数得σ = 0.5,也就是预测值为0.5,带入损失函数−log(0.5)=0.6931
  • 第一轮计算出w1和w2点位损失函数的梯度分别为-0.25和-0.5,更新后的参数w1=0.05, w2=0.025,b=0,带入这四个样本,分别求出线性模型的值z1 = 0.1, z2 =0.125 z3 =0.2 ,z4 = 0.275,再把z分别带入sigma函数 ,σ1 =0.5250, σ2=0.5312, σ3= 0.5498, σ4=0.5684,把这四个值带入交叉熵损失公式,然后除以4.得到的结果就是0.676
  • 循环往复,大约在第500次的时候求得最优解,损失函数最小是0.5350,此时对四个样本的预测值大约是(0.6498, 0.6762, 0.7080, 0.7540)

分类模型常用指标

全部数据样本ALL,预测结果划分四类,TP(真阳性)、FP(假阳性)、FN(假阴性)、TN(真阴性)

准确率 Accuracy:比如你有 100 个病人,模型猜对了 80 个,那准确率就是 80%
精确率 Precision:所有被模型预测成有病的人里面,真正有病的有多少,比如50个预测有病的人45个人真的有病,精确率就是90%
召回率 Recall:召回率 Recall,比如有病的人是60人,找出来了45个有病的,召回是75%
F1:衡量Precision 和 Recall 平衡得怎样

损失函数是在模型训练过程中使用的优化目标,用来引导参数更新,把模型往“更好的方向”拉;Accuracy、Precision、Recall、F1 则是训练完成后用来评价模型真实预测能力的指标,相当于给模型“打分”。

KNN

概念

KNN不同于逻辑回归、线性回归这类,并不是是参数化模型,同样的也不会对已有的数据集进行学习,只是把训练数据存起来,它的工作机制是当接收到你抛给它的新样本后通过当前样本在数据集中的位置和临近元素来对这个新样本定性和预测,比如用KNN 做房价预测,常见特征
x=[面积,房龄,楼层,距地铁,…],y=这套房子的总价或单价,有历史成交数据的N套房,每套有特征 Xi和价格 Yi,新上架了一套房源只有特征,我们可以通过KNN模型给这套新房源辅助定价,基于KNN这种特点,我们通过用用一个二维数组(矩阵)来存所有样本的特征向量,比如

# 假设有4个样本,每个样本3维特征X=np.array([[1.0,2.1,3.3],# 样本13维向量[0.9,1.8,3.0],# 样本2[3.2,0.1,0.4],# 样本3[2.9,0.2,0.5],# 样本4])#X.shape==(4,3)

样本间距离的计算公式

欧氏距离(默认)

特征空间里“直线距离”,多维勾股定理。

曼哈顿距离
像在棋盘上走,只能横竖走

余弦距离
常用于文本向量、推荐系统等“方向比长度重要”的场景。

KNN的归一化和标准化

比如使用KNN默认距离计算公式欧氏距离,有两套别墅房源,面积相同都是5000平米,但房龄一个1年,一个30年,然而在房屋面积这个大额数值影响下,房屋年龄的数组权重明显和房屋年龄对实际价格的影响不匹配,所以使用归一化,也就是对于特征有明确取值范围的,可以使用归一化,比如这个区域最大户型面积是1万,最老房型是50年,所以使用归一化把特征压缩到一个[0,1]区间里,把这两套房源特征分别被压缩到同一起跑线,两套房型被压缩后是[0.5, 0.02], [0.5, 0.6]

参数加权

归一化后,面积和房龄的影响被拉齐到同一起跑线了,这种情况下再去加权计算,比如高档别墅的无论使用寿命还是黄金居住期都远高于普通商品房,国外更是很多百年以上老别墅目前还在居住,所以相比于寿命,房屋面积对居住体验的影响更大,所以面积和房龄的权重分别是1和-0.2,所以,所以这里如果是普通商品房,人们更关注房屋年限,通常老破大不如小而美,所以房屋年限权重会更高,面积和时间的权重分别是1和和-0.34带入上面2套,计算最终值为0.492和0.38

位置权重

当训练样本数据经过归一化/标准化和加权处理后就可以被KNN存储了,KNN会存储这些训练好的样本特征值和真实结果,当用于预判新数据时,KNN会比较这些新数据和样本数据的距离,找出附近最相似的 K 个已知样本,根据这些邻居的标签来判断新数据是否患有心脏病,其中这个K是可以由开发者来制定的核心参数,比如指定K=5,那就是参考离它最近的五个样本数,比如最近5个邻居都有心脏病或都没心脏病那么预测结果就显而易见,但如果最近的5个邻居三个有病,两个没病呢,那么模型机会采用少数服从多少原则,认为这个有病

总结

所以样本数据转换为向量后,然后进行归一化或标准化和参数加权处理后,就能直接能存入knn用于后面待预测数据的参照系,

感知机

概念

我们拿一批已经标注好的邮件训练感知机,模型通过不断调整特征权重,学习出一条能够区分垃圾邮件和正常邮件的分类边界。训练后,那些在垃圾邮件中更常见、且对区分两类邮件更有帮助的特征词,比如“免费”“中奖”“链接”“感叹号”等,通常会得到较高的正向权重。之后新邮件如果包含这些特征,模型计算出的分数就会更高,从而更可能被判定为垃圾邮件。

注意点

感知机学习的哪些特征组合起来,更容易把垃圾邮件和正常邮件分开,在训练样本中,如果一个特征总是帮助把垃圾邮件和正常邮件区分开,它的权重会变大,所以它本质上是监督学习下的线性分类边界学习,比如“免费”常见于垃圾邮件,但“免费试用”、“免费课程”也可能出现在正常业务邮件里,所以感知机学到的是:“免费”这个词在当前数据分布下,对判定垃圾邮件有较强贡献

而对于这种特征词,是否出现,出现多少次,这些特征的权重多大,偏置项是多少,都会一起决定最终分数。总分 = 各特征值 × 对应权重 + 偏置

总结

感知机通过监督学习从已标注邮件中学习一组特征权重,找到能区分垃圾邮件和正常邮件的线性边界;那些在垃圾邮件中更具有区分性的特征,如“免费”“中奖”“链接”等,通常会被赋予较高的正向权重,从而使包含这些特征的新邮件更容易被判为垃圾邮件

决策树

6. 定义损失函数和优化方法
损失函数:衡量模型预测与真实标签之间差距的函数
回归常用 MSE(均方误差)
二分类常用交叉熵(Binary Cross Entropy)
优化方法:如何调整参数使损失变小
常用梯度下降及其变种(SGD、Adam、RMSProp 等)

7. 模型训练(参数学习)
核心过程是“反复试错、逐步改进”:

从训练集中取一批样本(一个 batch),用当前模型做预测,计算损失(预测和真实之间的误差),通过反向传播等方法计算梯度,根据梯度更新模型参数(权重、偏置等)。重复以上步骤多个 epoch(完整遍历训练集的次数),目标是让训练集上的损失越来越小,同时尽量避免过拟合。

无监督模型

上面的线性回归、逻辑回归、KNN、决策树都是无监督模型,监督模型的特点是有“输入 + 正确答案”,比如通过邮件内容判断是否垃圾邮件,通过房屋信息判断房价,通过图片判断猫狗

比如KNN和K-Means比较像,都通过距离来分类,而K-Means是像是老师把全班同学按身高、体重自动分成几组,KNN像是来了一个新同学,问他你最像哪几个老同学,比如可以做如下几个分类,近30天购买次数、近30天消费金额、平均客单价、浏览次数、加购次数

实战案例

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询