internal static NeuralNetworkPredictionsReport UpdateFor( NeuralNetworkPredictionsReport previousReport, BankTransactionClass predictionClass, bool predictionWasCorrect) { if (predictionWasCorrect) { return(new NeuralNetworkPredictionsReport( previousReport.TotalCorrectPredictions + 1, previousReport.TotalIncorrectPredictions, previousReport.IncorrectFraudulentPredictions, previousReport.IncorrectLegitimatePredictions)); } if (predictionClass == BankTransactionClass.Fraudulent) { return(new NeuralNetworkPredictionsReport( previousReport.TotalCorrectPredictions, previousReport.TotalIncorrectPredictions + 1, previousReport.IncorrectFraudulentPredictions + 1, previousReport.IncorrectLegitimatePredictions)); } if (predictionClass == BankTransactionClass.Legitimate) { return(new NeuralNetworkPredictionsReport( previousReport.TotalCorrectPredictions, previousReport.TotalIncorrectPredictions + 1, previousReport.IncorrectFraudulentPredictions, previousReport.IncorrectLegitimatePredictions + 1)); } throw new InvalidOperationException($"Transaction class {predictionClass} is not supported."); }
private List <BankTransaction> TrainingDataRowsForClass(BankTransactionClass targetClass) { var dataRowsInClass = allDataRows.Value .Where(transaction => transaction.Class == targetClass) .ToList(); return(RandomSubsetOfDataSet(dataRowsInClass, rowCountOfSmallestTransactionCategory.Value / 2)); }
private bool IsCorrectPrediction(double[] prediction, BankTransactionClass actualClass) { var predictedClass = Array.IndexOf(prediction, prediction.Max()); return((BankTransactionClass)predictedClass == actualClass ? true : false); }