一、逻辑回归
逻辑回归(Logistic Regression)是一种广泛使用的分类算法,以作者的理解,它是在线性回归【线性回归:拟合一条最接近自变量X与因变量Y关系的直线,线性回归可预测连续值】的基础上添加了一个逻辑转换函数(通常是Sigmoid函数),以将输出值映射到[0,1]区间,然后根据一个阈值(通常是0.5)来进行分类。
通过这种方式,逻辑回归将线性回归的输出转换为一个介于0和1之间的概率值,再通过阈值判断来实现分类任务。
优点和应用
- 简单易用:逻辑回归是一个非常简单但非常强大的分类算法,特别适用于二分类问题。
- 概率输出:逻辑回归不仅给出类别标签,还能提供类别的概率,这在很多应用中非常有用。
- 广泛应用:逻辑回归广泛应用于医学、社会科学、金融等领域,用于疾病预测、用户行为分析、信用评分等任务。
二、分类回归树
分类回归树(Classification and Regression Tree, CART)是一种决策树模型,用于处理分类和回归问题。决策树通过一系列的决策节点将数据分割成更小的部分,直到达到叶子节点。每个决策节点基于某个特征的特定值来划分数据,叶子节点则代表最终的输出值(类别或连续值)。
决策树的基本组成部分
根节点(Root Node):
- 决策树的顶端节点,是树的起点。
- 它包含了整个数据集,并根据某个特征的特定值进行第一次划分。
内部节点(Internal Node):
- 位于树的中间,连接根节点和叶子节点。
- 每个内部节点基于某个特征的特定值继续划分数据。
叶子节点(Leaf Node):
- 决策树的终端节点,不再进行进一步的划分。
- 代表最终的输出值,在分类问题中是类别标签,在回归问题中是一个连续值。
分类回归树的构建过程
选择最佳分裂点:
- 对每个特征进行尝试,根据某个准则(如信息增益、基尼指数或方差)选择最佳分裂点。
- 信息增益:通常用于ID3和C4.5算法,度量特征对数据集的纯度提升。
- 基尼指数:用于CART算法,度量数据集的不纯度。
- 方差:用于回归树,度量连续变量的分散程度。
数据集划分:
- 根据选择的最佳分裂点,将数据集划分成两个或多个子集。
- 对每个子集重复上述过程,直到满足停止条件(如叶子节点中的样本数小于某个阈值,或者达到最大树深度)。
构建子树:
- 对每个子集递归地构建子树,直到所有数据都被正确分类或达到停止条件。
让我们理解一下决策树的分裂。
在决策树的背景中,“分裂”是一个过程,通过这个过程,数据会被根据某个特定的标准(如某个特征的值)划分为两个或更多的子集。
想象一下,你有一篮子水果,里面既有苹果又有香蕉。你的目标是将苹果和香蕉分开。一种简单的方法是根据“水果类型”进行“分裂”:所有的苹果放在一个篮子里,所有的香蕉放在另一个篮子里。
在决策树中,我们也做同样的事情,但不是与水果,而是与数据。我们查看数据的特征(例如年龄、性别、收入等)并选择一个特征来“分裂”数据,以使结果更“纯”。纯度意味着尽可能减少每个子集中类别的混合。例如,假设我们有以下数据,并想知道谁会在雨中打伞:
名字 是否带伞 Alice 是 Bob 否 Carol 是 如果我们知道每个人都是因为他们不想淋湿而带伞的,我们可以使用“不想淋湿”这一特征进行“分裂”:那些不想淋湿的人会带伞,而其他人则不会。在这里,“分裂”是一个决策点,它告诉我们如何将数据分为两部分:带伞的人和不带伞的人。当我们在决策树中进行“分裂”时,我们试图找到最佳的方式(即哪个特征)来区分数据,使每个子集尽可能地纯净。
在决策树中,每次节点分裂的目的是找到一个特征,使得其分裂可以最大程度地增加信息增益(或者其他定义的纯度增益)。对于常规的决策树,这一步会考虑数据集中的所有特征,并选择其中的最佳特征进行分裂。
分类回归树的例子
假设我们有一个决策树,根据一个人的年龄和婚姻状况进行分类,以决定他们是否会购买跑车或小型货车。
- 问题描述:
- 目标:根据年龄和婚姻状况预测某人是否会购买跑车或小型货车。
- 特征:年龄、婚姻状况。
- 类别标签:购买跑车、购买小型货车。
是否超过30岁?
/ \
是 否
/ \
已婚? 购买跑车
/ \
是 否
/ \
购买小型货车 购买跑车
- 决策过程:
- 从根节点开始,根据"是否超过30岁"进行第一次划分。
- 如果是,则继续到内部节点。
- 如果否,则分类为"购买跑车"。
- 在内部节点,根据"已婚?"进行第二次划分。
- 如果是,则分类为"购买小型货车"。
- 如果否,则分类为"购买跑车"。
- 从根节点开始,根据"是否超过30岁"进行第一次划分。
三、朴素贝叶斯
朴素贝叶斯(Naive Bayes)是一类基于贝叶斯定理的简单但强大的分类算法。它之所以被称为“朴素”,是因为它假设所有特征(变量)之间相互独立,这在很多现实应用中并不完全正确,但这种假设使得算法计算量大大减少,并且在很多实际问题中仍然表现良好。
贝叶斯定理
贝叶斯定理是朴素贝叶斯算法的基础,它用于计算某一事件在给定另一事件发生的前提下的概率。贝叶斯定理的公式如下:
- P(h∣d):后验概率,是在给定数据 d 的前提下,假设 h 为真的概率。
- P(d∣h):似然(可能性),是在假设 h 为真的前提下,数据 d 出现的概率。
- P(h):先验概率,是假设 h 为真时的概率(与数据无关)。
- P(d):边缘概率,是数据 d 出现的概率(与假设无关)。
朴素贝叶斯的优缺点
优点:
- 简单高效,计算量小。
- 对小规模数据集有效,适用于文本分类、垃圾邮件过滤等问题。
- 能够处理高维数据。
缺点:
- 条件独立性假设在实际中往往不成立,可能影响分类性能。
- 对数据中的噪声和相关性较敏感。
实际应用示例
假设我们要预测一个人是否会购买某种产品。我们有以下特征:年龄、收入、是否有房子、信用等级。类别标签是是否购买(是/否)。
训练数据:
年龄 | 收入 | 有房子 | 信用等级 | 购买 |
---|---|---|---|---|
<30 | 高 | 否 | 好 | 否 |
30-40 | 中 | 是 | 好 | 是 |
>40 | 低 | 是 | 中 | 是 |
<30 | 中 | 否 | 中 | 否 |
如果我们要预测的人的情况为:年龄=<30,收入=高,有房子=否,信用等级=好,那么使用朴素贝叶斯预测的步骤如下:
通过这种方式,朴素贝叶斯可以对新数据进行分类预测,即使在特征相互独立的假设不完全成立的情况下,也能提供合理的结果。
KNN算法
K近邻算法(K-Nearest Neighbors,简称KNN)是一种简单而有效的分类和回归算法。其核心思想是,对于一个新的输入实例,通过比较其与训练集中所有实例的距离,找到距离最近的 k 个实例,并根据这 k 个实例的标签来预测新实例的标签。
KNN算法的基本步骤
计算距离:对于新的输入实例 x,计算它与训练集中每个实例之间的距离。常用的距离度量方法包括欧氏距离、曼哈顿距离等。
选择最近的 k 个邻居:根据计算的距离,选择距离 x 最近的 k 个训练实例。
分类或回归:
- 分类:对 k 个最近邻的标签进行投票,选择出现次数最多的标签作为新实例的预测标签。
- 回归:对 k 个最近邻的标签进行平均,作为新实例的预测值。它就是通过机器学习方法预测来填充缺失值的典型示例,而非使用线性插值、分段插值等数学方法。
KNN的参数选择
-
k值的选择:k 的值对算法的性能有很大影响。较小的 k 值使模型更复杂,容易发生过拟合;较大的 k 值使模型更简单,容易发生欠拟合。一般通过交叉验证来选择合适的 k 值。
-
距离度量:常用的距离度量方法有欧氏距离(适用于连续变量)、曼哈顿距离(适用于稀疏数据)、余弦相似度(适用于文本数据)等。
KNN的优缺点
优点:
- 简单直观,易于理解和实现。
- 无需显式的训练过程,适合小数据集。
- 对非线性分类问题有很好的效果。
缺点:
- 计算开销大,对大数据集不适用,因为每次预测都需要计算与所有训练实例的距离。
- 存储开销大,需要存储整个训练数据集。
- 对噪声敏感,噪声数据可能会对预测结果产生较大影响。
示例
假设我们有如下数据集,用于预测一个人是否会购买产品:
年龄 | 收入 | 有房子 | 信用等级 | 购买 |
---|---|---|---|---|
<30 | 高 | 否 | 好 | 否 |
30-40 | 中 | 是 | 好 | 是 |
>40 | 低 | 是 | 中 | 是 |
<30 | 中 | 否 | 中 | 否 |
我们希望预测一个新的实例:年龄为30-40,收入为高,有房子,信用等级为好。
步骤:
- 计算距离:计算新实例与每个训练实例之间的距离。
- 选择最近的 k 个邻居:假设 k=3,选择距离最近的3个实例。
- 分类:根据这3个最近邻的标签进行投票,确定新实例的预测标签。
假设计算结果如下:
- 新实例与实例2的距离最小,为1
- 新实例与实例4的距离次之,为2
- 新实例与实例3的距离再次之,为3
最近的3个邻居分别是实例2、实例4和实例3,标签分别是"是"、"否"和"是"。因此,投票结果为"是",新实例的预测标签为"是"。
KNN是一种非参数算法,适用于对数据分布没有太多先验假设的情况。其效果取决于距离度量方法和 k 值的选择,需要根据具体问题进行调整和优化。