Python-sklearn-评估指标 Sklearn 评估指标大全sklearn.metrics模块提供了分类、回归、聚类、排序等任务的评估指标。 分类指标Classification Metrics1.accuracy_score— 准确率 ⭐fromsklearn.metricsimportaccuracy_score accaccuracy_score(y_true,y_pred)acc_normalizedaccuracy_score(y_true,y_pred,normalizeTrue)acc_countaccuracy_score(y_true,y_pred,normalizeFalse)# 返回正确数2.confusion_matrix— 混淆矩阵fromsklearn.metricsimportconfusion_matrix,ConfusionMatrixDisplay cmconfusion_matrix(y_true,y_pred)# 输出: [[TN, FP],# [FN, TP]]# 含标签cmconfusion_matrix(y_true,y_pred,labels[0,1,2])# 可视化ConfusionMatrixDisplay.from_predictions(y_true,y_pred,cmapBlues)ConfusionMatrixDisplay.from_estimator(model,X,y,cmapBlues)importmatplotlib.pyplotasplt plt.show()3.classification_report— 分类报告 ⭐一键输出所有主要指标。fromsklearn.metricsimportclassification_report# 文本形式报告reportclassification_report(y_true,y_pred,target_names[class_0,class_1,class_2],labels[0,1,2],zero_division0,# 分母为 0 时的处理: warn, 0, 1digits2# 小数位数)print(report)# 字典形式report_dictclassification_report(y_true,y_pred,output_dictTrue)输出示例:precision recall f1-score support class_0 0.95 0.93 0.94 50 class_1 0.88 0.91 0.90 50 class_2 0.90 0.88 0.89 50 accuracy 0.91 150 macro avg 0.91 0.91 0.91 150 weighted avg 0.91 0.91 0.91 1504.precision_score/recall_score/f1_score/fbeta_scorefromsklearn.metricsimport(precision_score,recall_score,f1_score,fbeta_score)# 核心参数# average: micro, macro, weighted, samples, None# zero_division: warn, 0, 1# 二分类pprecision_score(y_true,y_pred)rrecall_score(y_true,y_pred)f1f1_score(y_true,y_pred)# 多分类p_macroprecision_score(y_true,y_pred,averagemacro)# 宏平均p_microprecision_score(y_true,y_pred,averagemicro)# 微平均p_weightedprecision_score(y_true,y_pred,averageweighted)# 加权平均p_noneprecision_score(y_true,y_pred,averageNone)# 每类分别返回# F-beta如 F2 更重视召回F0.5 更重视精确率f2fbeta_score(y_true,y_pred,beta2.0,averagemacro)average 参数对比:average说明适用场景micro全局计算 TP/FP/FN样本均衡时macro各类指标算术平均关注小类表现weighted按支持度加权平均类别不均衡时None返回每类的指标值需要逐类分析samples多标签的样本级平均多标签任务5. 概率预测指标fromsklearn.metricsimport(roc_auc_score,roc_curve,precision_recall_curve,average_precision_score,log_loss,brier_score_loss)# ROC-AUC二分类/多分类aucroc_auc_score(y_true,y_score)auc_multiroc_auc_score(y_true,y_score,multi_classovr)# ovo 或 ovr# ROC 曲线fpr,tpr,thresholdsroc_curve(y_true,y_score)# 精确率-召回率曲线适合样本不均衡precision,recall,thresholdsprecision_recall_curve(y_true,y_score)# 平均精确率PR 曲线下面积apaverage_precision_score(y_true,y_score)# 对数损失交叉熵lllog_loss(y_true,y_prob,normalizeTrue,labels[0,1])# Brier 分数概率校准brierbrier_score_loss(y_true,y_prob)6. 其他分类指标fromsklearn.metricsimport(hamming_loss,# 汉明损失多标签jaccard_score,# Jaccard 相似系数matthews_corrcoef,# Matthews 相关系数MCCcohen_kappa_score,# Cohens Kappa一致性balanced_accuracy_score,# 平衡准确率top_k_accuracy_score,# Top-K 准确率hinge_loss,# Hinge 损失SVM)# 平衡准确率考虑类别不均衡b_accbalanced_accuracy_score(y_true,y_pred)# Cohens Kappakappacohen_kappa_score(y_true,y_pred)# Matthews 相关系数-1 到 1mccmatthews_corrcoef(y_true,y_pred)# Top-K 准确率top3top_k_accuracy_score(y_true,y_score,k3)# 汉明损失多标签hlhamming_loss(y_true,y_pred)7. 可视化函数fromsklearn.metricsimport(ConfusionMatrixDisplay,PrecisionRecallDisplay,RocCurveDisplay,DetCurveDisplay,PredictionErrorDisplay,CalibrationDisplay,LearningCurveDisplay,ValidationCurveDisplay,)importmatplotlib.pyplotasplt# 混淆矩阵ConfusionMatrixDisplay.from_predictions(y_true,y_pred,cmapBlues)plt.show()# ROC 曲线RocCurveDisplay.from_predictions(y_true,y_score,nameModel)plt.show()# P-R 曲线适合不均衡数据PrecisionRecallDisplay.from_predictions(y_true,y_score)# 预测误差图回归PredictionErrorDisplay.from_predictions(y_true,y_pred) 回归指标Regression Metrics1. 核心回归指标fromsklearn.metricsimport(mean_squared_error,# MSEmean_absolute_error,# MAEmean_absolute_percentage_error,# MAPEr2_score,# R²explained_variance_score,# 解释方差max_error,# 最大误差mean_squared_log_error,# MSLEroot_mean_squared_error,# RMSEmean_squared_error,# MSE)# MSE均方误差⭐msemean_squared_error(y_true,y_pred,squaredTrue)rmsemean_squared_error(y_true,y_pred,squaredFalse)# 1.4# 或fromsklearn.metricsimportroot_mean_squared_error rmseroot_mean_squared_error(y_true,y_pred)# MAE平均绝对误差maemean_absolute_error(y_true,y_pred)# MAPE平均绝对百分比误差mapemean_absolute_percentage_error(y_true,y_pred)# R² 分数 ⭐r2r2_score(y_true,y_pred)# 也可多输出r2_multir2_score(y_true,y_pred,multioutputuniform_average)# 解释方差evsexplained_variance_score(y_true,y_pred,multioutputuniform_average)# 最大误差memax_error(y_true,y_pred)# 均方对数误差mslemean_squared_log_error(y_true,y_pred)2. 多输出回归参数multioutput参数:raw_values— 每个输出分别返回uniform_average— 等权平均默认variance_weighted— 按方差加权array-like— 自定义权重fromsklearn.metricsimportr2_score# 自定义各输出权重r2r2_score(y_true,y_pred,multioutput[0.3,0.7])3. 距离/配对指标fromsklearn.metricsimport(d2_absolute_error_score,d2_pinball_score,d2_tweedie_score,mean_pinball_loss,mean_tweedie_deviance,median_absolute_error,)# 中位数绝对误差medaemedian_absolute_error(y_true,y_pred) 聚类指标Clustering Metrics有真实标签的聚类评估fromsklearn.metricsimport(adjusted_rand_score,# 调整兰德指数ARIadjusted_mutual_info_score,# 调整互信息AMInormalized_mutual_info_score,# 归一化互信息NMIhomogeneity_score,# 同质性completeness_score,# 完整性v_measure_score,# V-measurefowlkes_mallows_score,# FMIrand_score,# 兰德指数)# ARI调整兰德指数-1 到 1⭐ariadjusted_rand_score(y_true,y_pred)# NMI归一化互信息0 到 1nminormalized_mutual_info_score(y_true,y_pred)# AMI调整互信息amiadjusted_mutual_info_score(y_true,y_pred)# 同质性、完整性、V-measurehhomogeneity_score(y_true,y_pred)# 每个簇是否只含一类ccompleteness_score(y_true,y_pred)# 每类是否归到同一个簇vv_measure_score(y_true,y_pred)# H 和 C 的调和平均无真实标签的聚类评估fromsklearn.metricsimport(silhouette_score,# 轮廓系数silhouette_samples,# 每个样本的轮廓系数calinski_harabasz_score,# CH 指标方差比准则davies_bouldin_score,# DB 指数)# 轮廓系数 ⭐-1 到 1越高越好silsilhouette_score(X,labels,metriceuclidean)sil_per_samplesilhouette_samples(X,labels)# CH 指标越高越好chcalinski_harabasz_score(X,labels)# DB 指数越低越好dbdavies_bouldin_score(X,labels)配对混淆矩阵fromsklearn.metrics.clusterimport(pair_confusion_matrix,contingency_matrix)# 配对混淆矩阵pair_cmpair_confusion_matrix(y_true,y_pred)# 返回 (TN, FP, FN, TP)# 列联表contcontingency_matrix(y_true,y_pred) 其他指标make_scorer()— 自定义评分器fromsklearn.metricsimportmake_scorerfromsklearn.metricsimportmean_squared_errorimportnumpyasnp# 自定义损失函数作为评分器defrmse(y_true,y_pred):returnnp.sqrt(mean_squared_error(y_true,y_pred))# 创建评分器越大越好rmse_scorermake_scorer(rmse,greater_is_betterFalse,# 越小越好needs_probaFalse,needs_thresholdFalse)# 用于 GridSearchCVfromsklearn.model_selectionimportGridSearchCV gridGridSearchCV(model,params,scoringrmse_scorer)内置评分器字符串:# 分类scoring:accuracyscoring:roc_aucscoring:f1_macroscoring:precision_weightedscoring:recall_microscoring:neg_log_loss# 注意负号越大越好# 回归scoring:r2scoring:neg_mean_squared_errorscoring:neg_mean_absolute_errorscoring:neg_root_mean_squared_error# 聚类scoring:adjusted_rand_scorescoring:normalized_mutual_info_scoreget_scorer()— 获取评分器fromsklearn.metricsimportget_scorer scorerget_scorer(roc_auc)scorescorer(model,X_test,y_test)get_scorer_names()— 列出所有评分器名fromsklearn.metricsimportget_scorer_names all_namesget_scorer_names()# [accuracy, adjusted_mutual_info_score, adjusted_rand_score, ...]auc()— 曲线下面积梯形法则fromsklearn.metricsimportauc areaauc(x,y)# 梯形数值积分ndcg_score()— 归一化折损累计增益用于排序质量评估。fromsklearn.metricsimportndcg_score,dcg_score ndcgndcg_score(y_true,y_score,k5)dcgdcg_score(y_true,y_score)pairwise_distances()— 成对距离矩阵fromsklearn.metricsimportpairwise_distancesfromsklearn.metrics.pairwiseimport(cosine_similarity,# 余弦相似度euclidean_distances,# 欧氏距离manhattan_distances,# 曼哈顿距离rbf_kernel,# RBF 核linear_kernel,# 线性核polynomial_kernel,# 多项式核sigmoid_kernel,# Sigmoid 核laplacian_kernel,# 拉普拉斯核chi2_kernel,# Chi² 核additive_chi2_kernel,# 加性 Chi² 核pairwise_kernels,# 成对核函数paired_distances,# 配对距离paired_cosine_distances,paired_euclidean_distances,paired_manhattan_distances,)# 余弦相似度simcosine_similarity(X,Y)# 欧氏距离disteuclidean_distances(X,Y)# 通用成对距离distpairwise_distances(X,Y,metriccosine) 实践模板分类任务完整评估fromsklearn.metricsimport(accuracy_score,classification_report,confusion_matrix,roc_auc_score,f1_score,precision_score,recall_score)defevaluate_classification(model,X_train,X_test,y_train,y_test):分类模型完整评估model.fit(X_train,y_train)y_predmodel.predict(X_test)y_probmodel.predict_proba(X_test)ifhasattr(model,predict_proba)elseNoneresults{accuracy:accuracy_score(y_test,y_pred),precision:precision_score(y_test,y_pred,averageweighted),recall:recall_score(y_test,y_pred,averageweighted),f1:f1_score(y_test,y_pred,averageweighted),}ify_probisnotNone:results[roc_auc]roc_auc_score(y_test,y_prob,multi_classovr)print(classification_report(y_test,y_pred))returnresults回归任务完整评估fromsklearn.metricsimport(mean_squared_error,mean_absolute_error,r2_score,mean_absolute_percentage_error)importnumpyasnpdefevaluate_regression(model,X_train,X_test,y_train,y_test):回归模型完整评估model.fit(X_train,y_train)y_predmodel.predict(X_test)results{R2:r2_score(y_test,y_pred),MSE:mean_squared_error(y_test,y_pred),RMSE:np.sqrt(mean_squared_error(y_test,y_pred)),MAE:mean_absolute_error(y_test,y_pred),MAPE:mean_absolute_percentage_error(y_test,y_pred),}returnresults[[sklearn-总览|← 返回总览]]