見出し画像

ML.netをVB.netで使う話、クラスライブラリーの基本編・その3

VB.netからクラスライブラリーを利用して、C#で書かれたソースコードを呼び出せました。
次は、C#側に機械学習のソースコードを書きます。

NuGetのパッケージをソリューションにインストールします。
Microsft.MLをVB.netとC#のプロジェクトにインストールしますが、詳細は省略します。

無事にインストールが完了したら、あとはサンプルソースをコピペします。
正確な表現なのかは不明ですが、私の解釈したコメントも記載します

#学習 #勉強 #AI #機械学習 #プログラミング

#Visual系 #Visual #CSharp #BASIC #使える #ソースコード #Windows #システム #Windowsシステム #工場 #サンプル #実務 #生産ライン #生産
#機械学習 #自動判定 #使い勝手 #お役立てください

#数列 #予測 #次の値


using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using Microsoft.ML;
using Microsoft.ML.Data;

namespace ClassLibrary1
{

//学習用のデータを保存するクラス
public class HouseData
{
public float Size { get; set; }
public float Price { get; set; }
}

//予測データを格納するクラス
public class Prediction
{
[ColumnName("Score")]
public float Price { get; set; }
}


//自動生成されたクラス
public class Class1
{

//VB.netから呼び出される
public void abc()
{
//機械学習のクラスMLContextを利用する
MLContext mlContext = new MLContext();

//1-1.学習データの生成
//Fを付けるのは、float型で入力するため
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 } };

//1-2.学習データの作成、専用の配列にする
IDataView trainingData = mlContext.Data.LoadFromEnumerable(houseData);

//2.トレーニング用データ領域(?)の準備とトレーニングパイプラインの指定
//2行に別れた表記ですが、内容は1行になっています
//出力するカラム名と入力するカラム名の指定
var pipeline = mlContext.Transforms.Concatenate("Features", new[] { "Size" })

//基準となるカラム名の指定、領域最大数100
.Append(mlContext.Regression.Trainers.Sdca(labelColumnName: "Price", maximumNumberOfIterations:100));


//3-1.トレーニングパイプラインに対し、トレーニングデータを使って学習させる
var model = pipeline.Fit(trainingData);

//4.トレーニング結果で予測する数値を計算させる
//4-1.予測したい数字の準備
var size = new HouseData() { Size = 2.5F };

//4-2.予測値の計算
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 }

}
}

}


この記事が気に入ったらサポートをしてみませんか?