【发布时间】:2020-07-02 07:47:13
【问题描述】:
我最近对 C# 中的机器学习产生了兴趣。我从 Microsoft 网站下载了示例代码,我想对其进行测试。
代码:
using System;
using Microsoft.ML;
using Microsoft.ML.Data;
class Program
{
public class HouseData
{
public float Size { get; set; }
public float Price { get; set; }
}
public class Prediction
{
[ColumnName("Score")]
public float Price { get; set; }
}
static void Main(string[] args)
{
MLContext mlContext = new MLContext();
// 1. Import or create training data
HouseData[] houseData = {
new HouseData() { Size = 100, Price = 10 },
new HouseData() { Size = 200, Price = 20 },
new HouseData() { Size = 300, Price = 30 },
new HouseData() { Size = 400, Price = 40 },
new HouseData() { Size = 500, Price = 50 },
new HouseData() { Size = 600, Price = 60 },
new HouseData() { Size = 700, Price = 70 },
new HouseData() { Size = 800, Price = 80 } };
IDataView trainingData = mlContext.Data.LoadFromEnumerable(houseData);
// 2. Specify data preparation and model training pipeline
var pipeline = mlContext.Transforms.Concatenate("Features", new[] { "Size" })
.Append(mlContext.Regression.Trainers.Sdca(labelColumnName: "Price",
maximumNumberOfIterations: 100));
// 3. Train model
var model = pipeline.Fit(trainingData);
// 4. Make a prediction
var size = new HouseData() { Size = 400 };
var price = mlContext.Model.CreatePredictionEngine<HouseData, Prediction>(model).Predict(size);
Console.WriteLine($"Predicted price for size: {size.Size} is {price.Price}");
}
}
我修改训练数据(添加更多记录)并尝试在大小为 400 时检查价格值。程序返回奇怪的值,例如:
First run: -5,815702
Second run: 30,172789
Third run: 24,27233
在我看来,程序应该返回数字40是合乎逻辑的。我怎么会犯结果完全不同的错误?
【问题讨论】:
-
如果您需要确定性输出,请尝试设置
seed:new MLContext(seed: 0) -
请阅读ml标签的描述。
标签: c# machine-learning ml.net