C# para aprendizaje automático: capacidades, limitaciones y ejemplos de código

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: C# en el Mundo del Machine Learning

El mundo del machine learning (ML) está fuertemente asociado con Python: TensorFlow, PyTorch, scikit-learn — estas son las herramientas principales de un científico de datos. Sin embargo, el ecosistema .NET y el lenguaje C# ofrecen un camino alternativo. La plataforma ML.NET de Microsoft permite integrar ML directamente en aplicaciones empresariales C# sin reescribir código en Python. Pero, ¿qué tan práctico es esto? En este artículo, examinaremos las capacidades reales, las limitaciones y escribiremos código C# funcional para machine learning.

En el sitio web pythonlib.ru, a menudo hablamos de Python, pero hoy veremos la tarea desde una perspectiva diferente. C# es un lenguaje fuertemente tipado y de alto rendimiento, y su uso para ML puede estar justificado en entornos corporativos donde ya existe código .NET heredado.



Capacidades Clave de ML.NET: ¿Qué Puede Hacer C#?

ML.NET es una biblioteca multiplataforma de código abierto. Soporta algoritmos clásicos: regresión, clasificación, agrupamiento, así como deep learning mediante integración con TensorFlow y ONNX.



1. Clasificación de Texto (Análisis de Sentimiento)

El ejemplo más popular es el análisis de sentimiento. ML.NET permite entrenar un modelo en C# sin llamar a scripts externos.

using Microsoft.ML;using Microsoft.ML.Data;

// 1. Definir esquema de datospublic class SentimentData{ public string Text { get; set; } public bool Label { get; set; }}

public class SentimentPrediction{ [ColumnName("PredictedLabel")] public bool Prediction { get; set; } public float Probability { get; set; }}

// 2. Cargar datos y entrenar el modelovar context = new MLContext();IDataView data = context.Data.LoadFromTextFile<SentimentData>("data.tsv", separatorChar: '\\t');

var pipeline = context.Transforms.Text.FeaturizeText("Features", nameof(SentimentData.Text)) .Append(context.BinaryClassification.Trainers.SdcaLogisticRegression());

var model = pipeline.Fit(data);

// 3. Hacer una predicciónvar predictionEngine = context.Model.CreatePredictionEngine<SentimentData, SentimentPrediction>(model);var result = predictionEngine.Predict(new SentimentData { Text = "C# is great for ML!" });Console.WriteLine($"Sentimiento: {(result.Prediction ? "Positivo" : "Negativo")}");

Este código es completamente autónomo. No necesitas Python, ni solicitudes REST a servicios externos. Todo funciona dentro de un solo proceso .NET.



2. Integración con TensorFlow y ONNX

Si necesitas una red neuronal (por ejemplo, para reconocimiento de imágenes), ML.NET puede cargar un modelo preentrenado de TensorFlow o ONNX y usarlo para inferencia.

var pipeline = context.Transforms.LoadImages("Image", folder, "ImagePath")    .Append(context.Transforms.ResizeImages("Image", 224, 224))    .Append(context.Transforms.ExtractPixels("Input", "Image"))    .Append(modelTensorFlow);

var prediction = pipeline.Fit(data).CreatePredictionEngine<ImageData, ImagePrediction>(data);var result = prediction.Predict(new ImageData { ImagePath = "cat.jpg" });

Un matiz importante: entrenar una red neuronal compleja en C# actualmente es imposible — necesitas usar Python para eso. Pero cargar y usar un modelo ya preparado es un escenario 100% funcional.



Limitaciones de C# para ML: ¿Por Qué Python Sigue Siendo Mejor?

A pesar de todas las ventajas, C# pierde frente a Python en varios aspectos clave.



1. Comunidad y Tamaño de las Bibliotecas

La cantidad de paquetes NuGet para ML es cientos de veces menor que en PyPI. Si necesitas algo no estándar (por ejemplo, un nuevo algoritmo de un artículo de 2024), lo más probable es que solo esté disponible en Python. ML.NET se actualiza una vez por trimestre, mientras que scikit-learn y PyTorch se actualizan casi continuamente.



2. Entrenamiento de Modelos

ML.NET maneja bien tareas con datos tabulares (regresión, clasificación). Pero para

Blogs

Book Recommendations