轮廓系数的计算步骤如下:
计算样本i到同一类中其他样本的平均距离ai。ai越小,说明样本i与同类中其他样本的距离越近,即越相似。我们将ai称为样本i的类别内不相似度。
计算样本i到其他类别的所有样本的平均距离bi,称为样本i与其他类之间的不相似度。bi越大,说明样本i与其他类之间距离越远,即越不相似。
根据样本i的簇内不相似度ai和簇间不相似度bi ,定义样本i的轮廓系数为:
si的值介于[-1,1]之间,越接近于1说明bi越大ai越小,类别内部越相似,类别之间越不相似;越接近于0说明类别内部和类别之间的距离差不多,分界线很不明显;越接近于-1说明类别之间越相似类别内部反而不相似。
了解清楚原理以后,我们来看下在Python中怎么实现,这个系数在Sklearn库中是有现成的包可以供我们使用的:
silhouette_score:是获取模型总体的轮廓系数
silhouette_samples:是获取每个样本的轮廓系数
1 随机选取k个中心点2 遍历所有数据,将每个数据划分到最近的中心点中
3 计算每个聚类的平均值,并作为新的中心点
4 重复2-3,直到这k个中线点不再变化(收敛了),或执行了足够多的迭代
时间复杂度:O(I*n*k*m)
空间复杂度:O(n*m)
其中m为每个元素字段个数,n为数据量,I为跌打个数。一般I,k,m均可认为是常量,所以时间和空间复杂度可以简化为O(n),即线性的。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)