首页 > 分享 > 教程:对鸢尾花进行分类

教程:对鸢尾花进行分类

跳转至主内容

此浏览器不再受支持。

请升级到 Microsoft Edge 以使用最新的功能、安全更新和技术支持。

Learn

文档

有关 Microsoft 开发人员工具和技术的深度文章

问答

经 Microsoft 审核的技术问题和解答

代码示例

Microsoft 开发人员工具和技术的代码示例库

节目

来自 Microsoft 专家的数千小时原创节目

适用于组织的 Microsoft Learn

提高团队的技术技能

访问特选资源,以提升团队技能水平,缩小技能差距。

适用于组织的 Microsoft Learn

提高团队的技术技能

访问特选资源,以提升团队技能水平,缩小技能差距。

适用于组织的 Microsoft Learn

提高团队的技术技能

访问特选资源,以提升团队技能水平,缩小技能差距。

适用于组织的 Microsoft Learn

提高团队的技术技能

访问特选资源,以提升团队技能水平,缩小技能差距。

登录

教程:配合使用 K 平均值聚类分析和 ML.NET 来对鸢尾花分类

项目2023/05/10

本文内容

先决条件了解问题选择适当的机器学习任务创建控制台应用程序准备数据创建数据类定义数据和模型路径创建 ML 上下文设置数据加载创建学习管道定型模型使用预测模型后续步骤

本教程演示如何使用 ML.NET 为鸢尾花数据集构建聚类分析模型。

在本教程中,你将了解:

了解问题 选择适当的机器学习任务 准备数据 加载和转换数据 选择学习算法 定型模型 使用预测模型

先决条件

Visual Studio 2022。

了解问题

此问题的本质即基于花卉特征将鸢尾花数据归入不同的组。 这些特征包括:花萼的长度和宽度以及花瓣的长度和宽度。 此教程假设每朵花的类型都是未知的。 需通过这些特征了解数据集的结构,并预测数据实例与此结构的拟合程度。

选择适当的机器学习任务

鉴于不知道每朵花属于哪个分组,应选择非监管式机器学习任务。 为将数据归入不同的组,并使同一组中的元素互相之间更为相似(与其他组中的元素相比),应使用聚类分析机器学习任务。

创建控制台应用程序

创建名为“IrisFlowerClustering”的 C# 控制台应用程序。 单击“下一步”按钮。

选择 .NET 6 作为要使用的框架。 单击“创建” 按钮。

在项目中创建一个名为“数据”的目录来保存数据集和模型文件 :

在“解决方案资源管理器”中,右键单击项目,然后选择“添加”>“新文件夹” 。 键入“Data”,然后按 Enter。

安装“Microsoft.ML NuGet”包 :

备注

除非另有说明,否则本示例使用前面提到的 NuGet 包的最新稳定版本。

在“解决方案资源管理器”中,右键单击项目,然后选择“管理 NuGet 包” 。 选择“nuget.org”作为包源,然后选择“浏览”选项卡并搜索“Microsoft.ML”,再选择“安装”按钮 。 选择“预览更改” 对话框上的“确定” 按钮,如果你同意所列包的许可条款,则选择“接受许可” 对话框上的“我接受” 按钮。

准备数据

下载 iris.data 数据集并将其保存至在上一步中创建的“数据”文件夹 。 若要详细了解鸢尾花数据集,请参阅鸢尾花数据集维基百科页面,以及该数据集的源鸢尾花数据集页面。

在“解决方案资源管理器”中,右键单击“iris.data”文件并选择“属性” 。 在“高级”下,将“复制到输出目录”的值更改为“如果较新则复制” 。

该 iris.data 文件包含五列,分别代表以下内容 :

花萼长度(厘米) 花萼宽度(厘米) 花瓣长度(厘米) 花瓣宽度(厘米) 鸢尾花类型

考虑到聚类分析示例,本教程忽略最后一列。

创建数据类

创建输入数据和预测类:

在“解决方案资源管理器” 中,右键单击项目,然后选择“添加” >“新项” 。

在“添加新项”对话框中,选择“类”并将“名称”字段更改为“IrisData.cs” 。 然后,选择“添加” 按钮。

将以下 using 指令添加到新文件:

using Microsoft.ML.Data;

删除现有类定义并向“IrisData.cs”文件添加以下代码,其中定义了两个类 IrisData 和 ClusterPrediction :

