見出し画像

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

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

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

#数列 #予測 #次の値

VB.netとC#のクラスライブラリーでデータの受け渡しが必要になりました。
やったことが無い人だとプログラム言語の壁が大きいのかなと思うでしょうけど、VB.netもC#も似たような部分があるので楽です。

C#へVB.netから文字列と数値を受け渡します。
クラスライブラリー側の関数宣言はこんな感じです。

public void SampleMachineLearning(String CharacterStringToPassed,Int64 NumbersToPassed)


これをVB側から文字列と数値を指定して呼び出すコードはこんな感じです。

Dim ClassLibraryObject As Object = New ClassLibrary1.Class1
ClassLibraryObject.SampleMachineLearning("abc", 1)

これだけのコードで、VB.netからC#のクラスライブラリーへと文字列と数値が受け渡しできます。
コードの他に特別な何かを設定する必要はありません。

それでは、C#のクラスライブラリーからVB.netへの戻り値のコードも書きます。
簡単なVB.netから書いていきます。


Dim ClassLibraryObject As Object = New ClassLibrary1.Class1
Dim BooleanReturn As Boolean = ClassLibraryObject.SampleMachineLearning("abc", 1)

C#のクラスライブラリー、長いソースコードですが、関数宣言と関数の終了時の2か所を直しているだけです。

public Boolean SampleMachineLearning(String CharacterStringToPassed,Int64 NumbersToPassed)
{
//機械学習のクラス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 }

return true;
}


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