ML.netをVB.netで使う話、クラスライブラリーの基本編・その3
VB.netからクラスライブラリーを利用して、C#で書かれたソースコードを呼び出せました。
次は、C#側に機械学習のソースコードを書きます。
NuGetのパッケージをソリューションにインストールします。
Microsft.MLをVB.netとC#のプロジェクトにインストールしますが、詳細は省略します。
無事にインストールが完了したら、あとはサンプルソースをコピペします。
正確な表現なのかは不明ですが、私の解釈したコメントも記載します
#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 }
}
}
}