做服装搭配的流行趋势网站,上海专业网站建设报价,零售app开发公司,电子商务网站建设主题1 K-means介绍
1.0 方法介绍
KMeans算法通过尝试将样本分成n个方差相等的组来聚类#xff0c;该算法要求指定群集的数量。它适用于大量样本#xff0c;并已在许多不同领域的广泛应用领域中使用。KMeans算法将一组样本分成不相交的簇#xff0c;每个簇由簇中样本的平均值描…1 K-means介绍
1.0 方法介绍
KMeans算法通过尝试将样本分成n个方差相等的组来聚类该算法要求指定群集的数量。它适用于大量样本并已在许多不同领域的广泛应用领域中使用。KMeans算法将一组样本分成不相交的簇每个簇由簇中样本的平均值描述。这些平均值通常称为簇的“质心” 注意质心通常不是样本点尽管它们存在于相同的空间中。 KMeans算法旨在选择最小化惯性或称为群内平方和标准的质心
1.1 惯性的缺点
惯性可以被认为是衡量簇内部一致性的一种度量。它有各种缺点 惯性假设簇是凸形的和各向同性的但这不总是情况。 它对于拉长的簇或形状不规则的流形反应不佳。惯性不是一个规范化的度量 我们只知道较低的值更好零是最优的。但是在非常高维的空间中欧几里得距离往往会变得膨胀这是所谓的“维数诅咒”的一个实例。——在k均值聚类之前运行一个降维算法如主成分分析PCA可以缓解这个问题并加快计算速度。以下是几个K-means效果不加的例子 clusters的数量不是最优各向异性的cluster分布方差不同各个簇数量不同
1.2 Kmeans算法的步骤
K均值算法通常被称为劳埃德算法Lloyds algorithm)。简单来说该算法有三个步骤 第一步选择初始质心最基本的方法是从数据集中选择样本初始化之后K均值算法由两个步骤的循环组成 第一个步骤是将每个样本分配给最近的质心第二步是通过取分配给每个前一个质心的所有样本的平均值来创建新的质心计算旧质心和新质心之间的差异并重复这最后两个步骤直到这个值小于一个阈值直到质心不再有显著移动为止K均值算法等同于期望最大化算法带有一个小的、全相等的、对角线协方差矩阵 给定足够的时间K均值总会收敛但这可能是到一个局部最小值 这在很大程度上取决于质心的初始化因此计算通常会进行多次质心的初始化也各不相同一个帮助解决这个问题的方法是k-means初始化方案initk-means 这样初始化质心通常会相互远离导致比随机初始化更好的结果 2 sklearn.cluster.KMeans
sklearn.cluster.KMeans(n_clusters8, *, initk-means, n_initwarn, max_iter300, tol0.0001, verbose0, random_stateNone, copy_xTrue, algorithmlloyd)
2.1 主要参数
n_clusters簇的数量init {‘k-means’, ‘random’}或形状为(n_clusters, n_features)的数组默认为k-means 初始化方法 ‘k-means’使用基于点对总惯性贡献的经验概率分布的采样来选择初始簇质心。这种技术加快了收敛速度 这里实现的算法是“贪婪k-means”。它与普通的k-means的不同之处在于每个采样步骤进行多次尝试并从中选择最佳质心‘random’从数据中随机选择n_clusters个观测行作为初始质心数组形状应为(n_clusters, n_features)并给出初始中心n_init auto或int默认值为10k-means算法运行的次数每次都使用不同的质心种子最终结果是n_init连续运行中惯性最佳的输出。当n_initauto时运行次数取决于init的值 如果使用initrandom则为10如果使用initk-means或init是类数组的则为1max_iter int默认值为300k-means算法单次运行的最大迭代次数tol两次连续迭代的簇中心的Frobenius范数差异来声明收敛的相对容忍度
2.2 举例
from sklearn.cluster import KMeans
import numpy as npX np.array([[1, 2], [1, 4], [1, 0],[10, 2], [10, 4], [10, 0]])kmeansKMeans(n_clusters2,n_initauto).fit(X)
2.2.1 属性
cluster_centers_ 簇中心的坐标 labels_ 每个点的标签 inertia_ 样本到最近簇中心的平方距离之和如果提供了样本权重则按样本权重加权 n_iter_ 运行的迭代次数
2.2.2 fit fit(X, sample_weightNone) sample_weight 是X中每个观测的权重。如果为None则所有观测都被赋予相等的权重 3 sklearn.cluster.kmeans_plusplus
类似于使用k_means来进行
sklearn.cluster.kmeans_plusplus(X, n_clusters, *, sample_weightNone, x_squared_normsNone, random_stateNone, n_local_trialsNone)
X 用来选择初始种子的数据 也就是KMeans里面fit的内容 n_cluster要初始化的质心数量sample_weightX中每个观测的权重
3.1 返回值
centers形状为(n_clusters, n_features) k-means的初始中心。
indices形状为(n_clusters,) 在数据数组X中选择的中心的索引位置。对于给定的索引和中心X[index] center
3.2 举例
from sklearn.cluster import kmeans_plusplus
import numpy as npX np.array([[1, 2], [1, 4], [1, 0],[10, 2], [10, 4], [10, 0]])kmeans_plusplus(X,n_clusters2)(array([[10, 0],[ 1, 4]]),array([5, 1]))4 Mini Batch K-Means
MiniBatchKMeans是KMeans算法的一个变种它使用小批量mini-batches来减少计算时间同时仍然试图优化相同的目标函数 小批量是输入数据的子集在每次训练迭代中随机采样这些小批量大大减少了收敛到局部解所需的计算量与其他减少k-means收敛时间的算法不同mini-batch k-means产生的结果通常只比标准算法稍差该算法在两个主要步骤之间迭代类似于传统的k-means算法 在第一步中从数据集中随机抽取样本形成一个小批量.然后这些样本被分配到最近的质心在第二步中更新质心。与k-means不同这是按样本进行的 对于小批量中的每个样本通过取样本及其之前分配到该质心的所有样本的流式平均值来更新分配的质心。这样做的效果是随着时间的推移减少质心变化的速率。这些步骤执行直到收敛或达到预定的迭代次数为止MiniBatchKMeans比KMeans收敛得更快但结果的质量有所降低 4.1 sklearn.cluster.MiniBatchKMeans
class sklearn.cluster.MiniBatchKMeans(n_clusters8, *, initk-means, max_iter100, batch_size1024, verbose0, compute_labelsTrue, random_stateNone, tol0.0, max_no_improvement10, init_sizeNone, n_initwarn, reassignment_ratio0.01)
4.1.1 主要参数
n_clusters簇的数量init {‘k-means’, ‘random’}或形状为(n_clusters, n_features)的数组默认为k-means 初始化方法 ‘k-means’使用基于点对总惯性贡献的经验概率分布的采样来选择初始簇质心。这种技术加快了收敛速度 这里实现的算法是“贪婪k-means”。它与普通的k-means的不同之处在于每个采样步骤进行多次尝试并从中选择最佳质心‘random’从数据中随机选择n_clusters个观测行作为初始质心数组形状应为(n_clusters, n_features)并给出初始中心max_iter int默认值为300k-means算法单次运行的最大迭代次数batch_sizemini batch的大小默认是1024n_init auto或int默认值为3k-means算法运行的次数每次都使用不同的质心种子最终结果是n_init连续运行中惯性最佳的输出。当n_initauto时运行次数取决于init的值 如果使用initrandom则为3如果使用initk-means或init是类数组的则为1 4.1.2 属性
还是那些cluster_centerslabels_inertia_n_iter_n_steps
4.1.3 方法
方法上fittranformpredict这些都有多了一个partial_fit表示使用一个mini-batch的样本
4.2 举例
from sklearn.cluster import MiniBatchKMeans
import numpy as npX np.array([[1, 2], [1, 4], [1, 0],[10, 2], [10, 4], [10, 0]])mini_kmeansMiniBatchKMeans(n_clusters2).fit(X)mini_kmeans.cluster_centers_array([[ 1. , 2.57142857],[10. , 2. ]])
mini_kmeans.labels_
#array([0, 0, 0, 1, 1, 1])