Quantcast
Channel: かずきのBlog@hatena
Viewing all articles
Browse latest Browse all 1387

Hello ML.NET world

$
0
0

.NET Core 3.1 もリリースされたし ML.NET でも少し触ってみようと思います。今はカフェで Surface Go しか持ってないので先日作って寝かせておいた VIsual Studio Online につないでやってみようと思います。

.NET Core 3.1

このページに従ってコマンドをうってたらインストールできます。

docs.microsoft.com

dotnet --list-sdksして入ってることを確認しましょう。

vsonline:~/workspace/HelloMLNET$ dotnet --list-sdks
2.1.802 [/usr/share/dotnet/sdk]
3.0.100 [/usr/share/dotnet/sdk]
3.1.100 [/usr/share/dotnet/sdk]

プロジェクトを作ってためしてみる

とりあえず以下のページの通りにやっていきます。まず写経。

docs.microsoft.com

dotnet new console -o HelloMLNETとうってコンソールアプリのプロジェクトを作って、そのフォルダーを VS Code で開きます。

dotnet add package Microsoft.MLで ML.NET のパッケージを追加して写経モードに入ります。

using System;
using Microsoft.ML;
using Microsoft.ML.Data;

namespace HelloMLNET
{
    class HouseData
    {
        publicfloat Size { get; set; }
        publicfloat Price { get; set; }
    }

    class Prediction
    {
        [ColumnName("Score")]
        publicfloat Price { get; set; }
    }

    class Program
    {
        staticvoid Main(string[] args)
        {
            var mlContext = new MLContext();

            var houseData = new[]
            {
                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 },
            };

            var trainingData = mlContext.Data.LoadFromEnumerable(houseData);

            var pipeline = mlContext.Transforms.Concatenate("Features", new[] { nameof(HouseData.Size) })
                .Append(mlContext.Regression.Trainers.Sdca(
                    labelColumnName: nameof(HouseData.Price), 
                    maximumNumberOfIterations:100));

            var model = pipeline.Fit(trainingData);

            var size= new HouseData { Size = 2.5f };
            var price = mlContext.Model.CreatePredictionEngine<HouseData, Prediction>(model).Predict(size);

            Console.WriteLine(price.Price);

        }
    }
}

これを実行すると

2.7478235

と表示されました。参考にしたサイトの結果と数字が違うのは何か間違えたのか、それとも ML.NET のバージョンが変わって何か微妙に変わったのかよくわからないけど、元ネタのデータ(今回の場合 houseData)を作って、トレーニングして実際に Predict メソッドで結果出してる感じですね。

モデルのテストとかはしてないので、本番はもうちょいコードは長くなると思いますが、何となくこんな感じでいけるんだなぁという感じ。

ML.NET のルール

ルールというか使い方なのですが、ML.NET は MLContext クラスにすべてが詰まってる感じです。

例えば

var mlContext = new MLContext();


mlContext.Data // データの読み書き関係の処理が詰まってる
mlContext.Transforms // データの変換系が詰まってる
mlContext.Regression // 回帰分析系かな?
mlContext.BinaryClassification // 2項文累計かな?

みたいな感じです。

とりあえず動いたので引き続き触っていってみよう。


Viewing all articles
Browse latest Browse all 1387

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>