原理解读
DIANA(Divisive Analysis):采用自顶向下的策略,最初将所有对象置于一个类中,然后根据某些准则将这些类别逐渐细分。细分过程反复进行直到类别达到预期的数目。
核心思想
1. 将所有样本都作为同一类
2. 分裂所有类别中到该类中心距离最大的样本,将其单独作为一类,按照最近邻分类,直到满足某个终止条件
$$d_{max}=\underset{C_i \subseteq C}{max} \ (\underset{x_i \in C_i}{max} \ {d(x_i,\overline C_i)}) \ , \ 其中\overline {C_i}=\frac {1}{\lvert C_i \rvert}\underset{x_i \in C_i}{\sum}{x_i}$$
算法流程
代码实战
代码中所用数据集可以查看相关文档,数据集(Data Set)
DIANA_main.m
1 | clear;clc;close all; |
DIANA_classify.m
1 | function [y,class_center]=DIANA_classify(x_scale,sample_num,class_num) |
DIANA_display.m
1 | function DIANA_display(x,y,class_center,sample_num,class_num) |
实验结果
性能比较
- 优点:
- 算法简单,容易理解
- 不依赖初始值的选择
- 对于类别较少的训练集分类较快
- 缺点:
- 对噪声数据敏感
- 分裂操作不能撤销
- 需要在测试前知道类别的个数
- 对于类别较多的训练集分类较慢
- 只适合分布呈凸型或者球形的数据集
- 对于高维数据,距离的度量并不是很好