/*
* Copyright (c) 2011-2015, Peter Abeles. All Rights Reserved.
*
* This file is part of BoofCV (http://boofcv.org).
*
* Licensed 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.
*/
package boofcv.struct.learning;
import java.util.Arrays;
/**
* Used create a histogram of actual to predicted classification. This will be a NxN matrix. This can
* then be converted into a confusion matrix. Rows are actual type and columns is the predicted type.
*
* @author Peter Abeles
*/
public class ClassificationHistogram {
int results[];
int numTypes;
public ClassificationHistogram(int numTypes) {
results = new int[ numTypes*numTypes ];
this.numTypes = numTypes;
}
public void reset() {
Arrays.fill(results,0);
}
public void increment( int actual , int predicted ) {
results[actual*numTypes + predicted]++;
}
public Confusion createConfusion() {
Confusion confusion = new Confusion(numTypes);
for (int i = 0; i < numTypes; i++) {
int totalActual = 0;
for (int j = 0; j < numTypes; j++) {
totalActual += get(i,j);
}
confusion.actualCounts[i] = totalActual;
for (int j = 0; j < numTypes; j++) {
double fraction = get(i,j)/(double)totalActual;
confusion.matrix.set(i, j, fraction);
}
}
return confusion;
}
public int get( int actual , int predicted ) {
return results[actual*numTypes + predicted];
}
}