기계 학습 애플리케이션은
명시적으로 프로그래밍하지 않아도 데이터의 패턴을 사용하여 예측합니다.
ML.NET를 사용하면 알고리즘을 지정하여 사용자 지정 모델을 학습하거나
미리 학습된 TensorFlow 및 ONNX 모델을 가져올 수 있습니다.
모델이 있는 경우, 애플리케이션에 이를 추가하여 예측할 수 있습니다.
64비트는 모든 플랫폼에서 지원됩니다.
32비트는 TensorFlow, LightGBM 및 ONNX 관련 기능을 제외하고
Windows에서 지원됩니다.
ML.NET을 사용하여 수행할 수 있는 예측 유형은 다음과 같습니다.
| 분류/범주화 | 고객 피드백을 긍정과 부정 범주로 자동 구분 |
| 재발/연속 값 예측 | 크기 및 위치에 따라 주택 가격 예측 |
| 변칙 검색 | 사기성 은행 거래 검색 |
| 권장 사항 | 이전 구매 내역에 기반하여 온라인 구매자가 구매하려는 제품 제안 |
| 시계열/순차 데이터 | 날씨/제품 판매 예측 |
| 이미지 분류 | 의료 이미지에서 병리학 분류 |
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
using System;
using Microsoft.ML;
using Microsoft.ML.Data;
class Program
{
public class HouseData
{
public float Size { get; set; }
public float Price { get; set; }
}
public class Prediction
{
[ColumnName("Score")]
public float Price { get; set; }
}
static void Main(string[] args)
{
MLContext mlContext = new MLContext();
// 1. Import or create training data
HouseData[] houseData = {
new HouseData() { Size = 1.1F, Price = 1.2F },
new HouseData() { Size = 1.9F, Price = 2.3F },
new HouseData() { Size = 2.8F, Price = 3.0F },
new HouseData() { Size = 3.4F, Price = 3.7F } };
IDataView trainingData = mlContext.Data.LoadFromEnumerable(houseData);
// 2. Specify data preparation and model training pipeline
var pipeline = mlContext.Transforms.Concatenate("Features", new[] { "Size" })
.Append(mlContext.Regression.Trainers.Sdca(labelColumnName: "Price", maximumNumberOfIterations: 100));
// 3. Train model
var model = pipeline.Fit(trainingData);
// 4. Make a prediction
var size = new HouseData() { Size = 2.5F };
var price = mlContext.Model.CreatePredictionEngine<HouseData, Prediction>(model).Predict(size);
Console.WriteLine($"Predicted price for size: {size.Size*1000} sq ft= {price.Price*100:C}k");
// Predicted price for size: 2500 sq ft= $261.98k
}
}
1
2
3
4
5
6
7
- 모델은 $Price = b+Size∗w$입니다.
매개 변수 b 및 w는 쌍 세트(크기, 가격)에 줄을 맞춰 추정됩니다.
모델의 매개 변수를 찾는 데 사용되는 데이터를 학습 데이터 라고 합니다.
이 기계 학습 모델의 입력을 특성(feature) 이라고 합니다.
- 이 예제에서는 Size가 유일한 특성입니다.
- 기계 학습 모델을 학습하는 데 사용하는 실측 자료(ground-truth) 값은 레이블 이라고 합니다.
여기에서는 학습 데이터 세트의 Price 값이 레이블입니다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
HouseData[] testHouseData =
{
new HouseData() { Size = 1.1F, Price = 0.98F },
new HouseData() { Size = 1.9F, Price = 2.1F },
new HouseData() { Size = 2.8F, Price = 2.9F },
new HouseData() { Size = 3.4F, Price = 3.6F }
};
var testHouseDataView = mlContext.Data.LoadFromEnumerable(testHouseData);
var testPriceDataView = model.Transform(testHouseDataView);
var metrics = mlContext.Regression.Evaluate(testPriceDataView, labelColumnName: "Price");
Console.WriteLine($"R^2: {metrics.RSquared:0.##}");
Console.WriteLine($"RMS error: {metrics.RootMeanSquaredError:0.##}");
// R^2: 0.96
// RMS error: 0.19
| 데이터 로드 및 저장 | DataOperationsCatalog | ||
| 데이터 준비 | TransformsCatalog | ||
| 학습 알고리즘 | 이진 분류 | BinaryClassificationCatalog | |
| 다중 클래스 분류 | MulticlassClassificationCatalog | ||
| 변칙 검색 | AnomalyDetectionCatalog | ||
| 클러스터링 | ClusteringCatalog | ||
| 예측 | ForecastingCatalog | ||
| 순위 지정 | RankingCatalog | ||
| 재발 | RegressionCatalog | ||
| 권장 | RecommendationCatalog | Microsoft.ML.Recommender NuGet 패키지 추가 | |
| TimeSeries | TimeSeriesCatalog | Microsoft.ML.TimeSeries NuGet 패키지 추가 | |
| 모델 사용 | ModelOperationsCatalog |
1
2
3
4
var pipeline = mlContext
.Transforms.Concatenate("Features", new[] { "Size" })
.Append(mlContext.Regression.Trainers
.Sdca(labelColumnName: "Price", maximumNumberOfIterations: 100));
1
var model = pipeline.Fit(trainingData);
모델 학습 방법에서 모델 학습에 대해 자세히 알아볼 수 있습니다.
1
IDataView predictions = model.Transform(inputData);
1
2
3
var size = new HouseData() { Size = 2.5F };
var predEngine = mlContext.CreatePredictionEngine<HouseData, Prediction>(model);
var price = predEngine.Predict(size);
1
var pipeline = mlContext.Transforms.Concatenate("Features", new[] { "Size" })
1
2
3
4
5
public class Prediction
{
[ColumnName("Score")]
public float Price { get; set; }
}
1
var debug = testPriceDataView.Preview();