ML.NET이란?
ML.NET은 .NET 개발자 플랫폼을 위해 Microsoft에서 만든 무료 오픈 소스 플랫폼 간 기계 학습 프레임워크입니다.
ML.NET
ML.NET은 .NET 개발자 플랫폼을 위한 플랫폼 간 무료 오픈 소스 기계 학습 프레임워크입니다.
ML.NET을 사용하면 다양한 ML 시나리오에서 C# 또는 F#을 사용하여 사용자 지정 기계 학습 모델을 학습, 빌드 및 제공할 수 있습니다. ML.NET AutoML(자동 기계 학습)과 같은 기능과 ML.NET CLI 및 ML.NET Model Builder 같은 도구가 포함되어 기계 학습을 애플리케이션에 더 쉽게 통합할 수 있습니다.
ML.NET의 작동 단계
ML.NET은 거의 모든 시나리오에 대해 동일한 기본 단계를 따릅니다. 데이터 로드, 변환 및 모델 교육을 결합하여 기계 학습 모델을 쉽게 생성할 수 있습니다.
ML.NET 컨텍스트 만들기
MLContext는 모든 ML.NET 작업의 출발점입니다. MLContext
는 ML.NET 모델을 만들고 사용하는 모든 측면에 사용됩니다. Entity Framework의 DbContext
와 개념상 유사합니다.
var mlContext = new MLContext();
MLContext
의 인스턴스가 있으면 데이터를 로드 및 변환하고, 기계 학습 작업에 가장 적합한 알고리즘을 선택하고, 모델을 학습시킬 수 있습니다. 학습된 후에는 모델의 정확도를 테스트하고 디스크에 저장한 다음 이를 사용하여 예측을 수행할 수 있습니다. 이전에 디스크에 저장된 모델에서 MLContext
를 초기화할 수 있습니다.
데이터 로드
기계 학습은 알려진 데이터(예: 학습 데이터)를 사용하여 알 수 없는 새로운 데이터를 예측하기 위해 패턴을 찾습니다.
기계 학습을 위한 입력은 예측에 사용되는 특성인 기능이라고 합니다. 머신 러닝의 출력은 실제 예측인 레이블이라고 합니다.
ML.NET의 데이터는 IDataView로 표현되며 이는 표 형식 데이터(예: 행 및 열)를 설명하는 유연하고 효율적인 방법입니다. IDataView 개체는 숫자, 텍스트, 부울, 벡터 등을 포함할 수 있습니다. 파일 또는 실시간 스트리밍 소스에서 IDataView로 데이터를 로드할 수 있습니다.
LoadFromTextFile
을 사용하면 TXT, CSV, TSV 및 기타 파일 형식에서 데이터를 로드할 수 있습니다.
IDataView trainingData = mlContext.Data
.LoadFromTextFile<SentimentInput>(dataPath, separatorChar: ',', hasHeader: true);
LoadFromEnumerable
을 사용하면 메모리 내 컬렉션, JSON/XML, 관계형 및 비관계형 데이터베이스(예: SQL, CosmosDB, MongoDB) 및 기타 여러 데이터 소스에서 로드할 수 있습니다.
IDataView trainingData = mlContext.Data
.LoadFromEnumerable<SentimentInput>(inMemoryCollection);
데이터 변환
대부분의 경우 사용 가능한 데이터는 기계 학습 모델을 훈련하는 데 직접 사용하기에 적합하지 않습니다. 원시 데이터는 데이터 변환을 사용하여 사전 처리되어야 합니다.
변환기는 데이터를 가져와서 일부 작업을 수행하고 변환된 새 데이터를 반환합니다.
결측값 대체, 데이터 변환, 텍스트 기능화 등을 위한 기본 제공 데이터 변환 세트가 있습니다.
// Convert sentiment text into numeric features
IEstimator<ITransformer> dataTransformPipeline = mlContext.Transforms.Text
.FeaturizeText("Features", "SentimentText");
알고리즘 선택
기계 학습 및 ML.NET을 사용하는 경우 시나리오와 함께 작동하는 기계 학습 작업을 선택해야 합니다. ML.NET은 다양한 ML 작업을 위한 30개 이상의 알고리즘(또는 트레이너)를 제공합니다.
기계 학습 작업 | 알고리즘 |
---|---|
이진 분류(예: 감정 분석) | AveragedPerceptronTrainer, SdcaLogisticRegressionBinaryTrainer |
다중 클래스 분류(예: 주제 분류) | LightGbmMulticlassTrainer, OneVersusAllTrainer |
회귀(예: 가격 예측) | LbfgsPoissonRegressionTrainer, FastTreeRegressionTrainer |
클러스터링(예: 고객 세분화) | KMeansTrainer |
이상 감지(예: 샴푸 판매 급증 감지) | RandomizedPcaTrainer |
권장 사항(예: 영화 추천) | MatrixFactorizationTrainer |
순위(예: 검색 결과) | LightGbmRankingTrainer, FastTreeRankingTrainer |
IEstimator<ITransformer> trainer = mlContext.BinaryClassification.Trainers
.AveragedPerceptron(labelColumnName: "Sentiment", featureColumnName: "Features"));
IEstimator<ITransformer> trainingPipeline = dataTransformPipeline.Append(trainer);
모델 학습
지정한 데이터 변환 및 알고리즘은 Fit()
메서드를 호출할 때까지 실행되지 않습니다(ML.NET의 지연 로드 방식 때문에). 바로 이 순간에 모델 학습이 이루어집니다.
예측 도구는 데이터를 가져와 데이터에서 학습하고 변환기를 만듭니다. 모델 훈련의 경우 훈련 데이터는 입력이고 훈련된 모델은 출력입니다. 따라서 훈련된 모델은 새로운 데이터의 입력 기능을 출력 예측으로 바꾸는 변환기입니다.
ITransformer model = pipeline.Fit(trainingData);
평가 모델
ML.NET은 다양한 메트릭에서 모델의 성능을 평가하는 평가기를 제공합니다.
- 정확성
- 곡선 아래 면적(AUC)
- R 제곱
- 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);
배포 및 소비 모델
학습된 모델을 .NET 애플리케이션에 통합된 이진 파일로 저장할 수 있습니다.
mlContext.Model.Save(model, trainingData, "model.zip");
학습된 모델을 저장한 후에는 다른 .NET 애플리케이션에서 모델을 로드할 수 있습니다.
MLContext mlContext = new MLContext();
DataViewSchema predictionPipelineSchema;
ITransformer trainedModel = mlContext.Model.Load("model.zip", out predictionPipelineSchema);
그런 다음, 로드된 모델을 사용하여 예측을 시작할 수 있습니다. 예측 엔진을 사용할 수 있습니다. 이는 단일 예측을 만드는 데 사용되는 편리한 API이거나 일괄 처리 예측을 만드는 데 사용되는 변환 메서드입니다.
var predEngine = mlContext.Model.CreatePredictionEngine(model);
SentimentInput sampleComment = new SentimentInput{ SentimentText = "This is very rude!" };
SentimentOutput result = predEngine.Predict(sampleComment);
Console.WriteLine(result.Prediction);
ML.NET FAQ
ML.NET은 무엇에 사용되나요?
ML.NET은 .NET 개발자를 위한 기계 학습 프레임워크입니다. ML.NET을 사용하여 사용자 지정 기계 학습 모델을 .NET 애플리케이션에 통합할 수 있습니다. 감정 분석, 가격 예측, 제품 추천, 판매 예측, 이미지 분류, 객체 감지 등과 같은 다양한 시나리오에 ML.NET을 사용할 수 있습니다! ML.NET으로 수행할 수 있는 작업에 대한 추가 예제는 GitHub 샘플 리포지토리를 확인하세요.
AI와 기계 학습의 차이점은 무엇인가요?
AI는 일반적으로 인간 지능이 필요한 작업을 수행하도록 컴퓨터를 훈련시키는 컴퓨팅의 한 분야입니다. 기계 학습은 컴퓨터가 데이터에서 학습하고 데이터에서 패턴을 찾은 다음 스스로 새로운 데이터에 대한 예측을 할 수 있도록 하는 AI의 하위 집합입니다.
ML.NET이 필요한 이유는 무엇이며 ML.NET은 Microsoft의 다른 AI/ML 제품과 어떻게 다른가요?
Microsoft는 많은 AI와 ML 제품 및 서비스를 제공하므로 제품과 서비스 간의 차이점을 분석한 결과입니다.
- ML.NET: 사용자 지정 기계 학습 솔루션을 빌드하고 .NET 애플리케이션에 통합합니다.
- Azure Cognitive Services: 애플리케이션에 추가할 사전 빌드된 AI 및 기계 학습 모델을 제공하는 클라우드 서비스입니다. 시각 및 언어를 통한 자연스러운 의사소통 방법을 위한 다양한 모델을 사용하기 위한 API 세트가 포함되어 있습니다.
- Azure Machine Learning: 클라우드 규모에서 모델 학습, 버전 관리, 배포 및 릴리스 관리를 포함하여 엔드투엔드 ML 모델 수명 주기를 호스트하는 클라우드의 포괄적 환경입니다.
ML.NET 모델을 배포할 수 있는 앱 유형은 무엇인가요?
웹앱 및 서비스, 마이크로 서비스/컨테이너, 데스크톱 앱(WPF 및 WinForms), Azure Functions 및 모든 Azure 서버 쪽 앱 유형 및 콘솔 앱을 비롯한 거의 모든 .NET 앱에서 ML.NET을 사용할 수 있습니다.
ML.NET과 함께 사용할 수 있는 프레임워크는 무엇인가요?
ML.NET은 .NET, .NET Core(버전 2.0 이상) 및 .NET Framework(버전 4.6.1 이상)에서 모두 지원됩니다.
ML.NET은 어떤 프로세스 아키텍처를 지원합니까?
ML.NET은 현재 x64 및 x86 프로세스에서 지원됩니다.
ML.NET과 함께 사용할 수 있는 OS는 무엇인가요?
ML.NET은 플랫폼 간이므로 Windows, Linux 및 macOS에서 지원됩니다.
ML.NET은 무료인가요?
예! 나머지 .NET 플랫폼과 마찬가지로 ML.NET은 100% 무료입니다. 자세한 내용은 .NET은 무료입니다를 참조하세요. ML.NET은 MIT 라이선스에 따라 라이선스가 부여됩니다.
ML.NET에 가장 적합한 프로그래밍 언어는 무엇입니까?
ML.NET 현재 C# 및 F# 모두에 대해 지원됩니다.
ML.NET은 어떻게 배울 수 있나요?
이 자습서를 통해 ML.NET을 시작하거나 ML.NET 문서에서 자세히 알아보세요.
ML.NET을 설치하려면 어떻게 해야 하나요?
Microsoft.ML NuGet 패키지를 추가하여 모든 .NET 프로젝트에 ML.NET를 추가하거나 ML.NET Model Builder(Windows) 또는 ML.NET CLI(Windows, macOS 및 Linux)를 시작할 수 있습니다.
시작할 준비가 되셨나요?
단계별 자습서는 컴퓨터에서 ML.NET을(를) 실행하는 데 도움이 될 것입니다.