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
#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;
}
}
}