如何查询PCA/LDA模型的预测灵敏度占比及特定类别预测阳性案例占比?
模型评估:灵敏度计算与特定类别预测占比查询
1. 获取模型预测的灵敏度百分比
灵敏度(召回率)的核心是衡量真实属于目标类别的样本中,被模型正确识别的比例。在多分类场景(比如load_digits的10类任务)中,我们需要将目标类别标记为“阳性”,其余类别作为“阴性”来单独计算。
以下是结合PCA降维和分类模型的实现代码:
from sklearn.datasets import load_digits from sklearn.model_selection import train_test_split from sklearn.decomposition import PCA from sklearn.svm import SVC from sklearn.metrics import recall_score # 加载手写数字数据集 digits = load_digits() X, y = digits.data, digits.target # 拆分训练集与测试集 X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42) # 用PCA降维(保留20个主成分) pca = PCA(n_components=20) X_train_pca = pca.fit_transform(X_train) X_test_pca = pca.transform(X_test) # 训练支持向量机分类器 model = SVC() model.fit(X_train_pca, y_train) # 生成测试集预测结果 y_pred = model.predict(X_test_pca) # 指定目标类别为第5类,计算灵敏度并转为百分比 target_class = 5 sensitivity = recall_score(y_test, y_pred, pos_label=target_class) print(f"模型对第{target_class}类的灵敏度:{sensitivity * 100:.2f}%")
2. 查询PCA/LDA中模型对特定类别的预测阳性案例占比
这里的“预测阳性案例占比”通常有两种常见解读,以下分别实现:
2.1 被模型预测为目标类别的样本中,真实属于该类的比例(精确率)
这个指标反映了模型预测为目标类别的结果准确率:
from sklearn.metrics import precision_score precision = precision_score(y_test, y_pred, pos_label=target_class) print(f"模型预测为第{target_class}类的样本中,真实属于该类的占比:{precision * 100:.2f}%")
2.2 模型预测为目标类别的样本数占总测试样本的比例
这个指标展示了模型将多少样本判定为目标类别:
predicted_target_count = sum(y_pred == target_class) total_test_samples = len(y_test) prediction_ratio = (predicted_target_count / total_test_samples) * 100 print(f"模型预测为第{target_class}类的样本占总测试样本的比例:{prediction_ratio:.2f}%")
替换为LDA算法的实现
如果要使用LDA而非PCA,只需替换降维步骤即可(LDA最多支持n_classes-1个维度):
from sklearn.discriminant_analysis import LinearDiscriminantAnalysis as LDA # LDA降维 lda = LDA(n_components=9) X_train_lda = lda.fit_transform(X_train, y_train) X_test_lda = lda.transform(X_test) # 训练模型并计算指标 model_lda = SVC() model_lda.fit(X_train_lda, y_train) y_pred_lda = model_lda.predict(X_test_lda) # 计算第5类的灵敏度 sensitivity_lda = recall_score(y_test, y_pred_lda, pos_label=target_class) print(f"LDA+模型对第{target_class}类的灵敏度:{sensitivity_lda * 100:.2f}%")
内容的提问来源于stack exchange,提问作者Laxmi
相关产品推荐
相关产品推荐

