dotnet / dotnet/machinelearning-samples
Database Loader Error using ml.net
- Dominant language
- PowerShell
- Stars
- 4.7k
- Forks
- 2.7k
- Avg merge
- 2d 22h
- Merged PRs (30d)
- 1
Description
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!
Contributor guide
Assessment
This issue has not been assessed yet.