より良いエンジニアを目指して

1日1つ。良くなる!上手くなる!

ML.NET 0.6という大変動に飛び込んでは見たが、難破して打ち上げられてしまった

ML.NETが0.6にバージョンアップしました。

これにより、大幅にAPIが見直され、これまでのはLegacy名前空間に移行されてしまうという大変動ぶりには驚かされました。

blogs.msdn.microsoft.com

そして、自分の書いていたソースはすでにレガシーとなったことにがっくし。

using Microsoft.ML.Legacy;
using Microsoft.ML.Legacy.Models;
using Microsoft.ML.Legacy.Data;
using Microsoft.ML.Legacy.Transforms;
using Microsoft.ML.Legacy.Trainers;

日本語ドキュメントはまだ古いままですね。

ML.NET を使用してアヤメの花をクラスター化する (クラスタリング) | Microsoft Docs

気を取り直して、0.6の説明を見てみることにしました。

短いサンプルは下記でも紹介されています。

Let's 10分 機械学習

ML.NET Tutorial | Get started in 10 minutes

DataKind

以前はモデルとなるクラスを用意して、列ごとにプロパティを用意して、アトリビュートでカラム番号を宣言していました。

確かにこれはまだるっこしいですね。

が、読み込むとき、下記のようにDataKindを割り当てます。R4とは何のことやら?

new TextLoader.Column("SepalLength", DataKind.R4, 0),

が、何を選べばいいのか?

DataKind Enum (Microsoft.ML.Runtime.Data) | Microsoft Docs

説明なし...

Estimator

レーニングを行うにあたっても、

var pipeline = new TermEstimator(env, "Label", "Label")
                   .Append(new ConcatEstimator(env, "Features", "SepalLength", "SepalWidth", "PetalLength", "PetalWidth"))
                   .Append(new SdcaMultiClassTrainer(env, new SdcaMultiClassTrainer.Arguments()))
                   .Append(new KeyToValueEstimator(env, "PredictedLabel"));

TermEstimatorとは何なのか?

今回は数値から文字列でしたが、数値から数値にする場合はどうすればいいいのか。不明。

TermEstimatorのインテリセンスにはコメントなし。

最後に

全くためになる情報を提供できず申し訳ありません。

ASP.NET Coreという変革にチャレンジして、うまくいかなかったのを思い出します。

まだまだ、これからかなという気がしています。

それでもC#機械学習ができるということに期待はしています。