使用linear_assignment函数与真实标签y_true可以计算聚类结果的准确度(ACC)和归一化互信息(NMI)。
首先,你需要将预测的分类y_pred和真实标签y_true转换为整数形式。可以使用LabelEncoder进行标签编码。
然后,你可以使用linear_assignment函数来计算匹配矩阵,该矩阵衡量了预测结果和真实标签之间的相似性。
接下来,根据匹配矩阵计算准确度(ACC)。首先找到每个预测类别与真实类别之间的最佳匹配,并将其作为正确匹配。然后,通过除以总样本数来得到准确度。
对于归一化互信息(NMI),你可以使用sklearn.metrics模块中的adjusted_mutual_info_score函数进行计算。
以下是一个示例代码:
from sklearn.preprocessing import LabelEncoder
from scipy.optimize import linear_sum_assignment
from sklearn.metrics import accuracy_score, adjusted_mutual_info_score
# 转换预测结果和真实标签为整数形式
label_encoder = LabelEncoder()
y_pred_int = label_encoder.fit_transform(y_pred)
y_true_int = label_encoder.transform(y_true)
# 计算匹配矩阵
num_classes = len(label_encoder.classes_)
cost_matrix = -1 * np.ones((num_classes, num_classes))
for i in range(num_classes):
for j in range(num_classes):
cost_matrix[i, j] = np.sum((y_pred_int == i) & (y_true_int == j))
# 使用linear_assignment函数找到最佳匹配
row_ind, col_ind = linear_sum_assignment(-cost_matrix)
# 计算准确度(ACC)
correct_matches = cost_matrix[row_ind, col_ind].sum()
accuracy = correct_matches / len(y_pred)
# 计算归一化互信息(NMI)
nmi = adjusted_mutual_info_score(y_true, y_pred)
print("Accuracy:", accuracy)
print("NMI:", nmi)
请注意,以上代码假设预测结果和真实标签均为一维数组。如果你的数据结构有所不同,你可能需要适当调整代码以适应你的数据。
内容由零声教学AI助手提供,问题来源于学员提问