当前位置: 首页 > news >正文

服装设计有哪些网站合肥网站网站建设

服装设计有哪些网站,合肥网站网站建设,销售和营销的区别,c 网站开发项目K-means 聚类是一种常用的基于距离的聚类算法,旨在将数据集划分为 个簇。算法的目标是最小化簇内的点到簇中心的距离总和。下面,我们将从 K-means 的底层原理、算法步骤、数学基础、距离度量方法、参数选择、优缺点 和 源代码实现 等角度进行详细解析。…

        K-means 聚类是一种常用的基于距离的聚类算法,旨在将数据集划分为 K 个簇。算法的目标是最小化簇内的点到簇中心的距离总和。下面,我们将从 K-means 的底层原理、算法步骤、数学基础、距离度量方法、参数选择、优缺点 和 源代码实现 等角度进行详细解析。


1. K-means 的核心思想

        K-means 的目标是将数据集划分为 K 个簇(clusters),使得每个数据点属于距离最近的簇中心。通过反复调整簇中心的位置,K-means 不断优化簇内的紧密度,从而获得尽量紧凑、彼此分离的簇。

核心思想

  • 簇(Cluster):K-means 通过最小化簇内距离的平方和,使得数据点在簇内聚集。
  • 簇中心(Centroid):簇中心是簇中所有点的平均值,表示簇的中心位置。
  • 簇分配和更新:K-means 通过不断更新簇分配和簇中心,来逐步收敛。

2. K-means 的算法步骤

        K-means 聚类的流程分为两个主要步骤:分配(Assignment)更新(Update)。以下是详细步骤:

  1. 选择 K 值
    设定簇的数量 K

  2. 初始化簇中心
    随机选择 K 个数据点作为初始簇中心(centroids)。

  3. 分配步骤(Assignment Step)
    对于数据集中的每个点,将它分配到最近的簇中心对应的簇。这里的“距离”通常使用欧氏距离(Euclidean distance)。

  4. 更新步骤(Update Step)
    根据当前的簇分配,重新计算每个簇的中心,即计算簇内所有点的均值作为新的簇中心。

  5. 重复 3 和 4 步
    不断重复分配和更新步骤,直到簇中心不再发生变化(收敛)或达到指定的最大迭代次数。


3. K-means 的数学公式

        K-means 的目标是最小化簇内平方误差和(Within-Cluster Sum of Squares,WCSS),即每个点到其所属簇中心的距离的平方和,公式如下:

其中:

  • K 是簇的数量。
  • C_{i}是第 i 个簇的点集。
  • x是属于 C_{i} 的数据点。
  • \mu _{i}是第 i 个簇的中心。
  • \left | \right |x-\mu _{i}\left | \right |^{2} 表示数据点 x 与簇中心 \mu _{i} 之间的欧氏距离平方。

欧氏距离

K-means 通常采用欧氏距离来衡量点到簇中心的距离,其公式为:

d\left ( x,\mu \right )=\sqrt{\sum_{j=1}^{n}\left ( x_{j}-\mu _{j} \right )^{2}}

其中 n 是数据的维度。


4. K-means 的伪代码

KMeans(X, K):1. 随机选择 K 个点作为初始簇中心2. 重复以下步骤,直到簇中心不再发生变化:a. 分配每个点到最近的簇中心b. 重新计算每个簇的中心,作为簇内所有点的均值3. 返回最终的簇分配和簇中心

分配步骤(Assignment Step)

对于每个数据点,找到距离最近的簇中心  μj​:

c_{i}=arg \underset{j}{min}\left | \right | x_{i}-\mu _{j} \left | \right |

更新步骤(Update Step)

更新每个簇的中心 \mu _{j} 为簇内所有点的均值:

\mu _{j}=\frac{1}{\left | C_{j} \right |}\underset{x\in C_{j}}{\sum }x


5. K-means 的时间复杂度分析

  • 每次分配步骤:需要计算每个点到 K 个簇中心的距离,复杂度为 O(n*K)
  • 更新步骤:重新计算每个簇的中心,需要遍历所有点,复杂度也是 O(n*K)
  • 总复杂度:若迭代次数为 T,则总体复杂度为 O(n*K*T)

6. K-means 的优缺点

优点

  • 简单高效:在样本数量较少或维度较低时效果很好。
  • 收敛速度快:在适合的初始中心选择下,K-means 通常可以较快收敛。

缺点

  • 对初始点敏感:初始簇中心的选择对最终结果影响较大。
  • 只能发现球形簇:K-means 假设每个簇是凸形且大小相近,不能处理非球形的簇。
  • 对离群点敏感:离群点会影响簇的中心计算。

7. K 值的选择

