-
ML.NET MSSQL 연동 [5]AI/ML.NET 2020. 12. 1. 18:04728x90
ML.NET 을 건드린지 1주가 지났는데 아직 자동화 밖에 쓰질 못하겠다.
그래서 자동화로 생성된 코드들을 보기로 했다.
시나리오를 선택하고 환경 선택하고 데이터를 선택하고 학습을 하면
가장 정확도가 높은 알고리즘을 찾아준다.
학습시간이 길 수록 정확도가 높아지지만 적은 데이터를 무작정 길게 학습한다고해서 더욱더 좋아지지는 않는다.
LightGbmRegression이 제일 높은 정확도를 가진것으로 결과가 나왔다.
이 상태로 코드에서 프로젝트추가를 하면
이렇게 코드가 추가되고 샘프로 코드가 주어진다.
그럼 생성된 프로젝트로 들어가보자.
ConsoleApp에 들어가보면 ModelBuilder 클래스가 있다.
여기에서 학습시킨 후에 선택된 알고리즘 LightGbmRegression를 사용해서 모델을 생성하는 코드들을 확인 할 수 있다.
알고리즘에 대한 옵션도 들어가 있고 생성된 모델의 저장위치도 지정된다.
알고리즘이 바뀌도록 데이터를 바꿔가면서 해봤는데 생성되는 코드가 확실하게 다르다.
public static void CreateModel() { // 데이터를 읽어서 IDataView trainingDataView = mlContext.Data.LoadFromTextFile<ModelInput>( path: TRAIN_DATA_FILEPATH, hasHeader: true, separatorChar: '\t', allowQuoting: true, allowSparse: false); // 학습 pipeline 을 만들고 IEstimator<ITransformer> trainingPipeline = BuildTrainingPipeline(mlContext); // 모델을 학습시키고 ITransformer mlModel = TrainModel(mlContext, trainingDataView, trainingPipeline); // Evaluate quality of Model Evaluate(mlContext, trainingDataView, trainingPipeline); // 모델을 저장한다. SaveModel(mlContext, mlModel, MODEL_FILEPATH, trainingDataView.Schema); } //pipeline을 만드는데 여기에서 알고리즘을 선택한다. public static IEstimator<ITransformer> BuildTrainingPipeline(MLContext mlContext) { // Data process configuration with pipeline data transformations var dataProcessPipeline = mlContext.Transforms.Concatenate("Features", new[] { "A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M" }); // Set the training algorithm //LightGbmRegression이 선택되어있는걸 볼 수 있다. var trainer = mlContext.Regression.Trainers.LightGbm(new LightGbmRegressionTrainer.Options() { NumberOfIterations = 100, LearningRate = 0.05942692f, NumberOfLeaves = 70, MinimumExampleCountPerLeaf = 20, UseCategoricalSplit = false, HandleMissingValue = true, UseZeroAsMissingValue = true, MinimumExampleCountPerGroup = 50, MaximumCategoricalSplitPointCount = 16, CategoricalSmoothing = 1, L2CategoricalRegularization = 10, Booster = new GradientBooster.Options() { L2Regularization = 0.5, L1Regularization = 0 }, LabelColumnName = "도막두께", FeatureColumnName = "Features" }); var trainingPipeline = dataProcessPipeline.Append(trainer); return trainingPipeline; }
여기에서 데이터를 불러와서 모델을 만들고 학습시키는 과정을 거치고
Model 프로젝트로 들어가면 ConsumeMedel 클래스에서 생성된 모델에 값을 입력하고 예측값을 리턴받는다.
public class ConsumeModel { private static Lazy<PredictionEngine<ModelInput, ModelOutput>> PredictionEngine = new Lazy<PredictionEngine<ModelInput, ModelOutput>>(CreatePredictionEngine); // For more info on consuming ML.NET models, visit https://aka.ms/mlnet-consume // Method for consuming model in your app public static ModelOutput Predict(ModelInput input) { ModelOutput result = PredictionEngine.Value.Predict(input); return result; } public static PredictionEngine<ModelInput, ModelOutput> CreatePredictionEngine() { // Create new MLContext MLContext mlContext = new MLContext(); // Load model & create prediction engine string modelPath = @"C:\Users\AppData\Local\Temp\MLVSTools\ML.test1ML\ML.test1ML.Model\MLModel.zip"; ITransformer mlModel = mlContext.Model.Load(modelPath, out var modelInputSchema); var predEngine = mlContext.Model.CreatePredictionEngine<ModelInput, ModelOutput>(mlModel); return predEngine; } }
위 두개의 클래스를 이용하면 DB에서 바로 데이터를 가져와서 알고리즘도 입맛대로 골라서 학습시키고 예측값을 가져올 수 있다.
아래 포스트에서 연동해서 생각하도록 하자.
728x90반응형'AI > ML.NET' 카테고리의 다른 글
ML.NET MSSQL 연동 [4] (0) 2020.11.24 ML.NET MSSQL 연동 [3] (0) 2020.11.23 ML .NET MSSQL 연동 [2] (0) 2020.11.23 ML.NET 사용 선형회귀분석 [1] (0) 2020.11.20