in packages/dispatcher/src/mathematics/confusion_matrix/ConfusionMatrixBase.ts [37:387]
public generateConfusionMatrixMetricStructure(
quantileConfiguration: number = 4): IConfusionMatrixagglomeratedMetricStructure {
const confusionMatrix: IConfusionMatrix = this;
const crossValidationBinaryConfusionMatrix: BinaryConfusionMatrix[] =
confusionMatrix.getBinaryConfusionMatrices();
const labelMap: Map<string, number> =
confusionMatrix.getLabelMap();
const labelBinaryConfusionMatrixBasicMetricMap: Map<string, Map<string, number>> =
new Map<string, Map<string, number>>();
labelMap.forEach((value: number, key: string) => {
labelBinaryConfusionMatrixBasicMetricMap.set(
key,
crossValidationBinaryConfusionMatrix[value].getBasicMetrics());
});
const labelBinaryConfusionMatrixMap: Map<string, BinaryConfusionMatrix> =
new Map<string, BinaryConfusionMatrix>();
labelMap.forEach((value: number, key: string) => {
labelBinaryConfusionMatrixMap.set(
key,
crossValidationBinaryConfusionMatrix[value]);
});
const binaryConfusionMatrices: BinaryConfusionMatrix[] =
confusionMatrix.getBinaryConfusionMatrices();
const microQuantileMetrics: IConfusionMatrixQuantileMetrics =
confusionMatrix.getMicroQuantileMetrics(binaryConfusionMatrices, quantileConfiguration);
const macroQuantileMetrics: IConfusionMatrixQuantileMetrics =
confusionMatrix.getMacroQuantileMetrics(binaryConfusionMatrices, quantileConfiguration);
const microAverageMetricArray: IConfusionMatrixBaseMicroAverageMetrics =
confusionMatrix.getMicroAverageMetrics(binaryConfusionMatrices);
const accuracy: number =
microAverageMetricArray.averagePrecisionRecallF1Accuracy;
const truePositives: number =
microAverageMetricArray.truePositives;
const falsePositives: number =
microAverageMetricArray.falsePositives;
const falseNegatives: number =
microAverageMetricArray.falseNegatives;
const supportMicroAverage: number =
microAverageMetricArray.total;
const microAverageMetrics: IConfusionMatrixBaseMetrics = {
// tslint:disable-next-line: object-literal-key-quotes
"accuracy": accuracy,
// tslint:disable-next-line: object-literal-key-quotes
"truePositives": truePositives,
// tslint:disable-next-line: object-literal-key-quotes
"falsePositives": falsePositives,
// tslint:disable-next-line: object-literal-key-quotes
"falseNegatives": falseNegatives,
// tslint:disable-next-line: object-literal-key-quotes
"total": supportMicroAverage };
const summationMicroAverageMetricArray: IConfusionMatrixSummationMetrics =
confusionMatrix.getSummationMicroAverageMetrics(binaryConfusionMatrices);
const summationPrecision: number =
summationMicroAverageMetricArray.summationPrecision;
const summationRecall: number =
summationMicroAverageMetricArray.summationRecall;
const summationF1Score: number =
summationMicroAverageMetricArray.summationF1Score;
const summationAccuracy: number =
summationMicroAverageMetricArray.summationAccuracy;
const summationTruePositives: number =
summationMicroAverageMetricArray.summationTruePositives;
const summationFalsePositives: number =
summationMicroAverageMetricArray.summationFalsePositives;
const summationTrueNegatives: number =
summationMicroAverageMetricArray.summationTrueNegatives;
const summationFalseNegatives: number =
summationMicroAverageMetricArray.summationFalseNegatives;
const summationSupport: number =
summationMicroAverageMetricArray.summationSupport;
const total: number =
summationMicroAverageMetricArray.total;
const summationMicroAverageMetrics: IConfusionMatrixSummationMetrics = {
// tslint:disable-next-line: object-literal-key-quotes
"summationPrecision": summationPrecision,
// tslint:disable-next-line: object-literal-key-quotes
"summationRecall": summationRecall,
// tslint:disable-next-line: object-literal-key-quotes
"summationF1Score": summationF1Score,
// tslint:disable-next-line: object-literal-key-quotes
"summationAccuracy": summationAccuracy,
// tslint:disable-next-line: object-literal-key-quotes
"summationTruePositives": summationTruePositives,
// tslint:disable-next-line: object-literal-key-quotes
"summationFalsePositives": summationFalsePositives,
// tslint:disable-next-line: object-literal-key-quotes
"summationTrueNegatives": summationTrueNegatives,
// tslint:disable-next-line: object-literal-key-quotes
"summationFalseNegatives": summationFalseNegatives,
// tslint:disable-next-line: object-literal-key-quotes
"summationSupport": summationSupport,
// tslint:disable-next-line: object-literal-key-quotes
"total": total };
const macroAverageMetricArray: IConfusionMatrixMeanMetrics =
confusionMatrix.getMacroAverageMetrics(binaryConfusionMatrices);
const averagePrecision: number =
macroAverageMetricArray.averagePrecision;
const averageRecall: number =
macroAverageMetricArray.averageRecall;
const averageF1Score: number =
macroAverageMetricArray.averageF1Score;
const averageAccuracy: number =
macroAverageMetricArray.averageAccuracy;
const averageTruePositives: number =
macroAverageMetricArray.averageTruePositives;
const averageFalsePositives: number =
macroAverageMetricArray.averageFalsePositives;
const averageTrueNegatives: number =
macroAverageMetricArray.averageTrueNegatives;
const averageFalseNegatives: number =
macroAverageMetricArray.averageFalseNegatives;
const averageSupport: number =
macroAverageMetricArray.averageSupport;
const supportMacroAverage: number =
macroAverageMetricArray.total;
const macroAverageMetrics: IConfusionMatrixMeanMetrics = {
// tslint:disable-next-line: object-literal-key-quotes
"averagePrecision": averagePrecision,
// tslint:disable-next-line: object-literal-key-quotes
"averageRecall": averageRecall,
// tslint:disable-next-line: object-literal-key-quotes
"averageF1Score": averageF1Score,
// tslint:disable-next-line: object-literal-key-quotes
"averageAccuracy": averageAccuracy,
// tslint:disable-next-line: object-literal-key-quotes
"averageTruePositives": averageTruePositives,
// tslint:disable-next-line: object-literal-key-quotes
"averageFalsePositives": averageFalsePositives,
// tslint:disable-next-line: object-literal-key-quotes
"averageTrueNegatives": averageTrueNegatives,
// tslint:disable-next-line: object-literal-key-quotes
"averageFalseNegatives": averageFalseNegatives,
// tslint:disable-next-line: object-literal-key-quotes
"averageSupport": averageSupport,
// tslint:disable-next-line: object-literal-key-quotes
"total": supportMacroAverage };
const summationMacroAverageMetricArray: IConfusionMatrixMeanMetrics =
confusionMatrix.getSummationMacroAverageMetrics(binaryConfusionMatrices);
const summationAveragePrecision: number =
summationMacroAverageMetricArray.averagePrecision;
const summationAverageRecall: number =
summationMacroAverageMetricArray.averageRecall;
const summationAverageF1Score: number =
summationMacroAverageMetricArray.averageF1Score;
const summationAverageAccuracy: number =
summationMacroAverageMetricArray.averageAccuracy;
const summationAverageTruePositives: number =
summationMacroAverageMetricArray.averageTruePositives;
const summationAverageFalsePositives: number =
summationMacroAverageMetricArray.averageFalsePositives;
const summationAverageTrueNegatives: number =
summationMacroAverageMetricArray.averageTrueNegatives;
const summationAverageFalseNegatives: number =
summationMacroAverageMetricArray.averageFalseNegatives;
const summationAverageSupport: number =
summationMacroAverageMetricArray.averageSupport;
const summationSupportMacroAverage: number =
summationMacroAverageMetricArray.total;
const summationMacroAverageMetrics: IConfusionMatrixMeanMetrics = {
// tslint:disable-next-line: object-literal-key-quotes
"averagePrecision": summationAveragePrecision,
// tslint:disable-next-line: object-literal-key-quotes
"averageRecall": summationAverageRecall,
// tslint:disable-next-line: object-literal-key-quotes
"averageF1Score": summationAverageF1Score,
// tslint:disable-next-line: object-literal-key-quotes
"averageAccuracy": summationAverageAccuracy,
// tslint:disable-next-line: object-literal-key-quotes
"averageTruePositives": summationAverageTruePositives,
// tslint:disable-next-line: object-literal-key-quotes
"averageFalsePositives": summationAverageFalsePositives,
// tslint:disable-next-line: object-literal-key-quotes
"averageTrueNegatives": summationAverageTrueNegatives,
// tslint:disable-next-line: object-literal-key-quotes
"averageFalseNegatives": summationAverageFalseNegatives,
// tslint:disable-next-line: object-literal-key-quotes
"averageSupport": summationAverageSupport,
// tslint:disable-next-line: object-literal-key-quotes
"total": summationSupportMacroAverage };
const positiveSupportLabelMacroAverageMetricArray: IConfusionMatrixMeanMetrics =
confusionMatrix.getPositiveSupportLabelMacroAverageMetrics(binaryConfusionMatrices);
const positiveSupportLabelAveragePrecision: number =
positiveSupportLabelMacroAverageMetricArray.averagePrecision;
const positiveSupportLabelAverageRecall: number =
positiveSupportLabelMacroAverageMetricArray.averageRecall;
const positiveSupportLabelAverageF1Score: number =
positiveSupportLabelMacroAverageMetricArray.averageF1Score;
const positiveSupportLabelAverageAccuracy: number =
positiveSupportLabelMacroAverageMetricArray.averageAccuracy;
const positiveSupportLabelAverageTruePositives: number =
positiveSupportLabelMacroAverageMetricArray.averageTruePositives;
const positiveSupportLabelAverageFalsePositives: number =
positiveSupportLabelMacroAverageMetricArray.averageFalsePositives;
const positiveSupportLabelAverageTrueNegatives: number =
positiveSupportLabelMacroAverageMetricArray.averageTrueNegatives;
const positiveSupportLabelAverageFalseNegatives: number =
positiveSupportLabelMacroAverageMetricArray.averageFalseNegatives;
const positiveSupportLabelAverageSupport: number =
positiveSupportLabelMacroAverageMetricArray.averageSupport;
const positiveSupportLabelSupportMacroAverage: number =
positiveSupportLabelMacroAverageMetricArray.total;
const positiveSupportLabelMacroAverageMetrics: IConfusionMatrixMeanMetrics = {
// tslint:disable-next-line: object-literal-key-quotes
"averagePrecision": positiveSupportLabelAveragePrecision,
// tslint:disable-next-line: object-literal-key-quotes
"averageRecall": positiveSupportLabelAverageRecall,
// tslint:disable-next-line: object-literal-key-quotes
"averageF1Score": positiveSupportLabelAverageF1Score,
// tslint:disable-next-line: object-literal-key-quotes
"averageAccuracy": positiveSupportLabelAverageAccuracy,
// tslint:disable-next-line: object-literal-key-quotes
"averageTruePositives": positiveSupportLabelAverageTruePositives,
// tslint:disable-next-line: object-literal-key-quotes
"averageFalsePositives": positiveSupportLabelAverageFalsePositives,
// tslint:disable-next-line: object-literal-key-quotes
"averageTrueNegatives": positiveSupportLabelAverageTrueNegatives,
// tslint:disable-next-line: object-literal-key-quotes
"averageFalseNegatives": positiveSupportLabelAverageFalseNegatives,
// tslint:disable-next-line: object-literal-key-quotes
"averageSupport": positiveSupportLabelAverageSupport,
// tslint:disable-next-line: object-literal-key-quotes
"total": positiveSupportLabelSupportMacroAverage };
const positiveSupportLabelSummationMacroAverageMetricArray: IConfusionMatrixMeanMetrics =
confusionMatrix.getPositiveSupportLabelSummationMacroAverageMetrics(binaryConfusionMatrices);
const positiveSupportLabelSummationAveragePrecision: number =
positiveSupportLabelSummationMacroAverageMetricArray.averagePrecision;
const positiveSupportLabelSummationAverageRecall: number =
positiveSupportLabelSummationMacroAverageMetricArray.averageRecall;
const positiveSupportLabelSummationAverageF1Score: number =
positiveSupportLabelSummationMacroAverageMetricArray.averageF1Score;
const positiveSupportLabelSummationAverageAccuracy: number =
positiveSupportLabelSummationMacroAverageMetricArray.averageAccuracy;
const positiveSupportLabelSummationAverageTruePositives: number =
positiveSupportLabelSummationMacroAverageMetricArray.averageTruePositives;
const positiveSupportLabelSummationAverageFalsePositives: number =
positiveSupportLabelSummationMacroAverageMetricArray.averageFalsePositives;
const positiveSupportLabelSummationAverageTrueNegatives: number =
positiveSupportLabelSummationMacroAverageMetricArray.averageTrueNegatives;
const positiveSupportLabelSummationAverageFalseNegatives: number =
positiveSupportLabelSummationMacroAverageMetricArray.averageFalseNegatives;
const positiveSupportLabelSummationAverageSupport: number =
positiveSupportLabelSummationMacroAverageMetricArray.averageSupport;
const positiveSupportLabelSummationSupportMacroAverage: number =
positiveSupportLabelSummationMacroAverageMetricArray.total;
const positiveSupportLabelSummationMacroAverageMetrics: IConfusionMatrixMeanMetrics = {
// tslint:disable-next-line: object-literal-key-quotes
"averagePrecision": positiveSupportLabelSummationAveragePrecision,
// tslint:disable-next-line: object-literal-key-quotes
"averageRecall": positiveSupportLabelSummationAverageRecall,
// tslint:disable-next-line: object-literal-key-quotes
"averageF1Score": positiveSupportLabelSummationAverageF1Score,
// tslint:disable-next-line: object-literal-key-quotes
"averageAccuracy": positiveSupportLabelSummationAverageAccuracy,
// tslint:disable-next-line: object-literal-key-quotes
"averageTruePositives": positiveSupportLabelSummationAverageTruePositives,
// tslint:disable-next-line: object-literal-key-quotes
"averageFalsePositives": positiveSupportLabelSummationAverageFalsePositives,
// tslint:disable-next-line: object-literal-key-quotes
"averageTrueNegatives": positiveSupportLabelSummationAverageTrueNegatives,
// tslint:disable-next-line: object-literal-key-quotes
"averageFalseNegatives": positiveSupportLabelSummationAverageFalseNegatives,
// tslint:disable-next-line: object-literal-key-quotes
"averageSupport": positiveSupportLabelSummationAverageSupport,
// tslint:disable-next-line: object-literal-key-quotes
"total": positiveSupportLabelSummationSupportMacroAverage };
const weightedMacroAverageMetricArray: IConfusionMatrixMeanDerivedMetrics =
confusionMatrix.getWeightedMacroAverageMetrics(binaryConfusionMatrices);
const weightedAveragePrecision: number =
weightedMacroAverageMetricArray.averagePrecision;
const weightedAverageRecall: number =
weightedMacroAverageMetricArray.averageRecall;
const weightedAverageF1Score: number =
weightedMacroAverageMetricArray.averageF1Score;
const weightedAverageAccuracy: number =
weightedMacroAverageMetricArray.averageAccuracy;
const weightedAverageSupport: number =
weightedMacroAverageMetricArray.averageSupport;
const supportWeightedMacroAverage: number =
weightedMacroAverageMetricArray.total;
const weightedMacroAverageMetrics: IConfusionMatrixMeanDerivedWeightedMetrics = {
// tslint:disable-next-line: object-literal-key-quotes
"weightedAveragePrecision": weightedAveragePrecision,
// tslint:disable-next-line: object-literal-key-quotes
"weightedAverageRecall": weightedAverageRecall,
// tslint:disable-next-line: object-literal-key-quotes
"weightedAverageF1Score": weightedAverageF1Score,
// tslint:disable-next-line: object-literal-key-quotes
"weightedAverageAccuracy": weightedAverageAccuracy,
// tslint:disable-next-line: object-literal-key-quotes
"weightedAverageSupport": weightedAverageSupport,
// tslint:disable-next-line: object-literal-key-quotes
"total": supportWeightedMacroAverage };
const summationWeightedMacroAverageMetricArray: IConfusionMatrixMeanMetrics =
confusionMatrix.getSummationWeightedMacroAverageMetrics(binaryConfusionMatrices);
const summationWeightedAveragePrecision: number =
summationWeightedMacroAverageMetricArray.averagePrecision;
const summationWeightedAverageRecall: number =
summationWeightedMacroAverageMetricArray.averageRecall;
const summationWeightedAverageF1Score: number =
summationWeightedMacroAverageMetricArray.averageF1Score;
const summationWeightedAverageAccuracy: number =
summationWeightedMacroAverageMetricArray.averageAccuracy;
const summationWeightedAverageTruePositives: number =
summationWeightedMacroAverageMetricArray.averageTruePositives;
const summationWeightedAverageFalsePositives: number =
summationWeightedMacroAverageMetricArray.averageFalsePositives;
const summationWeightedAverageTrueNegatives: number =
summationWeightedMacroAverageMetricArray.averageTrueNegatives;
const summationWeightedAverageFalseNegatives: number =
summationWeightedMacroAverageMetricArray.averageFalseNegatives;
const summationWeightedAverageSupport: number =
summationWeightedMacroAverageMetricArray.averageSupport;
const summationWeightedSupportMacroAverage: number =
summationWeightedMacroAverageMetricArray.total;
const summationWeightedMacroAverageMetrics: IConfusionMatrixMeanMetrics = {
// tslint:disable-next-line: object-literal-key-quotes
"averagePrecision": summationWeightedAveragePrecision,
// tslint:disable-next-line: object-literal-key-quotes
"averageRecall": summationWeightedAverageRecall,
// tslint:disable-next-line: object-literal-key-quotes
"averageF1Score": summationWeightedAverageF1Score,
// tslint:disable-next-line: object-literal-key-quotes
"averageAccuracy": summationWeightedAverageAccuracy,
// tslint:disable-next-line: object-literal-key-quotes
"averageTruePositives": summationWeightedAverageTruePositives,
// tslint:disable-next-line: object-literal-key-quotes
"averageFalsePositives": summationWeightedAverageFalsePositives,
// tslint:disable-next-line: object-literal-key-quotes
"averageTrueNegatives": summationWeightedAverageTrueNegatives,
// tslint:disable-next-line: object-literal-key-quotes
"averageFalseNegatives": summationWeightedAverageFalseNegatives,
// tslint:disable-next-line: object-literal-key-quotes
"averageSupport": summationWeightedAverageSupport,
// tslint:disable-next-line: object-literal-key-quotes
"total": summationWeightedSupportMacroAverage };
const confusionMatrixMetricStructure: IConfusionMatrixagglomeratedMetricStructure = {
microQuantileMetrics,
macroQuantileMetrics,
confusionMatrix,
labelBinaryConfusionMatrixBasicMetricMap,
labelBinaryConfusionMatrixMap,
microAverageMetrics,
summationMicroAverageMetrics,
macroAverageMetrics,
summationMacroAverageMetrics,
positiveSupportLabelMacroAverageMetrics,
positiveSupportLabelSummationMacroAverageMetrics,
weightedMacroAverageMetrics,
summationWeightedMacroAverageMetrics };
return confusionMatrixMetricStructure;
}