見出し画像

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

久しぶりにC#のコードを書いたので、四苦八苦しています。
サンプルソースを元にして、VB.net側から機械計算の処理に必要な3種類のデータを受け渡ししています。

この方法を基礎にして発展させれば、VB.netのプログラムでもC#で作ったクラスライブラリーの機械学習処理が使えます。
C#のクラスライブラリー側のソースコードですが、とりあえず動くレベルです。

このコード、以下のWebアドレスに掲載されているものを基本にしています。
https://docs.microsoft.com/ja-jp/dotnet/machine-learning/

印刷して学びたい場合もPDFファイルがあるので参考になります。
https://docs.microsoft.com/ja-jp/dotnet/opbuildpdf/machine-learning/toc.pdf?branch=live


#学習 #勉強 #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
{

public Boolean SampleMachineLearning(float ValueToCalculate, List<float[]> DataForLearning, ref float PredictedValue)
{
//値の初期化
PredictedValue = 0;

//機械学習のクラスMLContextを利用する
MLContext mlContext = new MLContext();

//1.学習データの生成

//1-1.空の構造体で一旦作る
HouseData[] houseData = { };

//1-2.配列をリサイズしながらデータを追加し、機械学習用のデータを作る
for (int i = 0; i < DataForLearning.Count; i++)
{
Array.Resize(ref houseData, i + 1);
houseData[i] = new HouseData() { Size = DataForLearning[i][0], Price = DataForLearning[i][1] };
}

//1-3.学習データの作成、専用の配列にする
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 = ValueToCalculate };

//4-2.予測値の計算
var price = mlContext.Model.CreatePredictionEngine<HouseData, Prediction>(model).Predict(size);

//5.予測値をVB.netに戻す
PredictedValue = price.Price;

return true;
}
}

}


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