k-means聚类数学公式
时间: 2023-09-26 19:14:37 浏览: 307
k-means聚类算法并没有一个明确的数学公式来表示聚类的过程。它是一种迭代求解的聚类分析算法,其主要步骤包括:随机选取K个对象作为初始的聚类中心,计算其他对象与各个聚类中心之间的距离,将每个对象分配给距离最近的聚类中心,根据聚类中的对象重新计算聚类中心的位置。这个过程将不断重复直到满足某个终止条件。其中,终止条件可以是没有或最小数目的对象被重新分配给不同的聚类,没有或最小数目的聚类中心再发生变化,或者误差平方和达到局部最小值。因此,k-means聚类算法没有一个具体的数学公式来描述其过程。
相关问题
K-Means 聚类算法原理数学公式
### K-Means聚类算法工作原理
K均值聚类是一种无监督学习方法,用于将一组未标记的数据划分为多个簇(cluster)。该算法的目标是在最小化各簇内样本之间的差异的同时最大化不同簇间的差异。
#### 初始化阶段
首先随机选取 \( k \) 个初始质心作为各个簇的核心位置[^1]。这些质心可以被看作是代表各自簇特性的点,在多维空间中表示出来。
#### 分配与更新循环
对于每一个数据点计算其到所有质心的距离并将其分配给最近的那个质心所对应的簇;接着重新计算每个簇的新质心坐标直到满足停止条件为止。这个过程可以通过下面两个主要步骤来描述:
- **E步 (Expectation Step)**: 对于所有的观测向量 \( x_i \),找到离它最近的当前估计出来的中心 \( c_j^{(t)} \),并将此观测归属于第 j 类。
\[ argmin_{j} ||x_i - c_j^{(t)}||^2 \]
其中\( t \) 表示迭代次数,而 \( c_j^{(t)} \) 则是指在第 t 次迭代时第 j 组群组的心脏位置。
- **M步 (Maximization Step)** : 更新每一群体内的平均数即新的心脏位置:
\[
c_j^{(t+1)}=\frac{\sum\nolimits _{i=1}^{n}\delta(j,i)x_i}{\sum\nolimits _{i=1}^{n}\delta(j,i)}
\]
这里的 δ 函数定义如下:
当且仅当 xi 属于类别 cj 的时候取值为 1 否则为零。
上述两步构成了EM算法框架下的单次迭代操作,整个流程持续重复直至达到收敛标准或最大允许迭代次数结束。
#### 数学优化视角下目标函数
从数学角度出发,K-means试图解决的是一个组合最优化问题,具体来说就是寻找最优解使得总误差平方和(Sum of Squared Errors,SSE)最小化.
设 n 是总的样本数量,k 是预设好的分类数目,则SSE可表达成如下形式:
\[
J(C)=\sum_{j=1}^{k}\sum_{x_i\in C_j}||x_i-\mu_j||^2
\]
这里 μj 表达了对应子集Cj内部成员坐标的算术平均值也就是所谓的“质心”。通过不断调整各类别中的对象构成以及相应质心的位置从而逐步逼近全局极小值点以期获得较为理想的分割效果[^4].
```python
import numpy as np
def kmeans(data_points, k, max_iters):
centroids = data_points[np.random.choice(len(data_points), size=k)]
for i in range(max_iters):
cluster_assignments = assign_clusters(data_points, centroids)
new_centroids = update_centroids(data_points, cluster_assignments, k)
if np.allclose(new_centroids, centroids): break
centroids = new_centroids
return centroids, cluster_assignments
def assign_clusters(X, centers):
distances = euclidean_distances(X, centers)
closest_centers_indices = np.argmin(distances, axis=1)
return closest_centers_indices
def update_centroids(X, labels, num_clusters):
updated_centers = []
for label in set(labels):
mask = (labels == label).reshape(-1, 1)
center = X[mask].mean(axis=0)
updated_centers.append(center.flatten())
return np.array(updated_centers)
def euclidean_distances(a,b):
a_squared=np.sum(np.square(a),axis=-1)[...,None]
b_squared=(np.sum(np.square(b),axis=-1))
ab=-(2*np.dot(a,np.transpose(b)))
result=a_squared+b_squared+ab
return np.sqrt(result.clip(min=0))
data_points = [[...], [...]] # Your dataset here.
final_centroids, final_cluster_assignments = kmeans(data_points=data_points, k=3, max_iters=10)
```
k-means聚类分析数学模型的数学公式
k-means 聚类分析的数学模型包括以下数学公式:
1. 定义数据点和聚类中心:
- 数据点:假设有 n 个数据点,表示为 x₁, x₂, ..., xₙ。
- 聚类中心:假设有 k 个聚类中心,表示为 c₁, c₂, ..., cₖ。
2. 定义距离度量:
- 常用的距离度量是欧氏距离,用于衡量两个数据点之间的相似度。欧氏距离的计算公式为:
d(x, c) = √((x₁ - c₁)² + (x₂ - c₂)² + ... + (xₙ - cₙ)²)
3. 定义目标函数:
- 目标函数表示各个数据点到其所属聚类中心的距离之和。k-means 聚类分析的目标是最小化目标函数。
J = Σd(x, c)²
4. 算法步骤:
- 随机初始化 k 个聚类中心。
- 重复以下步骤直到收敛:
a) 对每个数据点计算到所有聚类中心的距离,将其归类到相应的聚类中心。
b) 根据归类结果,更新每个聚类中心的位置为其所包含数据点的平均值。
c) 计算新的目标函数值,判断是否收敛。
以上就是 k-means 聚类分析的数学模型的主要数学公式。
阅读全文
相关推荐
![pdf](https://img-home.csdnimg.cn/images/20241231044930.png)
![pdf](https://img-home.csdnimg.cn/images/20241231044930.png)
![zip](https://img-home.csdnimg.cn/images/20241231045053.png)
![zip](https://img-home.csdnimg.cn/images/20241231045053.png)
![-](https://img-home.csdnimg.cn/images/20241231045021.png)
![-](https://img-home.csdnimg.cn/images/20241231045053.png)
![-](https://img-home.csdnimg.cn/images/20241231045053.png)
![-](https://img-home.csdnimg.cn/images/20241231044901.png)
![-](https://img-home.csdnimg.cn/images/20241231044947.png)
![-](https://img-home.csdnimg.cn/images/20241226111658.png)
![-](https://img-home.csdnimg.cn/images/20241226111658.png)
![-](https://img-home.csdnimg.cn/images/20241226111658.png)
![-](https://img-home.csdnimg.cn/images/20241226111658.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![-](https://img-home.csdnimg.cn/images/20241226111658.png)