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

规则和最近邻分类器

规则和最近邻分类器

基于规则的分类

使用一组 "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=1∑kfilog(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 Dz∈D
  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)∈Dz∑I(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)∈Dz∑I(v=yi)

k值的选择

如果 k 太小, 则对噪声点敏感

如果 k 太大, 邻域可能包含很多其他类的点

k-NN的特点
  1. 是一种基于实例的学习
    • 需要一个邻近性度量来确定实例间的相似性或距离
  2. 不需要建立模型,但分类一个测试样例开销很大
    • 需要计算域所有训练实例之间的距离
  3. 基于局部信息进行预测,对噪声非常敏感
  4. 最近邻分类器可以生成任意形状的决策边界
    • 决策树和基于规则的分类器通常是直线决策边界
  5. 需要适当的邻近性度量和数据预处理
    • 防止邻近性度量被某个属性左右
相关推荐
taxunjishu8 分钟前
DeviceNet 转 MODBUS TCP罗克韦尔 ControlLogix PLC 与上位机在汽车零部件涂装生产线漆膜厚度精准控制的通讯配置案例
人工智能·区块链·工业物联网·工业自动化·总线协议
呱呱巨基10 分钟前
vim编辑器
linux·笔记·学习·编辑器·vim
新子y16 分钟前
【小白笔记】普通二叉树(General Binary Tree)和二叉搜索树的最近公共祖先(LCA)
开发语言·笔记·python
说私域17 分钟前
基于多模态AI技术的传统行业智能化升级路径研究——以开源AI大模型、AI智能名片与S2B2C商城小程序为例
人工智能·小程序·开源
聪明的笨猪猪18 分钟前
Java JVM “调优” 面试清单(含超通俗生活案例与深度理解)
java·经验分享·笔记·面试
囚生CY27 分钟前
【速写】优化的深度与广度(Adam & Moun)
人工智能·python·算法
hqyjzsb30 分钟前
2025年市场岗位能力重构与跨领域转型路径分析
c语言·人工智能·信息可视化·重构·媒体·改行学it·caie
"菠萝"32 分钟前
C#知识学习-017(修饰符_6)
学习·c#
爱学习的uu38 分钟前
CURSOR最新使用指南及使用思路
人工智能·笔记·python·软件工程
YuCaiH44 分钟前
Linux文件处理
linux·笔记·嵌入式