Skip to content

分类算法应用实践和比对

支持向量机(Support Vector Machine, SVM),是一种强大的监督学习算法,广泛应用于分类和回归任务。它通过寻找最优超平面来最大化不同类别数据之间的间隔,从而实现分类或预测。可以算是整个机器学习分类算法的天花板。 在深度学习发展起来之前,支持向量机几乎是称霸机器学习领域的一个存在。

一、应用实践

0、题目要求

构建模型,来预测患者是否有糖尿病

有以下特征:

  • 年龄、体重指数(BMI)血糖水平和家族病史(0表示没有,1表示有)。
  • 目标变量是患糖尿病的结果(0表示不患病,1表示患病)

问题: 一个新患者的数据如下,年龄50岁,BMI30,血糖水平150,无家族病史预测这个患者是否会患糖尿病?

任务: 思考梳理不同的分类算法来实现这个需求的基本原理,实现步骤...

1、KNN解决

(1)算法原理:寻找离待预测的样本点最近的K个样本点,经过“投票决定”

(2)距离的计算

(3)K值的选择

2、逻辑回归

(1)算法原理:拟合一个逻辑函数,预测二分类问题的概率。

(2)特征加权

(3)逻辑函数

(4)概率解释

3、朴素贝叶斯算法

(1)算法原理: 在给定先验知识的情况下通过观测到的数据来更新事件的概率估计。

(2)计算先验概率

  • P(yes) = 患有糖尿病的人数/总人数 =3/5
  • P(no) = 不患糖尿病的人数/总人数 = 2/5

(3)没有患病情况下的普遍数据-定义数据类型: 年龄 > 40为高龄,BMI > 27.9为超重,血糖水平 >=150 为高血糖。

  • P(高龄) = 高龄的人数 / 总人数 = 6/10
  • P(超重) = 超重的人数 / 总人数 = 6/10
  • P(高血糖) = 高血糖的人数 / 总人数 =7/10
  • P(无病史) = 无病史的人数 / 总人数 = 6/10

(4)计算条件概率: 计算给定患病结果下各个特征出现的条件概率:

  • P(高龄|yes) = 患病人群中高龄的人数 / 患病人数 = 4/6
  • P(高龄|no)= 未患病人群中高龄的人数 / 未患病人数 = 2/4
  • P(超重|yes) = 患病人群中超重的人数 / 患病人数 = 5/6
  • P(超重|no) = 未患病人群中超重的人数 / 未患病人数 = 1/4
  • ......

(5)计算后验概率

根据待预测样本情况,计算它患病及不患病的概率

患病的概率:

不患病的概率:

(6)分类决策: 比较患病和不患病的后验概率,较高的概率决定最终的分类

4、决策树

(1)计算熵值

在10个历史用户的患病情况数据中,4个人没有患病,6个人患病了,所以此时的熵为:

(2)基于家族病史的划分

(3)基于血糖水平的划分

血糖水平>=150 的为高血糖,否则为低血糖

5、支持向量机算法

(1)算法原理:找到一个超平面(在二维中是一条线,在三维中是一个平面,以此类推),这个超平面能够正确地分开不同的类别,并且保持最大的边界(或间隔)

(2)核函数进行比对

二、分类算法优缺点对比

算法原理优点缺点
KNN“近朱者赤,近墨者黑”,根据最近的K个邻居的分类来投票确定自己的类别简单,不需要假设数据分布,易于理解随着数据量的增加,计算和存储要求高,需要标准化特征以避免距离度量的偏差
逻辑回归根据线性回归拟合一条直线,然后利用 平滑函数将输出值映射到0-1的概率值设定阈值做判断提供概率结果,易于实现和解释假设特征和结果的线性关系,可能在复杂关系中表现不佳
朴素贝叶斯根据条件概率和先验概率,估算得到后验概率,注意特征之间要互相独立计算效率高,适用于大型数据集,即使特征相关也能工作假设所有特征都是独立的,这在实际中很少见
决策树根据信息增益,寻找一颗树的最佳根节点与内部结点,构建决策树非常直观,易于解释,不需要特征缩放易于过拟合,对于某些类型的数据不稳定
SVM利用核函数,将数据在空间站线性可分,构建超平面对数据进行分类在高维空间中效果好,适用于非线性问题对于大型数据集计算成本高,选择合适的核函数和参数调整可能复杂

Released under the MIT License.