当前位置: 首页 > article >正文

数据挖掘——规则和最近邻分类器

规则和最近邻分类器

  • 规则和最近邻分类器
    • 基于规则的分类
      • 规则的质量
      • 规则分类的特征
        • 有序规则集
        • 穷举规则集
      • 规则定序方案
      • 直接方法:顺序覆盖
        • 删除实例
      • 规则增长
      • 规则评估
        • 准确率
        • 似然比 (越高越好)
      • 停止条件与规则剪枝
      • 规则分类的特点
    • K-最近邻分类算法
      • 急切学习 vs 惰性学习
      • k-最近邻分类算法
        • k值的选择
        • k-NN的特点

规则和最近邻分类器

基于规则的分类

使用一组 “if…then…”规则进行分类
规则: (Condition)→y

  • 其中
    • Condition 是属性测试的合取
    • y 是类标号
  • 左部: 规则的前件(或前提)(Rule antecedent)
  • 右部: 规则的后件(或结论)(Rule consequent)
  • 分类规则的例子:
    • (Blood Type=Warm) ∧ \wedge (Lay Eggs=Yes) → \rightarrow Birds
    • (Taxable Income < 50K) ∧ \wedge (Refund=Yes) → \rightarrow Cheat =No

规则的质量

覆盖率和准确率度量

  1. 规则的覆盖率(Coverage) :满足规则前件的记录所占的比例
  2. 规则的准确率(Accuracy) :在满足规则前件的记录中,满足规则后件的记录所占的比例

举例:规则:(Status=Single) → No
Coverage=40%, Accuracy= 50%
在这里插入图片描述

规则分类的特征

互斥规则集

  1. 每个记录最多被一个规则覆盖
  2. 如果规则都是相互独立的,分类器包含互斥规则

如果规则集不是互斥的

  • 一个记录可能被多个规则触发
    在这里插入图片描述
  • 如何处理?
    • 有序规则集
      • 基于规则的序 vs 基于类的序
    • 无序规则集
      • 在无序规则方案中,允许一条记录触发多条规则,规则被触发时视为对其相应类的一次投票,然后计算不同类的票数(可以使用加权方式)来决定记录的类所属。
有序规则集

根据规则优先权将规则排序定秩(rank)

  • 有序规则集又称决策表(decisionlist)

对记录进行分类时

  • 由被触发的,具有最高秩的规则确定记录的类标号
  • 如果没有规则被触发,则指派到缺省类

在这里插入图片描述

穷举规则集

每个记录都至少被一个规则覆盖

如果规则集涵盖了属性值的所有可能组合,则规则集具有穷举覆盖

如果规则集是非穷举的,一个记录可能不被任何规则触发

规则定序方案

  1. 基于规则的序

    • 根据规则的质量排序:覆盖率(coverage)和准确率(accuracy)
  2. 基于类的序

    • 属于同一类的规则放在一起
    • 基于类信息(如类的分布、重要性)对每类规则排序

直接方法:顺序覆盖

