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

相关推荐
金伟API10244 小时前
如何从零打造一个极简的DeepSeek-R1大模型
人工智能·ai
江畔柳前堤4 小时前
大语言模型分布式训练:从并行策略到万卡工程的系统梳理
人工智能·分布式·深度学习·算法·目标检测·机器学习·语言模型
Shockang4 小时前
智能体环路工程实战
人工智能
美摄科技4 小时前
美摄美颜特效SDK Skill:以AI赋能智能视音频新视界
人工智能
Web3_Daisy5 小时前
Pump.fun 与 FOMO 竞争背后的 Meme 市场变局
大数据·人工智能·金融·web3·区块链
AI创界者5 小时前
MiniMax-H3 本地一键部署整合包:8G 显存玩转文图生视频、视频参考、角色替换与超分补帧全流程
人工智能·深度学习
江畔柳前堤5 小时前
HBM:大语言模型时代的「算力血液」——从内存墙到带宽革命的深度拆解
服务器·人工智能·windows·目标检测·语言模型·自然语言处理·软件工程
美摄科技5 小时前
视频一键成片SDK Skill:AI智能分析与语义理解
人工智能
fthux6 小时前
装闭 RenoPit 源码解析(05):FastAPI与Celery如何执行AI装修分析
人工智能·ai·开源·github·open source·renopit
格数致用7 小时前
数据库设计与表结构详解|信息化项目全流程管理系统源码逐行精讲(五)
人工智能·政务·数据库设计·外键约束