多分类评估是指基于分类模型的预测结果和原始结果,评估多分类算法模型的优劣性,从而输出评估指标(例如Accuracy、Kappa及F1-Score)。

组件配置

PAI-Studio支持通过可视化或PAI命令的方式,配置该组件参数:
  • 可视化方式
    页签 参数 描述
    字段设置 原分类结果列 可以选择原始标签列,分类数量不能大于1000。
    预测分类结果列 预测分类列,通常为prediction_result列。
    高级选项 如果选中高级选项复选框,则预测结果概率列参数生效。
    预测结果概率列 用于计算模型的Logloss,通常为prediction_detail列,且仅对随机森林模型有效。如果对其他模型设置该参数,则系统可能报错。
    执行调优 核心数 核内存分配搭配使用,默认为系统自动分配。
    核内存分配 每个核心的内存,单位为MB,默认为系统自动分配。
  • PAI命令方式
    PAI -name MultiClassEvaluation -project algo_public \
        –DinputTableName="test_input" \
        -DoutputTableName="test_output" \
        -DlabelColName="label" \
        -DpredictionColName="prediction_result" \
        -Dlifecycle=30;
    参数 是否必选 参数描述 默认值
    inputTableName 输入表的名称。
    inputTablePartitions 输入表的分区。 全表
    outputTableName 输出表的名称。
    labelColName 输入表原始标签列名。
    predictionColName 预测结果的标签列名。
    predictionDetailColName 预测结果的概率列,例如{“A”:0.2,“B”:0.3,“C”: 0.5}。
    lifecycle 输出表的生命周期。
    coreNum 核心数量。 系统自动计算
    memSizePerCore 每个核心的内存。 系统自动计算

组件输出

多分类评估组件输出的评估报告包括:
  • 总览
    汇总指标,其中MacroAveraged为每个标签指标的平均值。总览信息
  • 混淆矩阵多分类评估输出混淆矩阵
  • 比例矩阵
  • 统计信息
    按照One-VS-All的方式,计算每个标签的指标。多分类评估输出统计信息
多分类评估组件输出结果表的JSON格式如下。
{
    "LabelNumber": 3,
    "LabelList": ["A", "B", "C"],
    "ConfusionMatrix": [ // 混淆矩阵[actual][predict]。
        [100, 10, 20],
        [30, 50, 9],
        [7, 40, 90] ],
    "ProportionMatrix": [ // 比例矩阵(按行占比)[actual][predict]。
        [0.6, 0.2, 0.2],
        [0.3, 0.6, 0.1],
        [0.1, 0.4, 0.5] ],
    "ActualLabelFrequencyList": [ // 每个标签的真实数量。
        200, 300, 600],
    "ActualLabelProportionList": [ // 每个标签的真实占比。
        0.1, 0.2, 0.7],
    "PredictedLabelFrequencyList": [ // 预测的每个标签数量。
        300, 400, 400],
    "PredictedLabelProportionList": [ // 预测的每个标签占比。
        0.2, 0.1, 0.7],
    "OverallMeasures": {        // 汇总指标。
        "Accuracy": 0.70,
        "Kappa" : 0.3,
        "MacroList": {       // 每个标签的指标平均值。
            "Sensitivity": 0.4,
            "Specificity": 0.3,
        },
        "MicroList": {      // 根据每个标签的TP、TN、FP及FN之和,计算该指标。
            "Sensitivity": 0.4,
            "Specificity": 0.3,
        },
        "LabelFrequencyBasedMicro": { // 按照频率,计算每个标签指标的加权平均值。
            "Sensitivity": 0.4,
            "Specificity": 0.3,
        },
    },
    "LabelMeasuresList": [      // 每个标签的指标。
        {
            "Accuracy": 0.6,
            "Sensitivity": 0.4,
            "Specificity": 0.3,
            "Kappa": 0.3
        },
        {
            "Accuracy": 0.6,
            "Sensitivity": 0.4,
            "Specificity": 0.3,
            "Kappa": 0.3
        },
    ]
}

