目录
0、基础
聚类属于无监督学习方法,因此学习一下无监督聚类的评价指标!!!
设定已知先验知识的标签为labels_true,利用聚类算法预测的样本标签为label_pred(这个值需要使用sklearn的kemeans方法对相应的数据:数据X和聚类个数 进行处理获得才可以直接传进去使用),互信息是衡量两种预测的一致性,忽略排列的顺序。互信息评估有两种方法,标准化的互信息Normalized Mutual Information(NMI) 和调整后的互信息Adjusted Mutual Information(AMI)。
ARI(兰德系数)
NMI(调整互信息评分)
2、使用
也就是传一个数据真实标签,直接获取。还需要传一个预测类别:这个值需要使用sklearn的kemeans方法对相应的数据:数据X和聚类个数 进行处理获得才可以直接传进去使用
'''
# ARI
metrics.adjusted_mutual_info_score(labels_true, labels_pred)
# NMI
metrics.normalized_mutual_info_score(labels_true, labels_pred)
'''
我的代码使用
from sklearn.model_selection import train_test_split
from sklearn.metrics import f1_score, normalized_mutual_info_score, adjusted_rand_score
from sklearn.cluster import KMeans
def kmeans_test(X, y, n_clusters, repeat=10):
nmi_list = []
ari_list = []
for _ in range(repeat):
kmeans = KMeans(n_clusters=n_clusters)
y_pred = kmeans.fit_predict(X)
nmi_score = normalized_mutual_info_score(y, y_pred, average_method='arithmetic')
ari_score = adjusted_rand_score(y, y_pred)
nmi_list.append(nmi_score)
ari_list.append(ari_score)
return np.mean(nmi_list), np.std(nmi_list), np.mean(ari_list), np.std(ari_list)
3、举例
示例代码:
from sklearn import metrics
labels_true = [0, 0, 0, 1, 1, 1]
labels_pred = [0, 0, 1, 1, 2, 2]
metrics.adjusted_mutual_info_score(labels_true, labels_pred)
0.22504...
互信息评分中adjusted_mutual_info_score和normalized_mutual_info_score函数其参数都是对称的,交换的参数位置不会改变评分值,示例代码:
>>> metrics.adjusted_mutual_info_score(labels_pred, labels_true)
0.22504...
利用此函数评估模型最好的值为1,示例代码:
labels_pred = labels_true[:]
metrics.adjusted_mutual_info_score(labels_true, labels_pred)
1.0
metrics.normalized_mutual_info_score(labels_true, labels_pred)
1.0
评估模型最差的值(与labels_true不相关),其结果为非正值,示例代码:
>>> labels_true = [0, 1, 2, 0, 3, 4, 5, 1]
>>> labels_pred = [1, 1, 0, 0, 2, 2, 2, 2]
>>> metrics.adjusted_mutual_info_score(labels_true, labels_pred)
-0.10526...
4、补充
简介
聚类或聚类分析是无监督学习问题。它通常被用作数据分析技术,用于发现数据中的有趣模式,例如基于其行为的客户群。有许多聚类算法可供选择,对于所有情况,没有单一的最佳聚类算法。相反,最好探索一系列聚类算法以及每种算法的不同配置。在本教程中,你将发现如何在 python 中安装和使用顶级聚类算法。
完成本教程后,你将知道:
-
聚类是在输入数据的特征空间中查找自然组的无监督问题。
-
对于所有数据集,有许多不同的聚类算法和单一的最佳方法。
-
在 scikit-learn 机器学习库的 Python 中如何实现、适配和使用顶级聚类算法。
本教程分为三部分:
-
聚类
-
聚类算法
-
聚类算法示例
-
库安装
-
聚类数据集
-
亲和力传播
-
聚合聚类
-
BIRCH
-
DBSCAN
-
K-均值
-
Mini-Batch K-均值
-
Mean Shift
-
OPTICS
-
光谱聚类
-
高斯混合模型
聚类
聚类分析,即聚类,是一项无监督的机器学习任务。它包括自动发现数据中的自然分组。与监督学习(类似预测建模)不同,聚类算法只解释输入数据,并在特征空间中找到自然组或群集。
聚类技术适用于没有要预测的类,而是将实例划分为自然组的情况。
—源自:《数据挖掘页:实用机器学习工具和技术》2016年。
群集通常是特征空间中的密度区域,其中来自域的示例(观测或数据行)比其他群集更接近群集。群集可以具有作为样本或点特征空间的中心(质心),并且可以具有边界或范围。
这些群集可能反映出在从中绘制实例的域中工作的某种机制,这种机制使某些实例彼此具