数据集 :https://en.wikipedia.org/wiki/Iris_flower_data_set

聚类分析

非监管式机器学习任务,用于将数据实例分组到包含类似特性的群集。 聚类分析还可用来识别可能无法通过浏览或简单的观察以逻辑方式推导出的数据集中的关系。 聚类分析算法的输入和输出取决于选择的方法。 可以采取分发、质心、连接或基于密度的方法。ML.NET 当前支持使用 K 平均值聚类分析的基于质心的方法。 聚类分析方案示例包括:

  • 基于酒店选择的习惯和特征来了解酒店来宾群。
  • 确定客户群和人口统计信息来帮助生成目标广告活动。
  • 基于生产指标对清单进行分类。

聚类分析训练程序

可以使用以下算法训练聚类分析模型:

聚类分析输入和输出

输入特征数据必须为 Single。 无需标签。

该训练程序输出以下列:

输出名称 类型 说明
Score Single 的向量 给定数据点到所有群集的质心的距离
PredictedLabel key 类型 模型预测的最接近的群集的索引。

异常情况检测

此任务使用主体组件分析 (PCA) 创建异常情况检测模型。 基于 PCA 的异常情况检测有助于在以下场景中构建模型:可以很轻松地从一个类中获得定型数据(例如有效事务),但难以获得目标异常的足够示例。

PCA 是机器学习中已建立的一种技术,由于它揭示了数据的内部结构,并解释了数据中的差异,因此经常被用于探索性数据分析。PCA 的工作方式是通过分析包含多个变量的数据。 它查找变量之间的关联性,并确定最能捕捉结果差异的值的组合。 这些组合的特性值用于创建一个更紧凑的特性空间,称为主体组件。

异常情况检测包含机器学习中的许多重要任务:

  • 识别潜在的欺诈交易。
  • 指示发生了网络入侵的学习模式。
  • 发现异常的患者群集。
  • 检查输入系统的值。

根据定义,异常情况属于罕见事件,因此很难收集具有代表性的数据样本用于建模。 此类别中包含的算法是专门设计用来解决使用不平衡数据集建立和定型模型的核心挑战。

异常情况检测训练程序

可以使用以下算法训练异常情况检测模型:

异常情况检测输入和输出

输入特征必须为 Single 的固定大小向量。

该训练程序输出以下列:

输出名称 类型 说明
Score Single 由异常情况检测模型计算得出的非负无界分数

排名

排名任务从一组标记的示例构建排名程序。 该示例集由实例组组成,这些实例组可以使用给定的标准进行评分。 每个实例的排名标签是 { 0, 1, 2, 3, 4 }。 排名程序定型为用每个实例的未知分数对新实例组进行排名。 ML.NET 排名学习器基于机器已学习的排名

排名训练算法

可以使用以下算法训练排名模型:

排名输入和输出

输入标签数据类型必须为 key 类型或 Single。 标签的值决定相关性,其中较高的值表示较高的相关性。 如果标签为 key 类型,则键索引为相关性值,其中最小索引是最不相关的。 如果标签为 Single,则较大的值表示较高的相关性。

特征数据必须为 Single 的固定大小向量,输入行组列必须为 key 类型。

该训练程序输出以下列:

输出名称 类型 说明
Score Single 由模型计算以确定预测的无界分数

建议

推荐任务支持生成推荐产品或服务的列表。 ML.NET 使用矩阵因子分解 (MF),这是一种协作筛选算法,当目录中有历史产品评级数据时,推荐使用该算法。 例如,你为用户提供历史电影评级数据,并希望向他们推荐接下来可能观看的其他电影。

建议训练算法

可以使用以下算法训练建议模型:

系统必备

了解问题

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

选择适当的机器学习任务

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