public class IrisData { [LoadColumn(0)] public float SepalLength; [LoadColumn(1)] public float SepalWidth; [LoadColumn(2)] public float PetalLength; [LoadColumn(3)] public float PetalWidth; } public class ClusterPrediction { [ColumnName("PredictedLabel")] public uint PredictedClusterId; [ColumnName("Score")] public float[]? Distances; }

IrisData 是输入数据类,并且具有针对数据集每个特征的定义。 使用 LoadColumn 属性在数据集文件中指定源列的索引。

ClusterPrediction 类表示应用到 IrisData 实例的聚类分析模型的输出。 使用 ColumnName 属性将 PredictedClusterId 和 Distances 字段分别绑定至 PredictedLabel 和 Score 列 。 在聚类分析任务中,这些列具有以下含义:

PredictedLabel 列包含所预测的群集的 ID。 Score 列包含一个数组,该数组中的数与群集形心之间的距离为欧氏距离的平方。 该数组的长度等于群集数。

备注

使用 float 类型来表示输入和预测数据类中的浮点值。

定义数据和模型路径

返回到 Program.cs 文件并添加两个字段,以保存数据集文件以及用于保存模型的文件的路径 :

_dataPath 包含具有用于定型模型的数据集的文件的路径。 _modelPath 包含用于存储定型模型的文件的路径。

在 using 语句下添加以下代码以指定这些路径:

string _dataPath = Path.Combine(Environment.CurrentDirectory, "Data", "iris.data"); string _modelPath = Path.Combine(Environment.CurrentDirectory, "Data", "IrisClusteringModel.zip");

创建 ML 上下文

将以下附加 using 指令添加到 Program.cs 文件顶部 :

using Microsoft.ML; using IrisFlowerClustering;

使用以下代码替换 Console.WriteLine("Hello World!"); 行:

var mlContext = new MLContext(seed: 0);

Microsoft.ML.MLContext 类表示机器学习环境,并提供用于数据加载、模型定型、预测和其他任务的日志记录和入口点的机制。 这在概念上相当于在实体框架中使用 DbContext。

设置数据加载

在 MLContext 下面添加以下代码以设置加载数据的方式:

IDataView dataView = mlContext.Data.LoadFromTextFile<IrisData>(_dataPath, hasHeader: false, separatorChar: ',');

泛型 MLContext.Data.LoadFromTextFile 扩展方法根据所提供的 IrisData 类型推断数据集架构,并返回可用作转换器输入的 IDataView。

创建学习管道

对于本教程,聚类分析任务的学习管道包含两个以下步骤:

将加载的列连接到“Features”列,由聚类分析训练程序使用 ; 借助 KMeansTrainer 训练程序使用 k - 平均值 + + 聚类分析算法来定型模型。

在加载数据之后添加以下内容:

string featuresColumnName = "Features"; var pipeline = mlContext.Transforms .Concatenate(featuresColumnName, "SepalLength", "SepalWidth", "PetalLength", "PetalWidth") .Append(mlContext.Clustering.Trainers.KMeans(featuresColumnName, numberOfClusters: 3));

该代码指定该数据集应拆分为三个群集。

定型模型

前述部分中添加的步骤准备了用于定型的管道,但尚未执行。 在文件底部添加以下行,以执行数据加载和模型训练:

var model = pipeline.Fit(dataView);

保存模型

此时,你具有可以集成到任何现有或新 .NET 应用程序的模型。 要将模型保存为 .zip 文件,请在调用 Fit 方法的内容下面添加以下代码:

using (var fileStream = new FileStream(_modelPath, FileMode.Create, FileAccess.Write, FileShare.Write)) { mlContext.Model.Save(model, dataView.Schema, fileStream); }

使用预测模型

要进行预测,请使用通过转换器管道获取输入类型实例和生成输出类型实例的 PredictionEngine<TSrc,TDst> 类。 添加以下行以创建该类的实例:

var predictor = mlContext.Model.CreatePredictionEngine<IrisData, ClusterPrediction>(model);

PredictionEngine 是一个简便 API,可使用它对单个数据实例执行预测。 PredictionEngine 不是线程安全。 可以在单线程环境或原型环境中使用。 为了在生产环境中提高性能和线程安全,请使用 PredictionEnginePool 服务,这将创建一个在整个应用程序中使用的 PredictionEngine 对象的 ObjectPool。 请参阅本指南,了解如何在 ASP.NET Core Web API 中使用 PredictionEnginePool。