确定最佳的簇数 K 是 K-means 聚类中的一个难点。常用的选择方法有:

  1. 肘部法(Elbow Method)
    绘制不同 K 值下的 WCSS 图,寻找“肘部”点作为最佳 K值。

  2. 轮廓系数(Silhouette Coefficient)
    衡量聚类结果的紧密度和分离度。通常,轮廓系数越高,聚类效果越好。

  3. Calinski-Harabasz 指数
    衡量簇内的方差与簇间方差之比,值越大越好。


8. Python 实现 K-means

我们可以使用 scikit-learn 中的 KMeans,以及手动实现以便更深入理解。

8.1 使用 scikit-learn 实现 K-means

from sklearn.cluster import KMeans
import numpy as np# 生成示例数据
X = np.array([[1, 2], [2, 2], [3, 3], [8, 7], [8, 8], [25, 80]])# 初始化并训练 KMeans 模型
kmeans = KMeans(n_clusters=2, random_state=0).fit(X)# 获取簇标签和簇中心
labels = kmeans.labels_
centroids = kmeans.cluster_centers_print("Cluster labels:", labels)
print("Centroids:", centroids)

输出

Cluster labels: [0 0 0 1 1 1]
Centroids: [[ 2.   2.33333333][13.66666667 31.66666667]]

8.2 手动实现 K-means 算法

以下是 K-means 的核心逻辑手动实现:

import numpy as npdef initialize_centroids(X, k):indices = np.random.choice(len(X), k, replace=False)return X[indices]def closest_centroid(X, centroids):distances = np.linalg.norm(X[:, np.newaxis] - centroids, axis=2)return np.argmin(distances, axis=1)def update_centroids(X, labels, k):return np.array([X[labels == i].mean(axis=0) for i in range(k)])def kmeans(X, k, max_iters=100, tol=1e-4):centroids = initialize_centroids(X, k)for i in range(max_iters):labels = closest_centroid(X, centroids)new_centroids = update_centroids(X, labels, k)if np.all(np.abs(new_centroids - centroids) < tol):breakcentroids = new_centroidsreturn labels, centroids# 示例数据
X = np.array([[1, 2], [2, 2], [3, 3], [8, 7], [8, 8], [25, 80]])# 运行 K-means
labels, centroids = kmeans(X, k=2)
print("Cluster labels:", labels)
print("Centroids:", centroids)

9. 收敛性与初始中心的选择

        K-means 的收敛性受到初始簇中心选择的影响。K-means++ 是一种改进的初始化方法,可以帮助选择更合理的初始中心,减少陷入局部最优的风险。

K-means++ 初始中心选择步骤

  1. 随机选择一个点作为第一个中心。
  2. 对于每个点,计算其与已选择中心的最小距离。
  3. 根据与最近中心的距离平方值选择下一个中心,概率越大则越有可能成为下一个中心。

10. 总结

        K-means 是一种简单、快速的聚类算法,广泛应用于数据聚类任务。通过反复优化簇中心位置,K-means 不断收敛并找到数据的聚类结构。然而,它对初始条件敏感,对簇形状有限制,适合于球形且均匀分布的簇。在实际应用中,可通过结合 K-means++、肘部法和轮廓系数等手段改进其效果。

http://www.yayakq.cn/news/145159/

相关文章:

  • 厦门网站推广公司一个完整的网站制作流程
  • 用jq和ajax做能登陆注册的一个网站天河区建设和水务局网站
  • 介休做网站建设网站的公司
  • 飘仙建站论坛织梦cms收费
  • wordpress建立手机网站seo网站优化培训厂家报价
  • 百度网站网址是什么网站开发后服务费
  • 官方网站建设 磐石网络知名建设网站需要什么技术人员
  • 专业做毕业设计网站设计建筑案例网站
  • 跨境建站平台赤峰网站建设red
  • 做运营需要看的网站区域名 网站建设公司的销售好做吗
  • 长宁手机网站建设宿迁网络公司哪家专业
  • 做外贸现在一般都通过哪些网站做外贸网站渠道
  • 教育培训手机网站模板下载网站建设拟解决问题
  • 培训机构seo东莞网站seo优化
  • 重庆平台网站建设平台网站开发客户流程 6个阶段
  • 网站建设方案书 腾讯网站建设选青岛的公司好不好
  • 网站做装修效果图飞鱼ip代理
  • 源码搭建网站流程丹东有做公司网站的吗
  • 有什么网站学做标书的网站制作软件是什么
  • 门户网站模板源代码成都软件公司前100强
  • 海口建站模板系统无锡营销型网站建站
  • 石家庄网站制作报价建设学院2级网站的作用
  • 超市网站建设做网站 注意
  • 重庆网站建设哪家有个人免费开发网站
  • 在线咨询 1 网站宣传九台网络推广
  • 评价高的企业网站开发手机智能建网站
  • 广州本地做网站易优cms破解授权
  • 专业论坛网站开发开发每天一篇好文章网站
  • 虚拟主机销售网站源码工程公司名称大全
  • 怎样做模具钢网站郑州驾校网站建设