/// <summary> /// Evaluates the model on the single input. /// <seealso cref="EvaluateSingle(float[], string[])"/> /// </summary> /// <param name="floatFeatures">Array of float features</param> /// <param name="catFeatures">Array of categorical features</param> /// <returns>Array storing model prediction for the input</returns> public double[] EvaluateSingle(float[] floatFeatures, string[] catFeatures) { uint resultSize = GetDimensionsCount(ModelContainer.ModelHandler); double[] results = new double[resultSize]; bool res = CatBoostModelEvaluator.CalcModelPredictionSingle( ModelContainer.ModelHandler, floatFeatures, (uint)floatFeatures.Length, catFeatures, (uint)catFeatures.Length, results, resultSize ); if (res) { return(results); } else { string msg = ""; throw new CatBoostException( "An error has occurred in the CalcModelPredictionSingle() method in catboostmodel library.\n" + $"Returned error message: {msg}" ); } }
/// <summary> /// Evaluates the model on the input batch. /// <seealso cref="EvaluateSingle(float[], string[])"/> /// </summary> /// <param name="floatFeatures"> /// 2D array of float features. /// Should have the same <c>.GetLength(0)</c> as <paramref name="catFeatures"/> /// </param> /// <param name="catFeatures"> /// 2D array of categorical features encoded as strings. /// Should have the same <c>.GetLength(0)</c> as <paramref name="floatFeatures"/> /// </param> /// <returns>2D array with model predictions for all samples in the batch</returns> public double[,] EvaluateBatch(float[,] floatFeatures, string[,] catFeatures) { if (floatFeatures.GetLength(0) != catFeatures.GetLength(0)) { if (floatFeatures.GetLength(0) > 0 && catFeatures.GetLength(0) > 0) { throw new CatBoostException("Inconsistent EvaluateBatch arguments:" + $"got {floatFeatures.GetLength(0)} samples for float features " + $"but {catFeatures.GetLength(0)} samples for cat features"); } } uint docs = (uint)Math.Max(floatFeatures.GetLength(0), catFeatures.GetLength(0)); uint dim = GetDimensionsCount(ModelContainer.ModelHandler); IntPtr floatFeaturePtr = PointerTools.AllocateToPtr(floatFeatures); IntPtr catFeaturePtr = PointerTools.AllocateToPtr(catFeatures); try { uint resultSize = dim * docs; double[] results = new double[resultSize]; bool res = CatBoostModelEvaluator.CalcModelPrediction( ModelContainer.ModelHandler, docs, floatFeaturePtr, (uint)floatFeatures.GetLength(1), catFeaturePtr, (uint)catFeatures.GetLength(1), results, resultSize ); if (res) { double[,] resultMatrix = new double[docs, dim]; for (int doc = 0; doc < docs; ++doc) { for (int d = 0; d < dim; ++d) { resultMatrix[doc, d] = results[dim * doc + d]; } } return(resultMatrix); } else { string msg = ""; throw new CatBoostException( "An error has occurred in the CalcModelPredictionSingle() method in catboostmodel library.\n" + $"Returned error message: {msg}" ); } } finally { // TODO Deallocate } }
/// <summary> /// Model constructor /// </summary> /// <param name="modelFilePath">Path to the model file</param> /// <param name="targetFeature">Name of the target feature</param> public CatBoostModel(string modelFilePath, string targetFeature) { Evaluator = new CatBoostModelEvaluator(modelFilePath); TargetFeature = targetFeature; }