ML.NET とは何ですか?
ML.NET は、Microsoft によって作成された、.NET 開発者プラットフォーム用の、無料のオープンソースおよびクロスプラットフォーム機械学習フレームワークです。
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);
データの変換
ほとんどの場合、利用可能なデータは、機械学習モデルのトレーニングに直接使用するのには適していません。 生データは、データ変換を使用して前処理する必要があります。
Transformers は、データを受け取り、そこで何らかの作業を行い、新しく変換されたデータを返します。
欠損値の置き換え、データ変換、テキストの搭載などのデータ変換セットが埋め込まれています。
// Convert sentiment text into numeric features
IEstimator<ITransformer> dataTransformPipeline = mlContext.Transforms.Text
.FeaturizeText("Features", "SentimentText");
アルゴリズムの選択
機械学習 と ML.NET を使用するときは、シナリオに合う機械学習タスクを選択する必要があります。ML.NET は、さまざまな ML タスクに対して 30 を超えるアルゴリズム (または トレーナー) を提供します:
ML タスク | アルゴリズム |
---|---|
二項分類 (感情分析など) | 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)
- 決定係数
- 二乗平均平方根誤差 (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 である予測エンジン、またはバッチ予測の作成に使用される Transform メソッドのいずれかを使用できます。
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 モデルに展開できますか?
Web アプリとサービス、マイクロサービス/コンテナー、デスクトップ アプリ (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 プロセスでサポートされています。
どの OS を ML.NET で使用できますか?
ML.NET はクロス プラットフォームであるため、Windows、Linux、macOS でサポートされています。
ML.NET は無料ですか?
はい!他の .NET プラットフォームと同様に、ML.NET は 100% 無料です。詳細については、「.NET は無料を参照してください。ML.NET は、MIT ライセンスでライセンスされています。
ML.NET に最適なプログラミング言語は何ですか?
ML.NET は現在、C# と F# をサポートしています。
どうすれば ML.NET を学べますか?
このチュートリアルで開始できます。またh、 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 を実行するのに役立ちます。