Я думаю, вы можете попробовать оценить матрицу путаницы и проверить голос большинства. Например, мы используем набор данных iris:
from sklearn.datasets import load_iris
from sklearn.cluster import SpectralClustering
from sklearn.metrics import confusion_matrix
import pandas as pd
data = load_iris()
df = pd.DataFrame(data.data,
columns=['sepal.length','sepal.width','petal.length','petal.width'])
labels = data.target
И выполняем спектральную кластеризацию:
clustering = SpectralClustering(n_clusters=3,
assign_labels="discretize",random_state=0).fit(df)
M = confusion_matrix(labels,clustering.labels_)
M
array([[ 0, 50, 0],
[ 2, 0, 48],
[37, 0, 13]])
Для каждой строки у вас есть прогноз для каждой метки. Чистота, как у вас выше:
np.max(M,axis=1)/np.sum(M,axis=1)
array([1. , 0.96, 0.74])
Если вы хотите заключить общее соглашение, вы можете использовать:
from sklearn.metrics import adjusted_rand_score
adjusted_rand_score(labels,clustering.labels_)
0.7436826319432357