ISODATA算法(Iterative Self-Organizing Data Analysis Technique Algorithm)是一种动态聚类算法
,它可以自动调整簇的数量
,不同于K-means等静态聚类
算法,ISODATA允许在聚类过程中合并和分裂簇
,因此它能够适应数据集的内在结构,而不需要
预先知道簇的数量。
ISODATA算法的基本流程:
- 初始化:选择
初始聚类中心
数量 Ko,以及每个类的最少样本数
Nmin,还有其他参数如判断是否分裂的阈值
s 和判断是否合并的阈值
t。 - 分配:将每个数据点
分配
给最近的聚类中心。 - 更新:基于新分配的数据点,
更新
每个聚类的中心。 - 检查:评估每个聚类的统计特性,如大小、密度、内部一致性等,
根据预设的规则进行合并或分裂。
- 重复:重复步骤2至4,直到聚类中心稳定或达到最大迭代次数。
涉及到的公式:
虽然ISODATA没有像K-means那样简洁的公式形式,但它的关键步骤可以数学化表达。以下是关键部分的公式化描述:
更新聚类中心
假设:
-
C
i
C_i
Ci 是簇
i
i
i 的
中心
-
X
X
X 是
所有数据点的集合
-
X
i
X_i
Xi 是属于簇
i
i
i 的
数据点集合
-
∣
X
i
∣
|X_i|
∣Xi∣ 是簇
i
i
i 中的
数据点数量
-
x
j
x_j
xj 是
数据集中任一数据点。
簇中心的更新可以用下面的公式表示:
C i = 1 ∣ X i ∣ ∑ x j ∈ X i x j C_i = \frac{1}{|X_i|} \sum_{x_j \in X_i} x_j Ci=∣Xi∣1xj∈Xi∑xj
这里:
-
C
i
C_i
Ci:簇
i
i
i的
中心。
-
X
i
X_i
Xi:属于簇
i
i
i 的
数据点集合。
-
∣
X
i
∣
|X_i|
∣Xi∣:簇
i
i
i 中的
数据点数量。
-
x
j
x_j
xj:
数据集中任一数据点。
合并和分裂条件
ISODATA算法可以根据预设
的条件来决定是否合并或分裂簇。
例如,如果两个簇
C
i
C_i
Ci 和
C
j
C_j
Cj 之间的距离小于
某个阈值
t
t
t,则它们会被合并
。
同样,如果簇
C
k
C_k
Ck 内的样本数小于
N
m
i
n
N_{min}
Nmin 或 簇的分散程度
超过某个阈值
s
s
s,则簇
C
k
C_k
Ck 可能被分裂。
分散度计算
对于簇
C
i
C_i
Ci,其分散度
D
(
C
i
)
D(C_i)
D(Ci) 可以计算为所有数据点到簇中心的距离的平方和:
D ( C i ) = ∑ x j ∈ X i ∣ ∣ x j − C i ∣ ∣ 2 D(C_i) = \sum_{x_j \in X_i} ||x_j - C_i||^2 D(Ci)=xj∈Xi∑∣∣xj−Ci∣∣2
这里:
-
D
(
C
i
)
D(C_i)
D(Ci):簇
i
i
i 的
分散度
。 -
x
j
x_j
xj:簇
i
i
i 中的
任一数据点。
-
C
i
C_i
Ci:簇
i
i
i 的
中心。
对公式的每个字符进行解释:
- C i C_i Ci:簇 i i i的中心位置。
- X X X:整个数据集的集合。
- X i X_i Xi:属于簇 i i i的数据点集合。
- x j x_j xj:数据集中任一数据点。
- ∣ X i ∣ |X_i| ∣Xi∣:簇 i i i中数据点的数量。
- t t t:判断两个簇是否应当合并的阈值。
- s s s:判断一个簇是否应当分裂的阈值。
- N m i n N_{min} Nmin:一个簇至少应该拥有的数据点数量。
- D ( C i ) D(C_i) D(Ci):簇 i i i的分散度,表示簇内数据点的分布情况。
ISODATA算法的灵活性和动态性使其适用于各种数据集,特别是那些簇的数量和形状不确定的情况。