轮廓系数

sklearn之kmeans

梦想与她 提交于 2020-02-25 21:49:54
Kmeans工作原理 sklearn.cluster.KMeans 1.参数n_clusters n_clusters是KMeans中的k,表示着我们告诉模型我们要分几类。这是KMeans当中唯一一个必填的参数,默认为8类,当我们拿到一个数据集,如果可能的话,我们希望能够通过绘图先观察一下这个数据集的数据分布,以此来为我们聚类时输入的n_clusters做一个参考。 2.参数init & random_state & n_init:如何放置初始质心 1.init: 可输入"k-means++",“random"或者一个n维数组。这是初始化质心的方法,默认"k-means++”。输入"k-means++":一种为K均值聚类选择初始聚类中心的聪明的办法,以加速收敛。如果输入了n维数组,数组的形状应该是(n_clusters,n_features)并给出初始质心。 2.random_state: 控制每次质心随机初始化的随机数种子 3.n_init: 整数,默认10,使用不同的质心随机初始化的种子来运行k-means算法的次数。最终结果会是基于Inertia来计算的n_init次连续运行后的最佳输出 k-means++优化后的初始化质心位置方法,一般情况下优化过后找最优解迭代次数比随机的迭代次数少 3.参数max_iter & tol:让迭代提前停下来 1.max_iter: 整数

聚类时的轮廓系数评价和inertia_

梦想与她 提交于 2020-02-25 10:37:44
在进行聚类分析时,机器学习库中提供了kmeans++算法帮助训练,然而,根据不同的问题,需要寻找不同的超参数,即寻找最佳的K值 最近使用机器学习包里两个内部评价聚类效果的方法:clf=KMeans(n_clusters=k,n_jobs=20) 其中方法一:clf.inertia_是一种聚类评估指标,我常见有人用这个。说一下他的缺点:这个评价参数表示的是簇中某一点到簇中距离的和,这种方法虽然在评估参数最小时表现了聚类的精细性,但是这种情况会出现划分过于精细的状况,并且未考虑和簇外点的距离最大化,因此, 我推荐使用方法二 : 方法二:使用轮廓系数法进行K值的选择,在此,我需要解释一下轮廓系数,以及为何选用轮廓系数作为内部评价的标准,轮廓系数的公式为:S=(b-a)/max(a,b),其中a是单个样本离同类簇所有样本的距离的平均数,b是单个样本到不同簇所有样本的平均。 轮廓系数表示了同类样本间距离最小化,不同类样本间距离最大的度量 关于通过轮廓系数选择K值得问题: 通过建立循环来选取K值 # 构造自定义函数,用于绘制不同k值和对应轮廓系数的折线图 def k_silhouette(X, clusters): K = range(2,clusters+1) # 构建空列表,用于存储个中簇数下的轮廓系数 S = [] for k in K: kmeans = KMeans(n

6. 聚类算法之K-Means

对着背影说爱祢 提交于 2020-01-01 16:10:19
有监督学习&无监督学习: 决策树,随机森林,PCA和逻辑回归,他们虽然有着不同的功能,但却都属于“有监督学习”的一部分,即是说,模型在训练的时候,即需要特征矩阵X,也需要真实标签y。 机器学习当中,还有相当一部分算法属于“无监督学习”,无监督的算法在训练的时候只需要特征矩阵X,不需要标签。而聚类算法,就是无监督学习的代表算法。 K-Means的定义: 作为聚类算法的典型代表,KMeans可以说是最简单的聚类算法没有之一,那它是怎么完成聚类的呢? 答: KMeans算法将一组N个样本的特征矩阵X划分为K个无交集的簇,直观上来看是簇是一组一组聚集在一起的数据,在一个簇中的数据就认为是同一类。簇就是聚类的结果表现。 簇中所有数据的均值通常被称为这个簇的“质心”(centroids)。 在一个二维平面中,一簇数据点的质心的横坐标就是这一簇数据点的横坐标的均值,质心的纵坐标就是这一簇数据点的纵坐标的均值。同理可推广至高维空间。 簇的个数K是一个超参数,需要我们人为输入来确定。KMeans的核心任务就是根据我们设定好的K,找出K个最优的质心,并将离这些质心最近的数据分别分配到这些质心代表的簇中去。 K-Means的过程: 1 随机抽取K个样本作为最初的质心 2 开始循环: 2.1 将每个样本点分配到离他们最近的质心,生成K个簇 2.2 对于每个簇,计算所有被分到该簇的样本点的平均值作为新的质心

聚类算法评估――轮廓系数及python实现

匿名 (未验证) 提交于 2019-12-02 22:51:30
含义 可见轮廓系数的值是介于 [-1,1] ,越趋近于1代表内聚度和分离度都相对较优。 计算步骤 1) 对于簇中的每个向量,分别计算它们的轮廓系数。 簇内不相似度a(i) :i向量到 同簇 内其他点 不相似程度 的 平均值 ,体现凝聚度 簇间不相似度b(i) :i向量到 其他簇 的 平均不相似程度 的 最小值 ,体现分离度 2) 将 所有点 的轮廓系数 求平均 ,就是该聚类结果总的轮廓系数。 python实现 # -*- coding: utf-8 -*- import pandas as pd import numpy as np from sklearn.cluster import KMeans from sklearn import metrics #假如我要构造一个聚类数为10的聚类器 estimator = KMeans(n_clusters=10, random_state=777)#构造聚类器,设定随机种子 estimator.fit(kmeans_data_tf)#聚类 r1 = pd.Series(estimator.labels_).value_counts() #统计各个类别的数目 r2 = pd.DataFrame(estimator.cluster_centers_) #找出聚类中心 r = pd.concat([r2, r1], axis = 1)