备注

PredictionEnginePool 服务扩展目前处于预览状态。

将 TestIrisData 类创建到房屋测试数据实例:

在“解决方案资源管理器” 中,右键单击项目,然后选择“添加” >“新项” 。

在“添加新项”对话框中,选择“类”并将“名称”字段更改为“TestIrisData.cs” 。 然后,选择“添加” 按钮。

将类修改为静态,如下面的示例所示:

static class TestIrisData

本教程引入此类中的一个鸢尾花数据实例。 可以添加其他方案来体验此模型。 将下面的代码添加到 TestIrisData 类中:

internal static readonly IrisData Setosa = new IrisData { SepalLength = 5.1f, SepalWidth = 3.5f, PetalLength = 1.4f, PetalWidth = 0.2f };

若要查找指定项所属的群集,请返回至 Program.cs 文件并在文件底部添加以下代码:

var prediction = predictor.Predict(TestIrisData.Setosa); Console.WriteLine($"Cluster: {prediction.PredictedClusterId}"); Console.WriteLine($"Distances: {string.Join(" ", prediction.Distances ?? Array.Empty<float>())}");

运行该程序以查看哪个群集包含所指定的数据实例,以及从该实例到群集形心的距离的平方值。 结果应如下所示:

Cluster: 2 Distances: 11.69127 0.02159119 25.59896

祝贺你! 现已成功地生成用于鸢尾花聚类分析的机器学习模型并将其用于预测。 可以在 dotnet/samples GitHub 存储库中找到本教程的源代码。

后续步骤

在本教程中,你将了解:

了解问题 选择适当的机器学习任务 准备数据 加载和转换数据 选择学习算法 定型模型 使用预测模型

查看我们的 GitHub 存储库以继续学习,并找到更多示例。

可以在 GitHub 上找到此内容的源,还可以在其中创建和查看问题和拉取请求。 有关详细信息,请参阅参与者指南。

其他资源

培训

文档

教程:对支持问题进行分类 - 多类分类 - ML.NET

了解如何在多类分类方案中使用 ML.NET 对 GitHub 问题进行分类,将其分配到给定区域。

教程:分析网站评论 - 二元分类 - ML.NET

本教程演示如何创建 .NET Core 控制台应用程序,该应用程序对网站评论情绪进行分类并采取适当的措施。 二元情绪分类器在 Visual Studio 中使用 C#。

教程:使用回归预测价格 - ML.NET

本教程演示如何使用 ML.NET 生成回归模型来预测价格,特别是纽约市的出租车费。

教程:使用 TensorFlow 模型分析评审情绪 - ML.NET

本教程演示如何使用预先训练的 TensorFlow 模型对网站评论中的情绪进行分类。 二元情绪分类器是使用 Visual Studio 开发的 C# 控制台应用程序。

教程:用于对图像进行分类的 ML.NET 分类模型 - ML.NET

了解如何通过用于处理图像的预先训练的 TensorFlow 模型来训练分类模型,以便对图像进行分类。

ML.NET 教程 - ML.NET

浏览以下 ML.NET 教程,了解如何生成自定义 AI 解决方案并将其集成到 .NET 应用程序。

Infer.NET 游戏匹配应用 - 概率性编程 - ML.NET

了解如何使用概率性编程和 Infer.NET 创建基于简化版 TrueSkill 的游戏匹配列表应用。

教程:生成影片推荐系统 - 矩阵因子分解 - ML.NET

本教程演示如何在 .NET Core 控制台应用程序中使用 ML.NET 生成电影推荐系统。 这些步骤使用 C# 和 Visual Studio 2019。

本文内容

相关知识

对鸢尾花进行分类预测
用svm进行鸢尾花分类
鸢尾花分类
基于BP神经网络对鸢尾花的分类的研究
卷积神经网络实现鸢尾花数据分类python代码实现
使用神经网络模型进行鸢尾花分类 matlab神经网络分类鸢尾花
基于Logistic回归模型对鸢尾花数据集的线性多分类
【机器学习】鸢尾花分类
python实践gcForest模型对鸢尾花数据集iris进行分类
鸢尾花的分类(四种方法)

网址: 教程:对鸢尾花进行分类 https://m.huajiangbk.com/newsview546469.html

所属分类:花卉
上一篇: 机器学习算法之决策树实现鸢尾花数
下一篇: 数据挖掘::实验一 WEKA分类