本篇纯手搓,适合新手入门,想对机器学习算法原理有初步了解的那种。主包也是0基础自学的,看了很多帖子,有的帖子很多术语,就又去找另外的帖子又去问AI的。所以现在写出来的都是自己再过一遍的,一些术语也有附带解释,自认为没什么疑难点了。可能不全面,但一定能懂。

目录

一、线性回归

二、逻辑回归

三、KNN(K近邻算法)

四、K-means

五、朴素贝叶斯(NB)

六、支持向量机SVM

七、决策树(DT)

八、由决策树集成学习的算法

8.1 随机森林(RF)

8.2 GBDT

8.3 XGBoost


一、线性回归

机器学习的祖师爷,原理也很简单,通过对XOY二维平面上的点线性拟合,来预测只知道X值的点对应的Y值是多少。

优点 缺点
实现简单 对高复杂数据不适用
非线性模型的基础 非线性或数据特征间具有相关性的多项式难以建模

二、逻辑回归

用于分类任务(通常是二分类),利用Sigmoid 函数将线性回归的输出映射为一个概率值,从而进行分类。

sigmoid=\frac{1}{1+e^{-x}}

sigmoid函数取值在(0,1)之间,所以解释为概率。

当概率大于阈值时,判断为类别a,否则为类别b。

优点 缺点
实现简单 特征空间很大时,性能欠佳
计算量小 只能处理二分类线性可分问题
可观测样本的概率分数 容易欠拟合,一般准确度不高

三、KNN(K近邻算法)

对于待判断的点,找到离它最近的几个数据点,根据它们的类型决定待判断点的类型。

优点 缺点
思想简单 计算量大
适用非线性 样本不均衡问题
准确度高 需大量内存
对异常值不敏感

四、K-means

聚类算法,将数据分为K个簇,使每个数据点属于距离最近的簇头。

步骤:

  1. 随机选择K个簇中心(初始簇中心)。
  2. 将数据中的每个点分配到最近簇中心的簇(目标是最小化每个节点到簇中心的距离)。
  3. 计算每个簇的中心(簇中所有点的均值作为新的簇中心)。
  4. 重新分配与更新(重复步骤2~3),直至簇中心不再发生变化。
优点 缺点
易实现 K值需先确定
内存占用小 需先选取初始聚类中心点
不适合所有数据类型
需检测离群点

五、朴素贝叶斯(NB)

朴素贝叶斯基于条件概率,可以理解为人脑在知道新的证据后如何更新信念

核心公式:P(Y=c | X)=\frac{P(X|Y=c)P(Y=c)}{P(X)}

以下是对公式的解释:

  • Y=c:样本属于类别c
  • X:样本的特征
  • P(Y=c|X):后验概率。即已知样本特征X时,它属于类别c的概率。也可以理解为,获取样本特征信息后,对“样本属于某类”的概率的修正结果。
  • P(Y=c):先验概率。类别c在所有样本中出现的基础概率。无任何特征信息,仅基于统计/历史。
  • P(X|Y=c):似然概率。已知样本属于类别c时,它拥有特征X的概率。
  • P(X):样本出现特征X的总概率。

举个🌰:

假设我们统计了 100 封邮件,其中垃圾邮件 30 封,正常邮件 70 封。

同时在这些邮件里,统计两个关键词“中奖”/“发票”的出现情况:

  • 垃圾邮件中,有 “中奖” 这个词的概率是 80%,有 “发票” 这个词的概率是 70%。
  • 正常邮件中,有 “中奖” 这个词的概率是 5%,有 “发票” 这个词的概率是 10%。

现在收到一封新邮件,里面同时有 “中奖” 和 “发票” 两个词,要判断它是不是垃圾邮件。

  • 概率 1:这封邮件是垃圾邮件的概率=垃圾邮件的基础概率 × 垃圾邮件里有‘中奖’的概率 × 垃圾邮件里有‘发票’的概率=30% × 80% × 70% = 16.8%。
  • 概率 2:这封邮件是正常邮件的概率=正常邮件的基础概率 × 正常邮件里有‘中奖’的概率 × 正常邮件里有‘发票’的概率= 70% × 5% × 10% = 0.35%。

在这个例子中,P(X)视为1。

因为概率1远大于概率2,所以判定这封邮件为垃圾邮件。

注意,朴素贝叶斯一定要特征相互独立(相互独立才能概率相乘

优点 缺点
有坚实的数学基础 需计算先验概率
对小规模数据表现好 不适用于特征相关数据
对缺失值不敏感

六、支持向量机SVM

找到不同类别之间的分类面(也称“超平面”),使两类样本尽量落在面的两边,且离分类面尽量远。

  • 几何间隔:样本到超平面的垂直距离。
  • 支持向量:几何间隔最小的样本(决定了超平面的位置)。(实际上起作用的也只有这部分向量)

支持向量机的目标是最大化最小间隔。

有两种分类情况:

1. 线性可分

分类约束条件:所有样本被超平面正确分类,且几何间隔≥1

2. 线性不可分

线性不可分总共有两种情况:1)低维空间找不到超平面分开两类样本;2)样本中存在异常值

