¿Qué es ML.NET?
ML.NET es un marco de aprendizaje automático gratuito, de código abierto y multiplataforma, creado por Microsoft, para la plataforma de desarrolladores de .NET.
ML.NET
ML.NET es un marco de aprendizaje automático gratuito, de código abierto y multiplataforma para la plataforma para desarrolladores de .NET.
ML.NET le permite entrenar, crear y enviar modelos de aprendizaje automático personalizados mediante C# o F# para una variedad de escenarios de ML. ML.NET incluye funciones como el aprendizaje automático automatizado (AutoML) y herramientas como ML.NET CLI y ML.NET Model Builder, que facilita aún más la integración del aprendizaje automático en sus aplicaciones.
ML.NET paso a paso
ML.NET sigue los mismos pasos básicos para casi todos los escenarios; combina la carga de datos, las transformaciones y el entrenamiento de modelos para facilitar la creación de modelos de aprendizaje automático.
Crear contexto de ML.NET
MLContext es el punto de partida para todas las operaciones de ML.NET. MLContext
se usa para todos los aspectos de la creación y el consumo de un modelo de ML.NET. Es similar conceptualmente a DbContext
en Entity Framework.
var mlContext = new MLContext();
Una vez que tenga una instancia de un MLContext
, puede cargar y transformar datos, elegir el mejor algoritmo para la tarea de aprendizaje automático y entrenar el modelo. Una vez entrenado, puede probar la precisión del modelo, guardarlo en el disco y usarlo para realizar predicciones. Un MLContext
se puede inicializar desde un modelo que se guardó anteriormente en el disco.
Cargar datos
El aprendizaje automático utiliza datos conocidos (por ejemplo, datos de entrenamiento) para encontrar patrones a fin de hacer predicciones sobre datos nuevos y desconocidos.
Las entradas para el aprendizaje automático se denominan Características, que son los atributos que se usan para realizar predicciones. La salida del aprendizaje automático se denomina Etiqueta, que es la predicción real.
Los datos de ML.NET se representan como IDataView, que es una manera flexible y eficaz de describir datos tabulares (por ejemplo, filas y columnas). Los objetos IDataView pueden contener números, texto, booleanos, vectores y mucho más. Puede cargar datos desde archivos o desde orígenes de streaming en tiempo real a un objeto IDataView.
LoadFromTextFile
le permite cargar datos de TXT, CSV, TSV y otros formatos de archivo.
IDataView trainingData = mlContext.Data
.LoadFromTextFile<SentimentInput>(dataPath, separatorChar: ',', hasHeader: true);
LoadFromEnumerable
permite cargar desde colecciones en memoria, JSON/XML, bases de datos relacionales y no relacionales (por ejemplo, SQL, CosmosDB, MongoDB) y muchos otros orígenes de datos.
IDataView trainingData = mlContext.Data
.LoadFromEnumerable<SentimentInput>(inMemoryCollection);
Transformación de datos
En la mayoría de los casos, los datos que tiene disponibles no son adecuados para usarlos directamente para entrenar un modelo de aprendizaje automático. Los datos sin procesar deben procesarse previamente mediante transformaciones de datos.
Los transformadores toman datos, realizan algún trabajo en ellos y devuelven nuevos datos transformados.
Hay un conjunto integrado de transformaciones de datos para reemplazar los valores que faltan, la conversión de datos, la caracterización de texto, etc.
// Convert sentiment text into numeric features
IEstimator<ITransformer> dataTransformPipeline = mlContext.Transforms.Text
.FeaturizeText("Features", "SentimentText");
Elegir algoritmo
Al usar el aprendizaje automático y el ML.NET, debe elegir una tarea de aprendizaje automático que se adapte a su escenario. ML.NET ofrece más de 30 algoritmos (o instructores) para una variedad de tareas de ML:
Tarea de ML | Algoritmos |
---|---|
Clasificación binaria (por ejemplo, análisis de sentimiento) | AveragedPerceptronTrainer, SdcaLogisticRegressionBinaryTrainer |
Clasificación de varias clases (por ejemplo, categorización de temas) | LightGbmMulticlassTrainer, OneVersusAllTrainer |
Regresión (por ejemplo, predicción de precios) | LbfgsPoissonRegressionTrainer, FastTreeRegressionTrainer |
Agrupación en clústeres (por ejemplo, segmentación de clientes) | KMeansTrainer |
Detección de anomalías (por ejemplo, detección de picos de ventas de Shampoo) | RandomizedPcaTrainer |
Recomendación (por ejemplo, recomienda una película) | MatrixFactorizationTrainer |
Clasificación (por ejemplo, resultados de la búsqueda) | LightGbmRankingTrainer, FastTreeRankingTrainer |
IEstimator<ITransformer> trainer = mlContext.BinaryClassification.Trainers
.AveragedPerceptron(labelColumnName: "Sentiment", featureColumnName: "Features"));
IEstimator<ITransformer> trainingPipeline = dataTransformPipeline.Append(trainer);
Entrenar modelo
Las transformaciones de los datos y los algoritmos que ha especificado no se ejecutan hasta que llama al método Fit()
(debido al enfoque de carga diferida de ML.NET). Es entonces cuando se produce el entrenamiento del modelo.
Un estimador toma datos, aprende de los datos y crea un transformador. En el caso del entrenamiento del modelo, los datos de entrenamiento son la entrada y el modelo entrenado es la salida; Por lo tanto, el modelo entrenado es un transformador que convierte las características de entrada de los nuevos datos en predicciones de salida.
ITransformer model = pipeline.Fit(trainingData);
Evaluar modelo
ML.NET ofrece evaluadores que examinan el rendimiento del modelo en una variedad de métricas:
- Exactitud
- Área bajo la curva (AUC)
- R cuadrado
- Error cuadrático medio (RMSE)
// Make predictions on test data
IDataView predictions = model.Transform(testDataView);
// Evaluate model and return metrics
var metrics = mlContext.BinaryClassification
.Evaluate(predictions, labelColumnName: "Sentiment");
// Print out accuracy metric
Console.WriteLine("Accuracy" + metrics.Accuracy);
Implementar & el modelo de consumo
Puede guardar el modelo entrenado como un archivo binario que luego se integra en las aplicaciones .NET.
mlContext.Model.Save(model, trainingData, "model.zip");
Una vez que haya guardado el modelo entrenado, puede cargar el modelo en sus otras aplicaciones .NET.
MLContext mlContext = new MLContext();
DataViewSchema predictionPipelineSchema;
ITransformer trainedModel = mlContext.Model.Load("model.zip", out predictionPipelineSchema);
A continuación, puede usar el modelo cargado para empezar a realizar predicciones. Puede usar el Motor de predicción, que es una API útil que se usa para realizar predicciones únicas, o el método Transformación, que se usa para realizar predicciones por lotes.
var predEngine = mlContext.Model.CreatePredictionEngine(model);
SentimentInput sampleComment = new SentimentInput{ SentimentText = "This is very rude!" };
SentimentOutput result = predEngine.Predict(sampleComment);
Console.WriteLine(result.Prediction);
Obtenga información sobre cómo usar un modelo de Azure Machine Learning entrenado
Preguntas más frecuentes sobre ML.NET
¿Para qué se usa ML.NET?
ML.NET es un marco de aprendizaje automático para desarrolladores de .NET; puede usar ML.NET para integrar modelos de aprendizaje automático en sus aplicaciones .NET. Puede usar ML.NET en muchos escenarios, como el análisis de sentimientos, predicción de precios, recomendación de productos, proyección de ventas, clasificación de imágenes, detección de objetos y mucho más. Consulte el repositorio de ejemplos de GitHub para ver más ejemplos de lo que puede hacer con ML.NET.
¿Cuál es la diferencia entre la IA y el aprendizaje automático?
IA es una rama de la informática que implica entrenar equipos para hacer cosas que, por lo general, requieren inteligencia humana. El aprendizaje automático es un subconjunto de IA que implica que los equipos aprender de los datos y busquen patrones en estos para poder realizar predicciones sobre datos nuevos por sí mismos.
¿Por qué necesito ML.NET y en qué se diferencia ML.NET de las demás ofertas de inteligencia artificial y aprendizaje automático de Microsoft?
Microsoft ofrece muchos productos y servicios de IA y ML, por lo que aquí se muestra un desglose de las diferencias entre ellos:
- ML.NET: cree soluciones de aprendizaje automático personalizadas e intégrelas en sus aplicaciones de .NET.
- Azure Cognitive Services: servicios en la nube que proporcionan modelos de inteligencia artificial y aprendizaje automático pregenerados para agregarlos a las aplicaciones. Incluye un conjunto de API para usar una variedad de modelos de métodos de comunicación naturales con visión y voz.
- Azure Machine Learning: entorno completo en la nube para hospedar el ciclo de vida del modelo de ML de un extremo a otro, incluido el entrenamiento del modelo, el control de versiones, la implementación y la administración de versiones a escala de nube.
¿En qué tipos de aplicaciones puedo implementar modelos de ML.NET?
Puede usar ML.NET con casi cualquier aplicación .NET, incluidas aplicaciones y servicios web, microservicios/contenedores, aplicaciones de escritorio (WPF y WinForms), Azure Functions y cualquier tipo de aplicación del lado servidor de Azure, y aplicaciones de consola.
¿Qué marcos puedo usar con ML.NET?
ML.NET se admite en .NET, .NET Core (versión 2.0 y posteriores) y .NET Framework (versión 4.6.1 y posteriores).
¿Qué arquitecturas de procesos admite ML.NET?
ML.NET se admite actualmente en procesos x64 y x86.
¿Qué sistema operativo puedo usar con ML.NET?
ML.NET es multiplataforma, por lo que se admite en Windows, Linux y macOS.
¿ML.NET es gratis?
Sí! Al igual que el resto de la plataforma .NET, ML.NET es 100% gratis. Para obtener más información, consulte .NET es gratuito. ML.NET tiene licencia bajo la licencia del MIT.
¿Cuál es el mejor lenguaje de programación para ML.NET?
ML.NET se admite actualmente para C# y F#.
¿Cómo puedo aprender ML.NET?
Puede empezar a usar ML.NET con este tutorial, o puede consultar nuestro ML.NET docs para obtener más información.
¿Cómo puedo instalar ML.NET?
Puede agregar ML.NET a cualquier proyecto .NET agregando el paquete Microsoft.ML NuGet, o puede comenzar con ML.NET Model Builder (Windows) o la CLI de ML.NET (Windows, macOS y Linux).
¿Listo para empezar?
Nuestro tutorial paso a paso le ayudará a ejecutar ML.NET en su equipo.