Python中基于二进制列分割数组及组合模型评估咨询
问题解答
一、Python中按联合预测列分割ndarray子集
假设你的ndarray名为data,列索引与含义对应关系为:
- 第0列:y(实际值)
- 第1列:0_0(XGB和SVM均预测0)
- 第2列:1_0(XGB预测1、SVM预测0)
- 第3列:0_1(XGB预测0、SVM预测1)
- 第4列:1_1(XGB和SVM均预测1)
由于每行仅2-5列中某一列值为1,直接通过布尔索引即可生成4个子集:
import numpy as np # 生成四个子集 subset_00 = data[data[:, 1] == 1] # 两模型均预测0的样本 subset_10 = data[data[:, 2] == 1] # XGB预测1、SVM预测0的样本 subset_01 = data[data[:, 3] == 1] # XGB预测0、SVM预测1的样本 subset_11 = data[data[:, 4] == 1] # 两模型均预测1的样本
如果习惯用列名操作,可先将ndarray转为Pandas DataFrame,筛选更直观:
import pandas as pd df = pd.DataFrame(data, columns=['y', '0_0', '1_0', '0_1', '1_1']) subset_00 = df[df['0_0'] == 1] subset_10 = df[df['1_0'] == 1] subset_01 = df[df['0_1'] == 1] subset_11 = df[df['1_1'] == 1]
二、组合模型的评估指标
针对双模型联合预测的场景,除单独计算XGB、SVM的精确率/召回率外,可采用以下针对性评估方式:
1. 联合类别的多分类评估
将四个联合预测结果(0_0、1_0、0_1、1_1)视为四个类别,结合真实标签y构建多分类混淆矩阵,计算:
- 每个联合类别的精确率:该类别中真实标签符合预期的比例(如0_0类别中
y=0的占比) - 每个联合类别的召回率:真实标签为某值的样本中,被分到该联合类别的比例(如真实
y=0的样本中,被分到0_0的占比) - 每个联合类别的F1值:精确率与召回率的调和平均
2. 模型一致性与分歧分析
- 一致场景准确率:计算0_0和1_1子集中,预测与真实值匹配的比例(如(0_0中
y=0的样本数 + 1_1中y=1的样本数) / 总一致样本数) - 分歧场景准确率:对比分歧时两个模型的预测准确性(如1_0子集中
y=1的占比,代表XGB在分歧时的准确率;0_1子集中y=1的占比,代表SVM在分歧时的准确率) - Cohen's Kappa系数:衡量XGB与SVM预测结果的一致性,取值范围为[-1,1],越接近1说明模型一致性越高
3. 组合策略的整体评估
若你基于这四个场景设计了组合决策规则(如一致时直接采纳预测,分歧时用加权投票或规则判断),可针对该组合策略计算整体的精确率、召回率、F1值,与单独模型的表现做对比。
内容的提问来源于stack exchange,提问作者threadofmotion
相关产品推荐
相关产品推荐