基本思想

  • 依次对每个类建立一个或多个规则
  • 对第i类建立规则
    • 第i类记录为正例,其余为负例
    • 建立一个第i类的规则r,尽可能地覆盖正例,而不覆盖负例(即构建一个正例的规则
    • 删除r覆盖的所有记录,在剩余数据集上学习下一个规则,直到所有第i类记录都被删除
      在这里插入图片描述
删除实例

为什么要删除实例?

  • 否则, 下一个规则将与前面的规则相同
    规则可能重复

为什么删除正实例?

  • 防止高估后面规则的准确率
  • 确保下一个规则不同

为什么删除负实例?

  • 防止过拟合错误训练集
  • 防止低估后面规则的准确率

规则增长

两种策略

  1. 一般到特殊(通常采用的策略)
    • 从初始规则r: {}→y开始
    • 反复加入合取项,得到更特殊的规则,直到不能再加入
  2. 特殊到一般(适用于小样本情况)
    • 随机地选择一个正例作为初始规则
    • 反复删除合取项,得到更一般的规则,直到不能再删除

问题

  • 加入/删除合取项有多种选择,如何选择?
  • 何时停止加入/删除合取项? → \rightarrow 需要评估标准

规则评估

常用的度量

  • 准确率
  • 似然比
  • Laplace
  • FOIL信息增益

在这里插入图片描述

准确率

A c c u r a c y = n c n Accuracy =\frac{n_c}{n} Accuracy=nnc

  • n : 被规则覆盖的实例数
  • n c n_c nc: 被规则正确分类的实例数

问题:准确率高的规则可能覆盖率太低
在上面的例子中:
Acc(r1): 90.9%
Acc(r2): 100%

似然比 (越高越好)

k是类别数
f i f_i fi是被规则覆盖的类i的样本的观测频度
e i e_i ei是规则作随机猜测的期望频度
R = 2 ∑ i = 1 k f i l o g ( f i e i ) R=2\sum\limits_{i=1}^kf_ilog(\frac{f_i}{e_i}) R=2i=1kfilog(eifi)
简单理解就是当前规则分类效果比随机效果越高,说明规则越好
在这里插入图片描述

停止条件与规则剪枝

  1. 停止条件
    • 计算增益
    • 如果增益不显著, 则丢弃新规则
  2. 规则剪枝
    • 类似于决策树后剪枝
    • 降低错误剪枝 :
      • 删除规则中的合取项
      • 比较剪枝前后的错误率
      • 如果降低了错误率,则剪掉该合取项

规则分类的特点

在这里插入图片描述

K-最近邻分类算法

急切学习 vs 惰性学习

  1. 急切学习(Eager Learner)
    • 两步过程: (1) 归纳 (2) 演绎
  2. 惰性学习(Lazy Learner)
    • 把训练数据建模过程推迟到需要对样本分类时
    • 例子
    • Rote-learner(死记硬背)
      • 记住所有的训练数据,仅当记录的属性值与一个训练记录完全匹配才对它分类
    • 最近邻(Nearest neighbor)
      • 使用“最近”的 k 个点 (最近邻) 进行分类

k-最近邻分类算法

  1. 令k是最近邻数目,D是训练样例的集合
  2. for 每个测试样例 z = ( x ′ , y ′ ) z = (x', y') z=(x,y) do
  3. 计算z和每个样例 ( x , y ) ∈ D (x, y) \in D (x,y)D之间的距离 d ( x ′ , x ) d(x', x) d(x,x)
  4. 选择离z最近的k个训练样例的集合 D z ∈ D Dz\in D DzD
  5. y ′ = a r g m a x ∑ ( x i , y i ) ∈ D z I ( v = y i ) y'=argmax\sum\limits_{(x_i,y_i)\in D_z}I(v=y_i) y=argmax(xi,yi)DzI(v=yi)
  6. end for

距离加权表决:
y ′ = a r g m a x ∑ ( x i , y i ) ∈ D z I ( v = y i ) y'=argmax\sum\limits_{(x_i,y_i)\in D_z}I(v=y_i) y=argmax(xi,yi)DzI(v=yi)

k值的选择

如果 k 太小, 则对噪声点敏感
如果 k 太大, 邻域可能包含很多其他类的点
在这里插入图片描述

k-NN的特点
  1. 是一种基于实例的学习
    • 需要一个邻近性度量来确定实例间的相似性或距离
  2. 不需要建立模型,但分类一个测试样例开销很大
    • 需要计算域所有训练实例之间的距离
  3. 基于局部信息进行预测,对噪声非常敏感
  4. 最近邻分类器可以生成任意形状的决策边界
    • 决策树和基于规则的分类器通常是直线决策边界
  5. 需要适当的邻近性度量和数据预处理
    • 防止邻近性度量被某个属性左右

http://www.kler.cn/a/466926.html

相关文章:

  • NRF24L01模块STM32通信-通信初始化
  • spring mvc源码学习笔记之六
  • 数据插入操作的深度分析:INSERT 语句使用及实践
  • QML自定义滑动条Slider的样式
  • ScheduledExecutorService详解
  • 数据安全防护
  • 如何轻松关闭 iPhone 上的 HEIC [HEIC 图像技巧]
  • 嵌入式系统开发笔记112:通过有人云测试MQTT
  • 2023 年 3 月 GESP C++ 一级真题解析
  • springboot537农产品智慧物流系统(论文+源码)_kaic
  • Mysql 学习补充
  • Maven 详细配置:Maven 项目 POM 文件解读
  • Backend - C# 的日志 NLog日志
  • 机器学习经典算法——KNN算法
  • 记一个小程序的诞生与死亡
  • Rust 泛型、特征与生命周期详解
  • [CTF/网络安全] 攻防世界 supersqli 解题详析
  • 新手学习yolov8目标检测小记2--对比实验中经典模型库MMDetection使用方法(使用自己的数据集训练,并转换为yolo格式评价指标)
  • Linux部署web项目【保姆级别详解,Ubuntu,mysql8.0,tomcat9,jdk8 附有图文】
  • Next.js 多语言 (1) | 中间件(Middleware)的设置与应用
  • android 开发中的 SPI模式
  • Kotlin 协程与异步编程
  • 《前端web开发-CSS3基础-1》
  • HTML——67. 复选框
  • Linux内核的缺页异常的简介
  • svn 相关应用与管理