blob: 0a62182a1f60da590dc001e6d8add0f1ebe04e71 [file] [log] [blame]
#-------------------------------------------------------------
#
# Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements. See the NOTICE file
# distributed with this work for additional information
# regarding copyright ownership. The ASF licenses this file
# to you under the Apache License, Version 2.0 (the
# "License"); you may not use this file except in compliance
# with the License. You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing,
# software distributed under the License is distributed on an
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
# KIND, either express or implied. See the License for the
# specific language governing permissions and limitations
# under the License.
#
#-------------------------------------------------------------
# INPUT PARAMETERS:
# ---------------------------------------------------------------------------------------------
# NAME TYPE DEFAULT MEANING
# ---------------------------------------------------------------------------------------------
# P Double --- vector of Predictions
# Y Double --- vector of Golden standard One Hot Encoded
# ---------------------------------------------------------------------------------------------
# OUTPUT:
# ---------------------------------------------------------------------------------------------
# NAME TYPE DEFAULT MEANING
# ---------------------------------------------------------------------------------------------
# ConfusionSum Double --- The Confusion Matrix Sums of classifications
# ConfusionAvg Double --- The Confusion Matrix averages of each true class
# Output is like:
# True Labels
# 1 2
# 1 TP | FP
# Predictions ----+----
# 2 FN | TN
#
# TP = True Positives
# FP = False Positives
# FN = False Negatives
# TN = True Negatives
m_confusionMatrix = function(Matrix[Double] P, Matrix[Double] Y)
return(Matrix[Double] confusionSum, Matrix[Double] confusionAvg)
{
if(ncol(P) > 1 | ncol(Y) > 1)
stop("CONFUSION MATRIX: Invalid input number of cols should be 1 in both P ["+ncol(P)+"] and Y ["+ncol(Y)+"]")
if(nrow(P) != nrow(Y))
stop("CONFUSION MATRIX: The number of rows have to be equal in both P ["+nrow(P)+"] and Y ["+nrow(Y)+"]")
if(min(P) < 1 | min(Y) < 1)
stop("CONFUSION MATRIX: All Values in P and Y should be abore or equal to 1, min(P):" + min(P) + " min(Y):" + min(Y) )
dim = max(max(Y),max(P))
confusionSum = table(P, Y, dim, dim)
# max to avoid devision by 0, in case a colum contain no entries.
confusionAvg = confusionSum / max(1,colSums(confusionSum))
}