创建控制台应用程序

  1. 打开 Visual Studio。 从菜单栏中选择“文件” > “新建” > “项目” 。 在“新项目” 对话框中,依次选择“Visual C#” 和“.NET Core” 节点。 然后,选择“控制台应用程序(.NET Core)” 项目模板。 在“名称”文本框中,键入“IrisFlowerClustering”,然后选择“确定”按钮 。

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

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

  3. 安装“Microsoft.ML NuGet”包 :

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

准备数据

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

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

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

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

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

创建数据类

创建输入数据和预测类:

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

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

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

    C#复制
    using Microsoft.ML.Data;

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

C#复制
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 包含用于存储定型模型的文件的路径。

将以下代码添加到 Main 方法上方,以指定这些路径:

C#复制
static readonly string _dataPath = Path.Combine(Environment.CurrentDirectory, "Data", "iris.data");
static readonly string _modelPath = Path.Combine(Environment.CurrentDirectory, "Data", "IrisClusteringModel.zip");

要编译前面的代码,请将以下 using 指令添加到 Program.cs 文件顶部 :

C#复制
using System;
using System.IO;

创建 ML 上下文

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

C#复制
using Microsoft.ML;
using Microsoft.ML.Data;

在 Main 方法中,请使用以下代码替换 Console.WriteLine("Hello World!"); 行:

C#复制
var mlContext = new MLContext(seed: 0);

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

设置数据加载

将以下代码添加到 Main 方法以设置加载数据的方式:

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

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

创建学习管道

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

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

将以下代码添加到 Main 方法中:

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

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

定型模型

前述部分中添加的步骤准备了用于定型的管道,但尚未执行。 将以下行添加到 Main 方法以执行数据加载和模型定型:

C#复制
var model = pipeline.Fit(dataView);

保存模型

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

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

使用预测模型

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

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

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

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

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

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

    C#复制
    static class TestIrisData

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

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

若要查找指定项所属的群集,请返回至 Program.cs 文件并将以下代码添加进 Main 方法 :

C#复制
var prediction = predictor.Predict(TestIrisData.Setosa);
Console.WriteLine($"Cluster: {prediction.PredictedClusterId}");
Console.WriteLine($"Distances: {string.Join(" ", prediction.Distances)}");

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

text复制
Cluster: 2
Distances: 11.69127 0.02159119 25.59896

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

使用 ML.NET 对 K-Means 平均值聚类分析和分类的更多相关文章

  1. kNN算法:K最近邻(kNN,k-NearestNeighbor)分类算法

    一.KNN算法概述 邻近算法,或者说K最近邻(kNN,k-NearestNeighbor)分类算法是数据挖掘分类技术中最简单的方法之一.所谓K最近邻,就是k个最近的邻居的意思,说的是每个样本都可以用它 ...

  2. ML: 聚类算法-K均值聚类

    基于划分方法聚类算法R包: K-均值聚类(K-means)                   stats::kmeans().fpc::kmeansruns() K-中心点聚类(K-Medoids) ...

  3. KNN 与 K - Means 算法比较

    KNN K-Means 1.分类算法 聚类算法 2.监督学习 非监督学习 3.数据类型:喂给它的数据集是带label的数据,已经是完全正确的数据 喂给它的数据集是无label的数据,是杂乱无章的,经过 ...

  4. 软件——机器学习与Python,聚类,K——means

    K-means是一种聚类算法: 这里运用k-means进行31个城市的分类 城市的数据保存在city.txt文件中,内容如下: BJ,2959.19,730.79,749.41,513.34,467. ...

  5. 机器学习之路: python k近邻分类器 KNeighborsClassifier 鸢尾花分类预测

    使用python语言 学习k近邻分类器的api 欢迎来到我的git查看源代码: https://github.com/linyi0604/MachineLearning from sklearn.da ...

  6. 机器学习框架ML.NET学习笔记【4】多元分类之手写数字识别

    一.问题与解决方案 通过多元分类算法进行手写数字识别,手写数字的图片分辨率为8*8的灰度图片.已经预先进行过处理,读取了各像素点的灰度值,并进行了标记. 其中第0列是序号(不参与运算).1-64列是像 ...

  7. 机器学习框架ML.NET学习笔记【5】多元分类之手写数字识别(续)

    一.概述 上一篇文章我们利用ML.NET的多元分类算法实现了一个手写数字识别的例子,这个例子存在一个问题,就是输入的数据是预处理过的,很不直观,这次我们要直接通过图片来进行学习和判断.思路很简单,就是 ...

  8. 用Python从零开始实现K近邻算法

    KNN算法的定义: KNN通过测量不同样本的特征值之间的距离进行分类.它的思路是:如果一个样本在特征空间中的k个最相似(即特征空间中最邻近)的样本中的大多数属于某一个类别,则该样本也属于这个类别.K通 ...

  9. 数据挖掘-聚类分析(Python实现K-Means算法)

    概念: 聚类分析(cluster analysis ):是一组将研究对象分为相对同质的群组(clusters)的统计分析技术.聚类分析也叫分类分析,或者数值分类.聚类的输入是一组未被标记的样本,聚类根 ...

