.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这四个属性是模型的「入参」(特征变量)。我们的训练就是总结特征变量和目标变量的相关性,从而在输入一个新的入参时预测结论。

相关推荐
Rocky Ding*10 分钟前
【三年面试五年模拟】2026-10-26 携程 AI Agent一面面经全解析
论文阅读·人工智能·深度学习·机器学习·aigc·ai-native·ai agent
Zhao-Jichao12 分钟前
AI Prompting for Everyone 课程笔记 - 02 预训练知识 Pretrained knowledge
人工智能
ai_xiaogui15 分钟前
PanelAI项目实战:从AI一键生成到企业级AI基础设施操作系统PPT手搓复盘与架构落地
人工智能·架构·一键部署·panelai·企业级ai基础设施操作系统·ai智能底层操作系统·算力变现
lucas_AI18 分钟前
NPU 算力不再注水:拿量产世界模型实测芯片,700 TOPS 里 98.7% 真能干活
人工智能
CAIE研习社24 分钟前
30岁以后学习AI应用,证书能起到什么作用?
人工智能·学习
Dawson Zhu26 分钟前
【Runtime推理引擎①】Runtime架构设计:从Session到Graph Executor的完整骨架
人工智能·语言模型·架构·aigc·agi
长不大的杨瑞杰31 分钟前
OpenCode v2 LSP 实战:内置语言服务器、自定义配置与诊断闭环
java·人工智能·typescript·lsp·opencode
在所不辞兄32 分钟前
【零基础学智能仿真-68】本地仿真助手的工具调用
人工智能·机器学习
郝学胜-神的一滴34 分钟前
AI 编程智能体 20:技术栈选型与架构落地全攻略
人工智能·python·架构·langchain·1024程序员节·智能体
zwc321043205536 分钟前
第四周第五天——重构成类
c++·人工智能·opencv·算法·计算机视觉