示例

  1. 导入如下测试数据。
    id label prediction detail
    0 A A {“A”: 0.6, “B”: 0.4}
    1 A B {“A”: 0.45, “B”: 0.55}
    2 A A {“A”: 0.7, “B”: 0.3}
    3 A A {“A”: 0.9, “B”: 0.1}
    4 B B {“A”: 0.2, “B”: 0.8}
    5 B B {“A”: 0.1, “B”: 0.9}
    6 B A {“A”: 0.52, “B”: 0.48}
    7 B B {“A”: 0.4, “B”: 0.6}
    8 B A {“A”: 0.6, “B”: 0.4}
    9 A A {“A”: 0.75, “B”: 0.25}
  2. 构建实验,详情请参见算法建模多分类评估实验
  3. 配置多分类组件的参数(配置如下表格中的参数,其余参数使用默认值)。
    页签 参数 描述
    字段设置 原分类结果列 选择label列。
    预测分类结果列 输入prediction
    高级选项 选中高级选项复选框。
    预测结果概率列 输入detail
  4. 运行实验,查看多分类评估组件输出的评估报告:
    • 单击总览页签,查看总览信息。多分类评估示例输出总览
    • 单击混淆矩阵页签,查看混淆矩阵。
    • 单击比例矩阵页签,查看比例矩阵。
    • 单击统计信息页签,查看模型统计信息。多分类评估示例输出统计信息
    该评估报告对应的JSON文件如下。
    {
        "ActualLabelFrequencyList": [5,
            5],
        "ActualLabelProportionList": [0.5,
            0.5],
        "ConfusionMatrix": [[4,
                1],
            [2,
                3]],
        "LabelList": ["A",
            "B"],
        "LabelMeasureList": [{
                "Accuracy": 0.7,
                "Auc": 0.9,
                "F1": 0.7272727272727273,
                "FalseDiscoveryRate": 0.3333333333333333,
                "FalseNegative": 1,
                "FalseNegativeRate": 0.2,
                "FalsePositive": 2,
                "FalsePositiveRate": 0.4,
                "Kappa": 0.3999999999999999,
                "NegativePredictiveValue": 0.75,
                "Precision": 0.6666666666666666,
                "Sensitivity": 0.8,
                "Specificity": 0.6,
                "TrueNegative": 3,
                "TruePositive": 4},
            {
                "Accuracy": 0.7,
                "Auc": 0.9,
                "F1": 0.6666666666666666,
                "FalseDiscoveryRate": 0.25,
                "FalseNegative": 2,
                "FalseNegativeRate": 0.4,
                "FalsePositive": 1,
                "FalsePositiveRate": 0.2,
                "Kappa": 0.3999999999999999,
                "NegativePredictiveValue": 0.6666666666666666,
                "Precision": 0.75,
                "Sensitivity": 0.6,
                "Specificity": 0.8,
                "TrueNegative": 4,
                "TruePositive": 3}],
        "LabelNumber": 2,
        "OverallMeasures": {
            "Accuracy": 0.7,
            "Kappa": 0.3999999999999999,
            "LabelFrequencyBasedMicro": {
                "Accuracy": 0.7,
                "F1": 0.696969696969697,
                "FalseDiscoveryRate": 0.2916666666666666,
                "FalseNegative": 1.5,
                "FalseNegativeRate": 0.3,
                "FalsePositive": 1.5,
                "FalsePositiveRate": 0.3,
                "Kappa": 0.3999999999999999,
                "NegativePredictiveValue": 0.7083333333333333,
                "Precision": 0.7083333333333333,
                "Sensitivity": 0.7,
                "Specificity": 0.7,
                "TrueNegative": 3.5,
                "TruePositive": 3.5},
            "LogLoss": 0.4548640449724484,
            "MacroAveraged": {
                "Accuracy": 0.7,
                "F1": 0.696969696969697,
                "FalseDiscoveryRate": 0.2916666666666666,
                "FalseNegative": 1.5,
                "FalseNegativeRate": 0.3,
                "FalsePositive": 1.5,
                "FalsePositiveRate": 0.3,
                "Kappa": 0.3999999999999999,
                "NegativePredictiveValue": 0.7083333333333333,
                "Precision": 0.7083333333333333,
                "Sensitivity": 0.7,
                "Specificity": 0.7,
                "TrueNegative": 3.5,
                "TruePositive": 3.5},
            "MicroAveraged": {
                "Accuracy": 0.7,
                "F1": 0.7,
                "FalseDiscoveryRate": 0.3,
                "FalseNegative": 3,
                "FalseNegativeRate": 0.3,
                "FalsePositive": 3,
                "FalsePositiveRate": 0.3,
                "Kappa": 0.3999999999999999,
                "NegativePredictiveValue": 0.7,
                "Precision": 0.7,
                "Sensitivity": 0.7,
                "Specificity": 0.7,
                "TrueNegative": 7,
                "TruePositive": 7}},
        "PredictedLabelFrequencyList": [6,
            4],
        "PredictedLabelProportionList": [0.6,
            0.4],
        "ProportionMatrix": [[0.8,
                0.2],
            [0.4,
                0.6]]}