k-means聚类
基本思路
-
初始化:随机选取 k k k个数据作为初始聚簇中心
-
更新隶属度:根据当前的聚类中心位置,计算每个数据点到每个聚类中心的隶属度
-
计算聚类中心:根据更新后的隶属度,重新计算每个聚类中心的位置,使得损失函数最小化
-
重复Step2和3
[!IMPORTANT]
优化方程
J ( X , ν ) = ∑ i = 1 n ∑ i = 1 k ( u i j ) m ρ ( d ( x i , ν j ) ) J\Big(X,\nu\Big) = \sum_{i=1}^{n}\sum_{i=1}^{k}\Big(u_{ij}\Big)^{m} {\rho\Big(d\Big(x_{i},\nu_{j}\Big)\Big)} J(X,ν)=i=1∑ni=1∑k(uij)mρ(d(xi,νj))
-
X
X
X:表示数据集,包含
n
n
n 个数据点。
-
ν
=
{
ν
1
,
ν
2
,
…
,
ν
k
}
\nu = \{\nu_1, \nu_2, \dots, \nu_k\}
ν={ν1,ν2,…,νk}:表示
k
k
k 个聚类中心(或质心)。
-
u
i
j
u_{ij}
uij:表示数据点
x
i
x_i
xi 对聚类中心
ν
j
\nu_j
νj 的隶属度。隶属度表示数据点
x
i
x_i
xi 属于聚类
ν
j
\nu_j
νj 的可能性。对k-means,
u
i
j
∈
0
,
1
u_{ij}\in{0,1}
uij∈0,1,一个数据点只属于一个聚类。对fuzzy k-means,取值在 [0, 1] 之间,由具体根据距离和模糊系数来决定。
-
m
m
m:模糊指数(模糊系数),用于控制模糊性。值越大,聚类越模糊(每个数据点可能属于多个聚类的可能性增加)。对k-means,
m
=
1
m=1
m=1,对fuzzy k-means,
m
=
1
,
2
,
3
⋯
m=1,2,3\cdots
m=1,2,3⋯通常
m
=
2
m = 2
m=2 是常见选择。
-
d
(
x
i
,
ν
j
)
d(x_i, \nu_j)
d(xi,νj):表示数据点
x
i
x_i
xi 到聚类中心
ν
j
\nu_j
νj 的距离,通常使用欧氏距离。
-
ρ
(
d
(
x
i
,
ν
j
)
)
\rho(d(x_i, \nu_j))
ρ(d(xi,νj)):表示某种距离函数
d
(
x
i
,
ν
j
)
d(x_i, \nu_j)
d(xi,νj) 的变换,通常可以是
d
(
x
i
,
ν
j
)
d(x_i, \nu_j)
d(xi,νj) 本身,也可以是距离的平方等形式。
特征
- 线性算法复杂度: O ( t k n ) O(tkn) O(tkn)
- 局部最优
- 需要指定聚类的个数
- 对噪声和初始聚类中心的确定比较敏感
K-medoids聚类
也叫做PAM(Partitoning Around Medoids),用实际点代替k-means的平均值
基本思路
- 初始化:从数据集中随机选择 k k k 个点作为初始中心点。
- 更新隶属度:将每个数据点分配给与其距离最近的中心点。
- 计算聚类中心:对每个聚类中的点,计算数据集中每个点作为中心点的总成本(即数据点到该中心点的总距离),选择使得总距离最小的点作为新的中心点。
- 重复迭代:重复步骤 2 和 3,直到聚类中心不再变化或算法达到收敛条件。
K-means与K-medoids的对比
-
K-means:
- 使用质心作为聚类中心,质心是所有点的均值。
- 对噪声和异常值敏感,因为均值容易被极端值影响。
- 计算效率高,但容易陷入局部最优解。
-
K-medoids:
- 使用实际的数据点作为聚类中心,称为Medoid。
- 对异常值和噪声更具鲁棒性,因为Medoid是实际的数据点,不容易受极端值影响。
- 计算复杂度较高,因为每次都要检查数据集中所有点是否能成为新的Medoid。