1)2)分别对应的解决方法

1)引入核函数(知道这个名称就好了具体是啥不用管,不同样本分类中核函数都不一样),将样本映射到高维空间(结合向量映射理解),使其变得线性可分;

2)引入软间隔(也称“松弛变量”),退一步,允许少量样本违反分类约束条件。软间隔表示样本的“违规程度”。

目的是平衡“间隔最大化”和“分类错误最小化”

优点 缺点
可解决高维问题 当样本多时,效率不高
能处理非线性特征的相互作用 对非线性问题难以找到通用的核函数
无需依赖整个数据 对缺失数据敏感

七、决策树(DT)

以树状结构做决策:每个“分叉点”是对一个特征的判断;每个“终点”是最终的分类结果。

纯度:节点中样本类别的集中程度(纯度越高,判断越明确

🌰: 初始样本集有10个样本(6个"去野餐",4个"不去"),纯度较低;用"天气是否晴朗"划分后,"晴朗"子集中有6个"去野餐"(纯度100%),"不晴朗"子集中有4个"不去"(纯度100%),这就是最优划分。

最大化纯度方法

1. 信息熵+信息增益

信息熵衡量“样本集混乱程度”

信息增益 = 划分前信息熵 - 划分后各节点信息熵的加权和

增益越大,纯度提升越多,分类效果也越好】

存在偏好“多取值特征”的问题。举个🌰,如果用身份证号做判断条件,信息增益都很大,无法比较;这样分类出来也没有意义,没有泛化能力。

2.信息增益比

针对信息增益的问题,引入信息增益比。

增益比=信息增益/特征熵

还是上面身份证号的例子,这种情况下特征熵极大,于是增益比被压小到可比较的范围

3. 基尼系数

衡量“随机抽取两个样本是不同类别”的概率。基尼系数越小,纯度越高。

目的:最小化类别划分后子节点的基尼系数加权和

优点 缺点
计算简单 容易过拟合
能处理不相关的特征 易被攻击
适合有缺失特征的样本 忽略了数据间的相关性

八、由决策树集成学习的算法

集成学习:通过组合多个弱学习器(如决策树),以获得比单一模型更好的性能。

8.1 随机森林(RF)

并行集成决策树,每棵决策树随机选取训练样本,随机选取特征。

随机森林解决两类问题:

1)分类问题:每棵树给出一个预测,最终预测结果是所有树预测结果的多数投票。

2)回归问题:所有树预测结果的平均值。

8.2 GBDT

串行集成决策树,逐棵树迭代纠错,最终叠加所有树的结果形成完整模型

步骤:

  1. 从初始模型起步。先设定一个简单的初始模型,一般是训练集标签的均值,这个初始模型能给出一个基础的预测值。
  2. 计算伪残差,确定纠错目标。有了初始模型的预测值后,就可以算出当前模型的预测和真实值之间的误差(即伪残差)。它代表了当前模型还没拟合到的部分,是下一棵树需要修正的 “目标”。

  3. 训练新树拟合伪残差。接下来训练一棵新的CART回归树,这棵树的训练数据是伪残差。这棵树的作用就是学习 “怎么调整当前模型的预测值,才能减小误差”。

  4. 加法集成,更新模型。新树训练好之后,把这棵树的预测结果乘以一个小的学习率(控制每棵新树的预测结果在集成模型中的贡献权重),串行加到原来的模型上,形成更新后的模型。

  5. 重复上述步骤,迭代直到收敛。

残差:模型预测值和真实值的差距。

伪残差:负梯度,损失减小最快的方向。在MSE损失(平方损失MSE=\frac{1}{n}\sum_{i=1}^{n}(y_{i}-\hat{y_{i}})^{2})下,伪残差=残差。

CART回归树:按样本的特征把数据分成小群体,用每个小群体的平均值预测新样本连续数值的工具。GBDT的每棵树都是CART回归树,输出连续纠错值,才能叠加。

8.3 XGBoost

原理同GBDT。

对GBDT的改进:

  • 在目标函数中加入正则化项,降低模型复杂度,提高泛化能力
  • GBDT仅用损失函数的一阶梯度优化,而XGBoost利用泰勒展开将损失函数近似为二阶函数,收敛更快
  • 生成更优树。计算每个特征分裂点的“分裂增益”(目标函数降低的程度),选择增益最大的分裂点。
Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