目录

轮廓系数

sklearn中的API


机器学习入门研究(十七)— Instacart Market用户分类中我们通过sklearn中的KMeans来将用户分成了三类人,那么我们怎么评估这个模型的好与不好呢?

轮廓系数

从上图中,我们知道聚类最后将这些点分成了2类,聚类最后的结果就是:内部的距离最小化,外部的距离最大化。我们使用轮廓系数来描述,其中公式如下:

其中里面的bi指的是每个样本到其他簇群的所有样本的距离的最小值。可以看成是外部距离;

而ai可以看成是该样本值到本簇群中的所有距离的平均值。可以看成是内部距离。

我们可以看到当bi>>ai的时候,此时外部距离远远的超过了内部距离,此时轮廓系数接近于1;而当ai》》bi,此时内部距离远远超过了外部距离,此时轮廓系数接近与-1;那么就可以看到轮廓系数的范围为[-1,1],越接近于1,说明聚类效果越好;越接近于-1,说明聚类效果越差。

sklearn中的API

在sklearn中提供成熟的API来实现这个轮廓系数,对应的API如图:

 sklearn.metrics.silhouette_score(X, labels, metric='euclidean', sample_size=None,
                     random_state=None, **kwds):

其中参数介绍如下:

参数含义
X特征值
labels我们最后预测出来的标签
 metric

计算两个样本之间距离的方法”,默认为‘euclidean’,则必须是metrics.pairwise.pairwise_distances 中 metric 可选的(‘cityblock’, ‘cosine’, ‘euclidean’, ‘l1’, ‘l2’, ‘manhattan’ 或‘braycurtis’, ‘canberra’, ‘chebyshev’, ‘correlation’, ‘dice’, ‘hamming’, ‘jaccard’, ‘kulsinski’, ‘mahalanobis’, ‘matching’, ‘minkowski’, ‘rogerstanimoto’, ‘russellrao’, ‘seuclidean’, ‘sokalmichener’, ‘sokalsneath’, ‘sqeuclidean’, ‘yule’);

也可以为一个可调用的函数计算两个实例之间的距离。

 sample_size随机取一部分样本的平均值
random_state

当sample_size 为非空时用来生成随机采样

我们使用该API评估下机器学习入门研究(十七)— Instacart Market用户分类中的模型:

from sklearn.metrics import  silhouette_score
score = silhouette_score(data_new,y_predict)

输出的score的值为:

0.5368333366182597

我们看到这个值接近于1,所以说这个模型还可以的。

Logo

CSDN联合极客时间,共同打造面向开发者的精品内容学习社区,助力成长!

更多推荐