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

组件配置

您可以使用以下任意一种方式,配置多分类评估组件参数。

方式一:可视化方式

在PAI-Designer(原PAI-Studio)工作流页面配置组件参数。
页签参数描述
字段设置原分类结果列可以选择原始标签列,分类数量不能大于1000。
预测分类结果列预测分类列,通常为prediction_result列。
高级选项如果选中高级选项复选框,则预测结果概率列参数生效。
预测结果概率列用于计算模型的Logloss,通常为prediction_detail列,且仅对随机森林模型有效。如果对其他模型设置该参数,则系统可能报错。
执行调优核心数核内存分配搭配使用,默认为系统自动分配。
核内存分配每个核心的内存,单位为MB,默认为系统自动分配。

方式二:PAI命令方式

使用PAI命令方式,配置该组件参数。您可以使用SQL脚本组件进行PAI命令调用,详情请参见SQL脚本
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. 导入如下测试数据。
    idlabelpredictiondetail
    0AA{“A”: 0.6, “B”: 0.4}
    1AB{“A”: 0.45, “B”: 0.55}
    2AA{“A”: 0.7, “B”: 0.3}
    3AA{“A”: 0.9, “B”: 0.1}
    4BB{“A”: 0.2, “B”: 0.8}
    5BB{“A”: 0.1, “B”: 0.9}
    6BA{“A”: 0.52, “B”: 0.48}
    7BB{“A”: 0.4, “B”: 0.6}
    8BA{“A”: 0.6, “B”: 0.4}
    9AA{“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]]}