随机推荐

  1. SAP SD 信用检查相关

    SAP系统信用管理功能的介绍:    R/3系统具有强大的信用管理功能.系统可将来自于FI.SD的财务及销售信息进行汇总, 提供即时的信用数据;并可依据信用政策对订单及发货进行管理,有效地降低风险;并 ...

  2. 用C#搭建WebSocket

    WebSocket 是 HTML5 开始提供的一种在单个 TCP 连接上进行全双工通讯的协议. WebSocket 使得客户端和服务器之间的数据交换变得更加简单,允许服务端主动向客户端推送数据.在 W ...

  3. 开源串口 Ymodem 上位机软件

    概述 上位机使用Qt开发,计划整合多个工具为一体,用作以后的调试工具. 当前完成功能: 1.串口调试 支持hex和ascii 码发送,接受. 支持自动添加回车换行. 支持定时发送,最短间隔100ms, ...

  4. sql server union与unionALL区别

    两种用法 一样, 查询字段类型需要一致 union 会自动去重 union all  不会去重 select name ,age from student union select name ,age ...

  5. 2019 美团java面试笔试题 (含面试题解析)

      本人5年开发经验.18年年底开始跑路找工作,在互联网寒冬下成功拿到阿里巴巴.今日头条.美团等公司offer,岗位是Java后端开发,因为发展原因最终选择去了美团,入职一年时间了,也成为了面试官,之 ...

  6. IT之快速提高效率的方法与思考

    前言 文章也没什么很高深的问题,大概花个5分钟能看完.是一些大家都知道的道理,作为提醒与总结. 关于提高方面的内容,一般都有个人的方法,但大致都一致.可分为几个步骤. 框架.工具使用相关 使用框架.工 ...

  7. 【转载】 C#中ArrayList集合类的使用

    在C#的集合操作过程中,我们一般常用的集合类为List集合,List集合是一种强类型的泛型集合,其实还有一个ArrayList集合类,ArrayList集合类则非泛型类的集合,并且ArrayList集 ...

  8. 安全SECUERITY单词SECUERITY证券

    中文名:证券业 外文名:secuerity 含义:指从事证券发行和交易服务 性质:证券市场的基本组成要素 组成:证券交易所.证券公司 目录 1 证券评级 2 证券定义 ? 涵义 ? 内容 ? 分类 ? ...

  9. python爬虫爬取天气数据并图形化显示

    前言 使用python进行网页数据的爬取现在已经很常见了,而对天气数据的爬取更是入门级的新手操作,很多人学习爬虫都从天气开始,本文便是介绍了从中国天气网爬取天气数据,能够实现输入想要查询的城市,返回该 ...

  10. Hive安装部署与配置

    Hive安装部署与配置 1.1 Hive安装地址 1)Hive官网地址: http://hive.apache.org/ 2)文档查看地址: https://cwiki.apache.org/conf ...