C# para aprendizaje automático: posibilidades y limitaciones

Entrenador de Python en Línea para Principiantes

Aprende Python fácilmente sin sobrecargarte de teoría. Resuelve tareas prácticas con verificación automática, recibe pistas y escribe código directamente en el navegador, sin instalar nada.

Start Course

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:

Blogs

Book Recommendations