dotnet / dotnet/machinelearning-samples

Database Loader Error using ml.net

オープン
#955 コメント 0 件 リアクション 0 件 担当者 0 名 GitHub で見る
主要言語
PowerShell
スター
4.7k
フォーク
2.7k
平均マージ
2日 22時間
マージ済み PR(30日)
1

説明

I have a working ml.net application pulling data from a text file. I would like to pull the same data from MSSQL. However, I am getting an Invalid cast exception when attempting to run Fit.

System.InvalidCastException: 'Unable to cast object of type 'System.Byte' to type 'System.Single'.'

WORKING CODE:
```C#
ITransformer TrainFromTextFile(MLContext mlContext, string dataPath)
{

// Load the csv formatted data...
IDataView dataView = mlContext.Data.LoadFromTextFile(dataPath, hasHeader: true, separatorChar: ',');

var pipeline = mlContext.Transforms.CopyColumns(outputColumnName: "Label", inputColumnName: "OSE")
.Append(mlContext.Transforms.Categorical.OneHotEncoding(outputColumnName: "ShiftEncoded", inputColumnName: "Shift"))
.Append(mlContext.Transforms.Categorical.OneHotEncoding(outputColumnName: "ProductEncoded", inputColumnName: "Product"))
.Append(mlContext.Transforms.Categorical.OneHotEncoding(outputColumnName: "TemperatureEncoded", inputColumnName: "Temperature"))
.Append(mlContext.Transforms.Concatenate("Features", "ShiftEncoded", "TemperatureEncoded", "ProductEncoded", "PPM"))
.Append(mlContext.Regression.Trainers.FastTree());

var model = pipeline.Fit(dataView);
return model;
}
```

Code producing error when running .Fit

```C#
ITransformer TrainFromDatabase(MLContext mlContext) {

string connectionString = "Data Source=LARRY-PC\\SQLEXPRESS;Initial Catalog=LUL_OEE_TestData;Integrated Security=True;Pooling=False";
string sqlCommand = "SELECT Current_Shift, Product, JDE, Temperature, PPM, OSE FROM LUL_OSE_Train_Data";
DatabaseLoader loader = mlContext.Data.CreateDatabaseLoader();
DatabaseSource dbSource = new DatabaseSource(SqlClientFactory.Instance, connectionString, sqlCommand);
IDataView dataView = loader.Load(dbSource);

var pipeline = mlContext.Transforms.CopyColumns(outputColumnName: "Label", inputColumnName: "OSE")
.Append(mlContext.Transforms.Categorical.OneHotEncoding(outputColumnName: "ShiftEncoded", inputColumnName: "Shift"))
.Append(mlContext.Transforms.Categorical.OneHotEncoding(outputColumnName: "ProductEncoded", inputColumnName: "Product"))
.Append(mlContext.Transforms.Categorical.OneHotEncoding(outputColumnName: "TemperatureEncoded", inputColumnName: "Temperature"))
.Append(mlContext.Transforms.Concatenate("Features", "ShiftEncoded", "TemperatureEncoded", "ProductEncoded", "PPM"))
.Append(mlContext.Regression.Trainers.FastTree());

var model = pipeline.Fit(dataView);
return model;
```

There is no issue pulling data from SQL. I'm using the same connection string and query to populate a DataGridView with no problems. The csv file is formatted just like the table.

Thanks for any help!

コントリビューションガイド

コントリビューションガイドを開く

調査の方向性

TrainFromDatabase から始めて、DatabaseLoader が使用する OSEParams モデルを SELECT 列およびテキストファイルのスキーマと比較します。pipeline.Fit での失敗を再現し、その後、データベースを基盤とする IDataView の列型に互換性があり、Fit が正常に完了することを確認します。

索引モデルが issue の本文から書いたものです。

評価

技術スタック
csharp, machine-learning, sql
領域
databases, machine-learning
issue の種類
バグ
難易度
3/5
見積もり時間
1〜2日
活発さ
停滞
明瞭さ
おおむね明確
初心者へのやさしさ
35/100

新しい issue をメールで受け取る

初心者向けの GitHub issue を短くまとめたダイジェスト。