修改Program.cs内容
using Microsoft.ML;
using Microsoft.ML.Data;
using Microsoft.ML.Legacy;
using Microsoft.ML.Trainers;
using Microsoft.ML.Transforms;
using Microsoft.ML.Runtime.Api;
using Microsoft.ML.Legacy.Data;
using Microsoft.ML.Legacy.Trainers;
using Microsoft.ML.Legacy.Transforms;
using System;
using System.Threading;
namespace myApp
{
class Program
{
// 步骤 1: 定义数据结构
// IrisData 用于提供训练数据, 以及用于预测操作的输入。
// -前4属性是用于预测标签的输入/特征
// -标签是你所预测的, 只有在训练时才设定
public class IrisData
{
[Column("0")]
public float SepalLength;
[Column("1")]
public float SepalWidth;
[Column("2")]
public float PetalLength;
[Column("3")]
public float PetalWidth;
[Column("4")]
[ColumnName("Label")]
public string Label;
}
// IrisPrediction 是预测操作返回的结果
public class IrisPrediction
{
[ColumnName("PredictedLabel")]
public string PredictedLabels;
}
static void Main(string[] args)
{
// STEP 2: 创建类并加载数据
var pipeline = new LearningPipeline();
// 注意文件命名
string dataPath = "iris.data.txt";
pipeline.Add(new TextLoader(dataPath).CreateFrom(separator: ','));
//步骤 3: 转换数据
// 将数值分配给 "标签 " 列中的文本,
// 因为只有在模型训练过程中才能处理数字
pipeline.Add(new Dictionarizer("Label"));
// 将所有特征放入向量中
pipeline.Add(new ColumnConcatenator("Features", "SepalLength", "SepalWidth", "PetalLength", "PetalWidth"));
// 步骤 4: 添加学习者
// 向类中添加学习算法。这是一个分类场景 (这是什么类型?)
pipeline.Add(new StochasticDualCoordinateAscentClassifier());
// 将标签转换回原始文本 (在步骤3中转换为数字后)
pipeline.Add(new PredictedLabelColumnOriginalValueConverter() { PredictedLabelColumn = "PredictedLabel" });
// 步骤 5: 基于数据集对模型进行训练
var model = pipeline.Train();
// 步骤 6: 使用您的模型进行预测
// 您可以更改这些数字来测试不同的预测
var prediction = model.Predict(new IrisData()
{
SepalLength = 3.3f,
SepalWidth = 1.6f,
PetalLength = 0.2f,
PetalWidth = 5.1f,
});
Console.WriteLine($"Predicted flower type is: {prediction.PredictedLabels}");
Thread.Sleep(3000);
}
}
}
OK,执行它吧。
打印出超参数和结果
输出结果了呢。