Introducción: ¿Por qué C# en el mundo del machine learning?
El mundo del machine learning (ML) está fuertemente asociado con Python, R y Julia. Sin embargo, los desarrolladores de C# y la plataforma .NET a menudo se preguntan: ¿se puede usar el lenguaje habitual para crear sistemas inteligentes? La respuesta es sí, pero con reservas. C# no es una opción mainstream para Data Science, pero el ecosistema .NET ofrece herramientas potentes como ML.NET, TensorFlow.NET e integración con ONNX. En este artículo, analizaremos qué capacidades ofrece C# para ML, dónde su uso está justificado y dónde es mejor recurrir a Python.
Capacidades de C# para machine learning
1. ML.NET — framework nativo de Microsoft
ML.NET es un framework de machine learning multiplataforma y de código abierto, desarrollado específicamente para el ecosistema .NET. Permite integrar modelos de ML en aplicaciones de C# y F# sin necesidad de aprender Python. ML.NET admite:
- Clasificación y regresión (por ejemplo, análisis de sentimiento, predicción de precios).
- Agrupamiento (clustering) y ranking.
- Sistemas de recomendación y detección de anomalías.
- Procesamiento de imágenes (a través de la integración con TensorFlow).
Ejemplo de entrenamiento simple de un modelo de clasificación de sentimiento de texto:
using Microsoft.ML;using Microsoft.ML.Data;
public class SentimentData{ public string Text { get; set; } public bool Label { get; set; }}
public class SentimentPrediction{ public bool PredictedLabel { get; set; }}
var context = new MLContext();var data = context.Data.LoadFromTextFile<SentimentData>("data.csv", separatorChar: ',');var pipeline = context.Transforms.Text.FeaturizeText("Features", "Text") .Append(context.BinaryClassification.Trainers.SdcaLogisticRegression());var model = pipeline.Fit(data);var predictionEngine = context.Model.CreatePredictionEngine<SentimentData, SentimentPrediction>(model);var prediction = predictionEngine.Predict(new SentimentData { Text = "¡Este es un excelente producto!" });Console.WriteLine(prediction.PredictedLabel); // True (sentimiento positivo)ML.NET es ideal para integrar ML en aplicaciones .NET empresariales, como CRM, ERP o servicios web en ASP.NET Core.
2. Integración con TensorFlow y ONNX
C# puede trabajar con modelos preentrenados del mundo Python a través de los formatos TensorFlow y ONNX. Esto permite usar potentes redes neuronales (por ejemplo, ResNet, BERT) directamente en aplicaciones .NET.
Ejemplo de carga de un modelo ONNX para reconocimiento de imágenes:
using Microsoft.ML.OnnxRuntime;using Microsoft.ML.OnnxRuntime.Tensors;
var session = new InferenceSession("model.onnx");var input = new DenseTensor<float>(new float[1 * 3 * 224 * 224], new[] { 1, 3, 224, 224 });var inputs = new List<NamedOnnxValue>{ NamedOnnxValue.CreateFromTensor("input", input)};using var results = session.Run(inputs);var output = results.First().AsTensor<float>();Console.WriteLine($"Predicted class index: {output.ArgMax()}");De esta manera, puedes entrenar modelos en Python y desplegarlos en producción con C#.
3. Rendimiento y seguridad de tipos
C# es un lenguaje compilado con compilación JIT (o AOT mediante Native AOT). Proporciona:
- Alto rendimiento — para tareas donde la velocidad de inferencia es crítica (por ejemplo, sistemas en tiempo real).
- Tipado fuerte — menos errores en tiempo de ejecución, lo cual es crucial para soluciones de ML empresariales.
- Asincronía y multiproceso — soporte integrado para async/await y Task Parallel Library (TPL) para procesar grandes volúmenes de datos.
4. Herramientas para Data Science en Visual Studio
Para C# están disponibles: