.Net机器学习入门

文章目录

安装包

powershell 复制代码
NuGet\Install-Package Microsoft.ML

用静态数据

Program.cs

csharp 复制代码
using Demo1;
using Microsoft.ML;

var context = new MLContext();
var modelPath = Path.Combine(AppContext.BaseDirectory, "model.zip");
var tools = new ModelTools
{
    Context = context,
    ModelPath = modelPath,
};
if (File.Exists(modelPath))
{
    tools.LoadModel();
}
else
{
    tools.TrainAndSave();
}

ModelTools.cs

csharp 复制代码
internal class ModelTools
{
    public MLContext Context { get; set; }
    public string ModelPath { get; set; }

    public void LoadModel()
    {
        // 加载已保存的模型
        Console.WriteLine($"📂 从 {ModelPath} 加载模型...");
        var model = Context.Model.Load(ModelPath, out var modelSchema);
        Console.WriteLine("✅ 模型加载成功!");

        // 使用模型进行预测
        UseModelForPrediction(model);
    }

    public void UseModelForPrediction(ITransformer model)
    {
        //创建预测引擎
        var predictionEngine = Context.Model.CreatePredictionEngine<IrisData, IrisPrediction>(model);

        //进行预测
        var sample = new IrisData
        {
            SepalLength = 5.1f,
            SepalWidth = 3.5f,
            PetalLength = 5.0f,
            PetalWidth = 2.0f
        };

        var prediction = predictionEngine.Predict(sample);

        Console.WriteLine("\n🔍 预测结果:");
        Console.WriteLine($"输入特征: 花萼长={sample.SepalLength}cm, 宽={sample.SepalWidth}cm");
        Console.WriteLine($"          花瓣长={sample.PetalLength}cm, 宽={sample.PetalWidth}cm");
        Console.WriteLine($"🌸 预测品种: {prediction.PredictedLabel}");
        Console.WriteLine($"🎯 实际品种: {sample.Label ?? "未知"}"); // 示例中未设置sample.Label
    }

    internal void TrainAndSave()
    {
        //训练数据
        var data = new[]
            {
                new IrisData { SepalLength=5.1f, SepalWidth=3.5f, PetalLength=1.4f, PetalWidth=0.2f, Label="Iris-setosa" },
                new IrisData { SepalLength=4.9f, SepalWidth=3.0f, PetalLength=1.4f, PetalWidth=0.2f, Label="Iris-setosa" },
                new IrisData { SepalLength=7.0f, SepalWidth=3.2f, PetalLength=4.7f, PetalWidth=1.4f, Label="Iris-versicolor" },
                new IrisData { SepalLength=6.4f, SepalWidth=3.2f, PetalLength=4.5f, PetalWidth=1.5f, Label="Iris-versicolor" },
                new IrisData { SepalLength=6.3f, SepalWidth=3.3f, PetalLength=6.0f, PetalWidth=2.5f, Label="Iris-virginica" },
                new IrisData { SepalLength=5.8f, SepalWidth=2.7f, PetalLength=5.1f, PetalWidth=1.9f, Label="Iris-virginica" }
            };
        //创建数据视图
        var dataView = Context.Data.LoadFromEnumerable(data);
        // 创建训练管道
        var pipeline = Context.Transforms.Conversion.MapValueToKey("LabelKey", "Label")
            .Append(Context.Transforms.Concatenate("Features",
                nameof(IrisData.SepalLength),
                nameof(IrisData.SepalWidth),
                nameof(IrisData.PetalLength),
                nameof(IrisData.PetalWidth)))
            .Append(Context.MulticlassClassification.Trainers.SdcaMaximumEntropy("LabelKey"))
            .Append(Context.Transforms.Conversion.MapKeyToValue("PredictedLabel"));
        // 训练模型
        Console.WriteLine("⏳ 训练模型中...");
        var model = pipeline.Fit(dataView);
        Console.WriteLine("✅ 模型训练完成!");
        // 保存模型到文件
        Console.WriteLine($"💾 保存模型到: {ModelPath}");
        Context.Model.Save(model, dataView.Schema, ModelPath);
        Console.WriteLine("✅ 模型保存成功!");
        UseModelForPrediction(model);
    }
}

IrisData.cs

csharp 复制代码
public class IrisData
{
    [LoadColumn(0)] public float SepalLength; // 花萼长度
    [LoadColumn(1)] public float SepalWidth;  // 花萼宽度
    [LoadColumn(2)] public float PetalLength; // 花瓣长度
    [LoadColumn(3)] public float PetalWidth;  // 花瓣宽度
    [LoadColumn(4)] public string Label;      // 品种标签
}

public class IrisPrediction : IrisData
{
    public string PredictedLabel; // 预测结果
}

在这段代码中,Label就是我们要预测的「结论」(目标变量),而 SepalLength、SepalWidth、PetalLength、PetalWidth这四个属性是模型的「入参」(特征变量)。我们的训练就是总结特征变量和目标变量的相关性,从而在输入一个新的入参时预测结论。

相关推荐
Shockang6 小时前
AI Slop 治理实战
人工智能
Mr数据杨7 小时前
医学影像分类实战复盘 从 Kaggle 竞赛到可落地建模流程
人工智能·数据分析·kaggle竞赛
AI情绪识别开源8 小时前
检信 ALLEMOTION OS 加密打包可执行程序 — 全面测试报告版本: v1.3功能测试 / 性能测试 /
开发语言·数据结构·人工智能·功能测试
ZGIAI8 小时前
ZGI 迭代节点:批量资料的逐项处理
人工智能·架构
ZGIAI8 小时前
ZGI 知识检索:让业务回答有据可查
人工智能·架构
Asize8 小时前
框架的说明书是写给 AI 看的:我用 Next.js 搭了个博客
人工智能·代码规范·next.js
2601_955662468 小时前
AI 配音工具 7 款实测:短视频、影视解说、小说推文音质横向对比
人工智能·音视频·语音识别·视频
AI创界者9 小时前
PinkCherry-MiniMax-H3 全能AI视频整合包:8G显存开箱即用,支持首尾帧/超分补帧/自动提示词
人工智能·aigc
罗西的思考9 小时前
【Agentic RL / 强化学习框架】Molt 设计解读
人工智能·算法·机器学习