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

相关推荐
Ronin3052 小时前
ToDesk AI如何成为Codex远程控制的国内代替品?
人工智能
测试员周周3 小时前
【AI测试智能体-面试】AI测试面试60题(附回答思路)
人工智能·python·功能测试·测试工具·单元测试·自动化·测试用例
ShyanZh3 小时前
【skill】Humanizer-zh:24条规则消灭AI写作痕迹
人工智能·ai写作·skill
电商软件开发 小银3 小时前
思域不再安全?AI+独立APP破局指南
人工智能·软件开发·数字化转型·商业模式·超级app·商业思维·ai 矩阵运营
asyxchenchong8883 小时前
最新Hermes Agent 技能封装与科研自动化:以 Meta-Analysis 为例-实现从文献检索到绘图的一站式工作流
运维·人工智能·自动化
武子康3 小时前
调查研究-168 MiroFish 本地化部署分析:主仓库、Zep Cloud、离线 Fork 与真正可控的多智能体沙盘
人工智能·aigc·openai
诗词在线3 小时前
求推荐飞花令
大数据·人工智能·python
云烟成雨TD3 小时前
Spring AI 1.x 系列【47】 MCP Annotations 模块
java·人工智能·spring
心枢AI研习社3 小时前
我问了claude目前最强大的模型fable 5这个问题?
人工智能·agent·claude
湘美书院--湘美谈教育4 小时前
湘美谈教育AI系列经验集锦:赋能整理聊斋志异大寓言
大数据·人工智能·深度学习·神经网络·机器学习